FLTK 1.4.0
Loading...
Searching...
No Matches
Fl_Menu_Item.H
Go to the documentation of this file.
1//
2// Menu item header file for the Fast Light Tool Kit (FLTK).
3//
4// Copyright 1998-2022 by Bill Spitzak and others.
5//
6// This library is free software. Distribution and use rights are outlined in
7// the file "COPYING" which should have been included with this file. If this
8// file is missing or damaged, see the license at:
9//
10// https://www.fltk.org/COPYING.php
11//
12// Please see the following page on how to report bugs and issues:
13//
14// https://www.fltk.org/bugs.php
15//
16
17#ifndef Fl_Menu_Item_H
18#define Fl_Menu_Item_H
19
20#include <FL/Fl_Widget.H>
21#include <FL/Fl_Image.H>
22#include <FL/Fl_Multi_Label.H>
23#include <FL/platform_types.h> // for FL_COMMAND and FL_CONTROL
24
25// doxygen needs the following line to enable e.g. ::FL_MENU_TOGGLE to link to the enums
27
28enum { // values for flags:
35 FL_SUBMENU = 0x40,
38 FL_MENU_RESERVED = 0xffffff00
39};
40
41extern FL_EXPORT Fl_Shortcut fl_old_shortcut(const char*);
42
43class Fl_Menu_;
44
115struct FL_EXPORT Fl_Menu_Item {
116 const char *text;
120 int flags;
125
126 // advance N items, skipping submenus:
127 const Fl_Menu_Item *next(int=1) const;
128
134 Fl_Menu_Item *next(int i=1) {
135 return (Fl_Menu_Item*)(((const Fl_Menu_Item*)this)->next(i));}
136
138 const Fl_Menu_Item *first() const { return next(0); }
139
141 Fl_Menu_Item *first() { return next(0); }
142
143 // methods on menu items:
168 const char* label() const { return text; }
169
182 void label(const char* a) { text = a; }
183
199 void label(Fl_Labeltype a, const char* b) {
200 labeltype_ = a;
201 text = b;
202 }
203
218 void multi_label(const Fl_Multi_Label *ml) {
219 label(FL_MULTI_LABEL, (const char *)ml);
220 }
221
236 void image_label(const Fl_Image *image) {
237 label(FL_IMAGE_LABEL, (const char *)image);
238 }
239
247 Fl_Labeltype labeltype() const {return (Fl_Labeltype)labeltype_;}
248
256 void labeltype(Fl_Labeltype a) {labeltype_ = a;}
257
265 Fl_Color labelcolor() const {return labelcolor_;}
266
271 void labelcolor(Fl_Color a) {labelcolor_ = a;}
278 Fl_Font labelfont() const {return labelfont_;}
279
286 void labelfont(Fl_Font a) {labelfont_ = a;}
287
289 Fl_Fontsize labelsize() const {return labelsize_;}
290
292 void labelsize(Fl_Fontsize a) {labelsize_ = a;}
293
301 Fl_Callback_p callback() const {return callback_;}
302
307 void callback(Fl_Callback* c, void* p) {callback_=c; user_data_=p;}
308
314 void callback(Fl_Callback* c) {callback_=c;}
315
321 void callback(Fl_Callback0*c) {callback_=(Fl_Callback*)c;}
322
329 void callback(Fl_Callback1*c, long p=0) {callback_=(Fl_Callback*)c; user_data_=(void*)(fl_intptr_t)p;}
330
334 void* user_data() const {return user_data_;}
338 void user_data(void* v) {user_data_ = v;}
345 long argument() const {return (long)(fl_intptr_t)user_data_;}
353 void argument(long v) {user_data_ = (void*)(fl_intptr_t)v;}
354
356 int shortcut() const {return shortcut_;}
357
373 void shortcut(int s) {shortcut_ = s;}
381 int submenu() const {return flags&(FL_SUBMENU|FL_SUBMENU_POINTER);}
386 int checkbox() const {return flags&FL_MENU_TOGGLE;}
393 int radio() const {return flags&FL_MENU_RADIO;}
401 int value() const {return (flags & FL_MENU_VALUE) ? 1 : 0;}
402
404 void value(int v) { v ? set() : clear(); }
405
410 void set() {flags |= FL_MENU_VALUE;}
411
413 void clear() {flags &= ~FL_MENU_VALUE;}
414
415 void setonly(Fl_Menu_Item const* first = NULL);
416
418 int visible() const {return !(flags&FL_MENU_INVISIBLE);}
419
421 void show() {flags &= ~FL_MENU_INVISIBLE;}
422
424 void hide() {flags |= FL_MENU_INVISIBLE;}
425
427 int active() const {return !(flags&FL_MENU_INACTIVE);}
428
430 void activate() {flags &= ~FL_MENU_INACTIVE;}
435 void deactivate() {flags |= FL_MENU_INACTIVE;}
437 int activevisible() const {return !(flags & (FL_MENU_INACTIVE|FL_MENU_INVISIBLE));}
438
439 // compatibility for FLUID so it can set the image of a menu item...
440
446 void image(Fl_Image* image) {image->label(this);}
447
453 void image(Fl_Image& image) {image.label(this);}
454
455 // used by menubar:
456 int measure(int* h, const Fl_Menu_*) const;
457 void draw(int x, int y, int w, int h, const Fl_Menu_*, int t=0) const;
458
459 // popup menus without using an Fl_Menu_ widget:
460 const Fl_Menu_Item* popup(
461 int X, int Y,
462 const char *title = 0,
463 const Fl_Menu_Item* picked=0,
464 const Fl_Menu_* = 0) const;
465 const Fl_Menu_Item* pulldown(
466 int X, int Y, int W, int H,
467 const Fl_Menu_Item* picked = 0,
468 const Fl_Menu_* = 0,
469 const Fl_Menu_Item* title = 0,
470 int menubar=0) const;
471 const Fl_Menu_Item* test_shortcut() const;
472 const Fl_Menu_Item* find_shortcut(int *ip=0, const bool require_alt = false) const;
473
479 void do_callback(Fl_Widget* o) const {Fl::callback_reason_=FL_REASON_SELECTED; callback_(o, user_data_);}
480
486 void do_callback(Fl_Widget* o,void* arg) const {Fl::callback_reason_=FL_REASON_SELECTED; callback_(o, arg);}
487
495 void do_callback(Fl_Widget* o,long arg) const {Fl::callback_reason_=FL_REASON_SELECTED; callback_(o, (void*)(fl_intptr_t)arg);}
496
503 inline int checked() const {return value();}
504
511 inline void check() {set();}
512
519 inline void uncheck() {clear();}
520
521 int insert(int,const char*,int,Fl_Callback*,void* =0, int =0);
522 int add(const char*, int shortcut, Fl_Callback*, void* =0, int = 0);
523
525 int add(const char*a, const char* b, Fl_Callback* c,
526 void* d = 0, int e = 0) {
527 return add(a,fl_old_shortcut(b),c,d,e);}
528
529 int size() const ;
530};
531
532typedef Fl_Menu_Item Fl_Menu; // back compatibility
533
534enum { // back-compatibility enum:
535 FL_PUP_NONE = 0,
536 FL_PUP_GREY = FL_MENU_INACTIVE,
537 FL_PUP_GRAY = FL_MENU_INACTIVE,
538 FL_MENU_BOX = FL_MENU_TOGGLE,
539 FL_PUP_BOX = FL_MENU_TOGGLE,
540 FL_MENU_CHECK = FL_MENU_VALUE,
541 FL_PUP_CHECK = FL_MENU_VALUE,
542 FL_PUP_RADIO = FL_MENU_RADIO,
543 FL_PUP_INVISIBLE = FL_MENU_INVISIBLE,
544 FL_PUP_SUBMENU = FL_SUBMENU_POINTER
545};
546
547#endif
int Fl_Font
A font number is an index into the internal font table.
Definition Enumerations.H:1044
#define FL_MULTI_LABEL
Draws a label that can comprise several parts like text and images.
Definition Enumerations.H:880
unsigned int Fl_Color
An FLTK color value; see also Colors
Definition Enumerations.H:1101
#define FL_IMAGE_LABEL
Draws an image (Fl_Image) as the label.
Definition Enumerations.H:903
Fl_Labeltype
The labeltype() method sets the type of the label.
Definition Enumerations.H:816
int Fl_Fontsize
Size of a font in pixels.
Definition Enumerations.H:1073
@ FL_REASON_SELECTED
an item was selected
Definition Enumerations.H:448
Fl_Image, Fl_RGB_Image classes.
@ FL_MENU_RADIO
Item is a radio button (one checkbox of many can be on)
Definition Fl_Menu_Item.H:32
@ FL_SUBMENU
Item is a submenu to other items.
Definition Fl_Menu_Item.H:35
@ FL_MENU_DIVIDER
Creates divider line below this item. Also ends a group of radio buttons.
Definition Fl_Menu_Item.H:36
@ FL_MENU_TOGGLE
Item is a checkbox toggle (shows checkbox for on/off state)
Definition Fl_Menu_Item.H:30
@ FL_SUBMENU_POINTER
Indicates user_data() is a pointer to another menu array.
Definition Fl_Menu_Item.H:34
@ FL_MENU_VALUE
The on/off state for checkbox/radio buttons (if set, state is 'on')
Definition Fl_Menu_Item.H:31
@ FL_MENU_INVISIBLE
Item will not show up (shortcut will work)
Definition Fl_Menu_Item.H:33
@ FL_MENU_INACTIVE
Deactivate menu item (gray out)
Definition Fl_Menu_Item.H:29
@ FL_MENU_HORIZONTAL
??? – reserved, internal (do not use)
Definition Fl_Menu_Item.H:37
@ FL_MENU_RESERVED
These bits are reserved for internal or future usage (do not use)
Definition Fl_Menu_Item.H:38
Fl_Widget and Fl_Label classes.
void() Fl_Callback1(Fl_Widget *, long)
Callback type definition passing the widget and a long data value.
Definition Fl_Widget.H:39
void() Fl_Callback(Fl_Widget *, void *)
Default callback type definition for all fltk widgets (by far the most used)
Definition Fl_Widget.H:33
void() Fl_Callback0(Fl_Widget *)
One parameter callback type definition passing only the widget.
Definition Fl_Widget.H:37
Fl_Callback * Fl_Callback_p
Default callback type pointer definition for all fltk widgets.
Definition Fl_Widget.H:35
Base class for image caching, scaling and drawing.
Definition Fl_Image.H:60
virtual void label(Fl_Widget *w)
This method is an obsolete way to set the image attribute of a widget or menu item.
Definition Fl_Image.cxx:159
Base class of all widgets that have a menu in FLTK.
Definition Fl_Menu_.H:53
Fl_Widget is the base class for all widgets in FLTK.
Definition Fl_Widget.H:104
unsigned int Fl_Shortcut
16-bit Unicode character + 8-bit indicator for keyboard flags.
Definition fl_types.h:55
unsigned char uchar
unsigned char
Definition fl_types.h:30
Fl_Shortcut fl_old_shortcut(const char *)
Emulation of XForms named shortcuts.
Definition fl_shortcut.cxx:274
Definitions of platform-dependent types.
opaque fl_intptr_t
An integral type large enough to store a pointer or a long value.
Definition platform_types.h:31
The Fl_Menu_Item structure defines a single menu item that is used by the Fl_Menu_ class.
Definition Fl_Menu_Item.H:115
int shortcut() const
Gets what key combination shortcut will trigger the menu item.
Definition Fl_Menu_Item.H:356
Fl_Callback * callback_
menu item callback
Definition Fl_Menu_Item.H:118
long argument() const
Gets the user_data() argument that is sent to the callback function.
Definition Fl_Menu_Item.H:345
const char * text
menu item text, returned by label()
Definition Fl_Menu_Item.H:116
void clear()
Turns the check or radio item "off" for the menu item.
Definition Fl_Menu_Item.H:413
void argument(long v)
Sets the user_data() argument that is sent to the callback function.
Definition Fl_Menu_Item.H:353
Fl_Fontsize labelsize_
size of menu item text
Definition Fl_Menu_Item.H:123
void * user_data() const
Gets the user_data() argument that is sent to the callback function.
Definition Fl_Menu_Item.H:334
void callback(Fl_Callback *c, void *p)
Sets the menu item's callback function and userdata() argument.
Definition Fl_Menu_Item.H:307
void labelcolor(Fl_Color a)
Sets the menu item's label color.
Definition Fl_Menu_Item.H:271
int checked() const
Back compatibility only.
Definition Fl_Menu_Item.H:503
void deactivate()
Prevents a menu item from being picked.
Definition Fl_Menu_Item.H:435
void set()
Turns the check or radio item "on" for the menu item.
Definition Fl_Menu_Item.H:410
void labelsize(Fl_Fontsize a)
Sets the label font pixel size/height.
Definition Fl_Menu_Item.H:292
const Fl_Menu_Item * first() const
Returns the first menu item, same as next(0).
Definition Fl_Menu_Item.H:138
void value(int v)
Sets the current value of the check or radio item.
Definition Fl_Menu_Item.H:404
void callback(Fl_Callback1 *c, long p=0)
Sets the menu item's callback function and userdata() argument.
Definition Fl_Menu_Item.H:329
void user_data(void *v)
Sets the user_data() argument that is sent to the callback function.
Definition Fl_Menu_Item.H:338
int active() const
Gets whether or not the item can be picked.
Definition Fl_Menu_Item.H:427
void do_callback(Fl_Widget *o, long arg) const
Calls the Fl_Menu_Item item's callback, and provides the Fl_Widget argument.
Definition Fl_Menu_Item.H:495
int value() const
Returns the current value of the check or radio item.
Definition Fl_Menu_Item.H:401
void shortcut(int s)
Sets exactly what key combination will trigger the menu item.
Definition Fl_Menu_Item.H:373
const char * label() const
Returns the title (label) of the menu item.
Definition Fl_Menu_Item.H:168
Fl_Callback_p callback() const
Returns the callback function that is set for the menu item.
Definition Fl_Menu_Item.H:301
void callback(Fl_Callback *c)
Sets the menu item's callback function.
Definition Fl_Menu_Item.H:314
void check()
Back compatibility only.
Definition Fl_Menu_Item.H:511
void image(Fl_Image *image)
Compatibility API for FLUID, same as image->label(this).
Definition Fl_Menu_Item.H:446
Fl_Menu_Item * first()
Returns the first menu item, same as next(0).
Definition Fl_Menu_Item.H:141
void labeltype(Fl_Labeltype a)
Sets the menu item's labeltype.
Definition Fl_Menu_Item.H:256
Fl_Color labelcolor_
menu item text color
Definition Fl_Menu_Item.H:124
void hide()
Hides an item in the menu.
Definition Fl_Menu_Item.H:424
void labelfont(Fl_Font a)
Sets the menu item's label font.
Definition Fl_Menu_Item.H:286
int shortcut_
menu item shortcut
Definition Fl_Menu_Item.H:117
Fl_Fontsize labelsize() const
Gets the label font pixel size/height.
Definition Fl_Menu_Item.H:289
void callback(Fl_Callback0 *c)
Sets the menu item's callback function.
Definition Fl_Menu_Item.H:321
Fl_Font labelfont() const
Gets the menu item's label font.
Definition Fl_Menu_Item.H:278
void do_callback(Fl_Widget *o, void *arg) const
Calls the Fl_Menu_Item item's callback, and provides the Fl_Widget argument.
Definition Fl_Menu_Item.H:486
void * user_data_
menu item user_data for the menu's callback
Definition Fl_Menu_Item.H:119
Fl_Color labelcolor() const
Gets the menu item's label color.
Definition Fl_Menu_Item.H:265
void do_callback(Fl_Widget *o) const
Calls the Fl_Menu_Item item's callback, and provides the Fl_Widget argument.
Definition Fl_Menu_Item.H:479
int flags
menu item flags like FL_MENU_TOGGLE, FL_MENU_RADIO
Definition Fl_Menu_Item.H:120
void show()
Makes an item visible in the menu.
Definition Fl_Menu_Item.H:421
uchar labeltype_
how the menu item text looks like
Definition Fl_Menu_Item.H:121
void label(Fl_Labeltype a, const char *b)
Sets the title (label) and the label type of the menu item.
Definition Fl_Menu_Item.H:199
int add(const char *a, const char *b, Fl_Callback *c, void *d=0, int e=0)
See int add(const char*, int shortcut, Fl_Callback*, void*, int)
Definition Fl_Menu_Item.H:525
int radio() const
Returns true if this item is a radio item.
Definition Fl_Menu_Item.H:393
Fl_Labeltype labeltype() const
Returns the menu item's labeltype.
Definition Fl_Menu_Item.H:247
Fl_Font labelfont_
which font for this menu item text
Definition Fl_Menu_Item.H:122
int submenu() const
Returns true if either FL_SUBMENU or FL_SUBMENU_POINTER is on in the flags.
Definition Fl_Menu_Item.H:381
int visible() const
Gets the visibility of an item.
Definition Fl_Menu_Item.H:418
void activate()
Allows a menu item to be picked.
Definition Fl_Menu_Item.H:430
int checkbox() const
Returns true if a checkbox will be drawn next to this item.
Definition Fl_Menu_Item.H:386
void label(const char *a)
Sets the title (label) of the menu item.
Definition Fl_Menu_Item.H:182
void image_label(const Fl_Image *image)
Sets the title (label()) to an icon or image.
Definition Fl_Menu_Item.H:236
void uncheck()
Back compatibility only.
Definition Fl_Menu_Item.H:519
void image(Fl_Image &image)
Compatibility API for FLUID, same as image.label(this).
Definition Fl_Menu_Item.H:453
int activevisible() const
Returns non 0 if FL_INACTIVE and FL_INVISIBLE are cleared, 0 otherwise.
Definition Fl_Menu_Item.H:437
void multi_label(const Fl_Multi_Label *ml)
Sets the title (label()) and labeltype() to an Fl_Multi_Label.
Definition Fl_Menu_Item.H:218
Fl_Menu_Item * next(int i=1)
Advances a pointer by n items through a menu array, skipping the contents of submenus and invisible i...
Definition Fl_Menu_Item.H:134
Allows a mixed text and/or graphics label to be applied to an Fl_Menu_Item or Fl_Widget.
Definition Fl_Multi_Label.H:76