FLTK 1.3.0
|
00001 // 00002 // "$Id$" 00003 // 00004 // Menu item header file for the Fast Light Tool Kit (FLTK). 00005 // 00006 // Copyright 1998-2010 by Bill Spitzak and others. 00007 // 00008 // This library is free software; you can redistribute it and/or 00009 // modify it under the terms of the GNU Library General Public 00010 // License as published by the Free Software Foundation; either 00011 // version 2 of the License, or (at your option) any later version. 00012 // 00013 // This library is distributed in the hope that it will be useful, 00014 // but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00016 // Library General Public License for more details. 00017 // 00018 // You should have received a copy of the GNU Library General Public 00019 // License along with this library; if not, write to the Free Software 00020 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 00021 // USA. 00022 // 00023 // Please report all bugs and problems on the following page: 00024 // 00025 // http://www.fltk.org/str.php 00026 // 00027 00028 #ifndef Fl_Menu_Item_H 00029 #define Fl_Menu_Item_H 00030 00031 # include "Fl_Widget.H" 00032 # include "Fl_Image.H" 00033 00034 # if defined(__APPLE__) && defined(check) 00035 # undef check 00036 # endif 00037 00038 enum { // values for flags: 00039 FL_MENU_INACTIVE = 1, 00040 FL_MENU_TOGGLE= 2, 00041 FL_MENU_VALUE = 4, 00042 FL_MENU_RADIO = 8, 00043 FL_MENU_INVISIBLE = 0x10, 00044 FL_SUBMENU_POINTER = 0x20, 00045 FL_SUBMENU = 0x40, 00046 FL_MENU_DIVIDER = 0x80, 00047 FL_MENU_HORIZONTAL = 0x100 00048 }; 00049 00050 extern FL_EXPORT Fl_Shortcut fl_old_shortcut(const char*); 00051 00052 class Fl_Menu_; 00053 00118 struct FL_EXPORT Fl_Menu_Item { 00119 const char *text; 00120 int shortcut_; 00121 Fl_Callback *callback_; 00122 void *user_data_; 00123 int flags; 00124 uchar labeltype_; 00125 Fl_Font labelfont_; 00126 Fl_Fontsize labelsize_; 00127 Fl_Color labelcolor_; 00128 00129 // advance N items, skipping submenus: 00130 const Fl_Menu_Item *next(int=1) const; 00131 00137 Fl_Menu_Item *next(int i=1) { 00138 return (Fl_Menu_Item*)(((const Fl_Menu_Item*)this)->next(i));} 00139 00141 const Fl_Menu_Item *first() const { return next(0); } 00142 00144 Fl_Menu_Item *first() { return next(0); } 00145 00146 // methods on menu items: 00154 const char* label() const {return text;} 00155 00157 void label(const char* a) {text=a;} 00158 00160 void label(Fl_Labeltype a,const char* b) {labeltype_ = a; text = b;} 00161 00169 Fl_Labeltype labeltype() const {return (Fl_Labeltype)labeltype_;} 00170 00178 void labeltype(Fl_Labeltype a) {labeltype_ = a;} 00179 00187 Fl_Color labelcolor() const {return labelcolor_;} 00188 00193 void labelcolor(Fl_Color a) {labelcolor_ = a;} 00200 Fl_Font labelfont() const {return labelfont_;} 00201 00208 void labelfont(Fl_Font a) {labelfont_ = a;} 00209 00211 Fl_Fontsize labelsize() const {return labelsize_;} 00212 00214 void labelsize(Fl_Fontsize a) {labelsize_ = a;} 00215 00223 Fl_Callback_p callback() const {return callback_;} 00224 00229 void callback(Fl_Callback* c, void* p) {callback_=c; user_data_=p;} 00230 00236 void callback(Fl_Callback* c) {callback_=c;} 00237 00243 void callback(Fl_Callback0*c) {callback_=(Fl_Callback*)c;} 00244 00252 void callback(Fl_Callback1*c, long p=0) {callback_=(Fl_Callback*)c; user_data_=(void*)p;} 00253 00257 void* user_data() const {return user_data_;} 00261 void user_data(void* v) {user_data_ = v;} 00268 long argument() const {return (long)(fl_intptr_t)user_data_;} 00276 void argument(long v) {user_data_ = (void*)v;} 00277 00279 int shortcut() const {return shortcut_;} 00280 00296 void shortcut(int s) {shortcut_ = s;} 00304 int submenu() const {return flags&(FL_SUBMENU|FL_SUBMENU_POINTER);} 00309 int checkbox() const {return flags&FL_MENU_TOGGLE;} 00316 int radio() const {return flags&FL_MENU_RADIO;} 00318 int value() const {return flags&FL_MENU_VALUE;} 00323 void set() {flags |= FL_MENU_VALUE;} 00324 00326 void clear() {flags &= ~FL_MENU_VALUE;} 00327 00328 void setonly(); 00329 00331 int visible() const {return !(flags&FL_MENU_INVISIBLE);} 00332 00334 void show() {flags &= ~FL_MENU_INVISIBLE;} 00335 00337 void hide() {flags |= FL_MENU_INVISIBLE;} 00338 00340 int active() const {return !(flags&FL_MENU_INACTIVE);} 00341 00343 void activate() {flags &= ~FL_MENU_INACTIVE;} 00348 void deactivate() {flags |= FL_MENU_INACTIVE;} 00350 int activevisible() const {return !(flags & (FL_MENU_INACTIVE|FL_MENU_INVISIBLE));} 00351 00352 // compatibility for FLUID so it can set the image of a menu item... 00353 00355 void image(Fl_Image* a) {a->label(this);} 00356 00358 void image(Fl_Image& a) {a.label(this);} 00359 00360 // used by menubar: 00361 int measure(int* h, const Fl_Menu_*) const; 00362 void draw(int x, int y, int w, int h, const Fl_Menu_*, int t=0) const; 00363 00364 // popup menus without using an Fl_Menu_ widget: 00365 const Fl_Menu_Item* popup( 00366 int X, int Y, 00367 const char *title = 0, 00368 const Fl_Menu_Item* picked=0, 00369 const Fl_Menu_* = 0) const; 00370 const Fl_Menu_Item* pulldown( 00371 int X, int Y, int W, int H, 00372 const Fl_Menu_Item* picked = 0, 00373 const Fl_Menu_* = 0, 00374 const Fl_Menu_Item* title = 0, 00375 int menubar=0) const; 00376 const Fl_Menu_Item* test_shortcut() const; 00377 const Fl_Menu_Item* find_shortcut(int *ip=0, const bool require_alt = false) const; 00378 00384 void do_callback(Fl_Widget* o) const {callback_(o, user_data_);} 00385 00391 void do_callback(Fl_Widget* o,void* arg) const {callback_(o, arg);} 00392 00400 void do_callback(Fl_Widget* o,long arg) const {callback_(o, (void*)arg);} 00401 00402 // back-compatibility, do not use: 00403 00405 int checked() const {return flags&FL_MENU_VALUE;} 00406 00408 void check() {flags |= FL_MENU_VALUE;} 00409 00411 void uncheck() {flags &= ~FL_MENU_VALUE;} 00412 00413 int insert(int,const char*,int,Fl_Callback*,void* =0, int =0); 00414 int add(const char*, int shortcut, Fl_Callback*, void* =0, int = 0); 00415 00417 int add(const char*a, const char* b, Fl_Callback* c, 00418 void* d = 0, int e = 0) { 00419 return add(a,fl_old_shortcut(b),c,d,e);} 00420 00421 int size() const ; 00422 }; 00423 00424 typedef Fl_Menu_Item Fl_Menu; // back compatibility 00425 00426 enum { // back-compatibility enum: 00427 FL_PUP_NONE = 0, 00428 FL_PUP_GREY = FL_MENU_INACTIVE, 00429 FL_PUP_GRAY = FL_MENU_INACTIVE, 00430 FL_MENU_BOX = FL_MENU_TOGGLE, 00431 FL_PUP_BOX = FL_MENU_TOGGLE, 00432 FL_MENU_CHECK = FL_MENU_VALUE, 00433 FL_PUP_CHECK = FL_MENU_VALUE, 00434 FL_PUP_RADIO = FL_MENU_RADIO, 00435 FL_PUP_INVISIBLE = FL_MENU_INVISIBLE, 00436 FL_PUP_SUBMENU = FL_SUBMENU_POINTER 00437 }; 00438 00439 #endif 00440 00441 // 00442 // End of "$Id$". 00443 //