FLTK 1.3.0
Fl_Menu_Item.H
00001 //
00002 // "$Id: Fl_Menu_Item.H 7983 2010-12-09 00:04:06Z AlbrechtS $"
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: Fl_Menu_Item.H 7983 2010-12-09 00:04:06Z AlbrechtS $".
00443 //