diff options
| -rw-r--r-- | FL/Fl_Sys_Menu_Bar.H | 39 | ||||
| -rw-r--r-- | src/Fl_Sys_Menu_Bar.mm | 16 |
2 files changed, 45 insertions, 10 deletions
diff --git a/FL/Fl_Sys_Menu_Bar.H b/FL/Fl_Sys_Menu_Bar.H index c5c5b97e3..0c5b50cbf 100644 --- a/FL/Fl_Sys_Menu_Bar.H +++ b/FL/Fl_Sys_Menu_Bar.H @@ -25,26 +25,28 @@ #if defined(__APPLE__) || defined(FL_DOXYGEN) /** - \brief A class to create, modify and delete menus that appear on Mac OS X in the menu bar at the top of the screen. + A class to create, modify and delete menus that appear on Mac OS X in the menu bar at the top of the screen. - On other than Mac OS X platforms, Fl_Sys_Menu_Bar is a synonym of class Fl_Menu_Bar, - except for Fl_Sys_Menu_Bar::update() defined for Mac OS X only. - \n Some FLTK features are not supported by the Mac System menu: + On other than Mac OS X platforms, Fl_Sys_Menu_Bar is a synonym of class Fl_Menu_Bar. + \n To use this class, just replace Fl_Menu_Bar by Fl_Sys_Menu_Bar, and, on the Mac platform, + a system menu at the top of the screen will be available. This menu will match an array + of Fl_Menu_Item's exactly as with standard FLTK menus. + \n A few FLTK features are not supported by the Mac System menu: \li no symbolic labels \li no embossed labels \li no font sizes - \li some calls of the parent class don't work You can configure a callback for the 'About' menu item to invoke your own code with fl_mac_set_about(). - * */ class FL_EXPORT Fl_Sys_Menu_Bar : public Fl_Menu_Bar { protected: + void update(); void draw(); public: Fl_Sys_Menu_Bar(int x,int y,int w,int h,const char *l=0); ~Fl_Sys_Menu_Bar(); - /** Return the system menu's array of Fl_Menu_Item's */ + /** Return the system menu's array of Fl_Menu_Item's + */ const Fl_Menu_Item *menu() const {return Fl_Menu_::menu();} void menu(const Fl_Menu_Item *m); int add(const char* label, int shortcut, Fl_Callback*, void *user_data=0, int flags=0); @@ -54,10 +56,16 @@ public: int add(const char* label, const char* shortcut, Fl_Callback* cb, void *user_data=0, int flags=0) { return add(label, fl_old_shortcut(shortcut), cb, user_data, flags); } + int add(const char* str); int insert(int index, const char* label, int shortcut, Fl_Callback *cb, void *user_data=0, int flags=0); + /** Insert a new menu item. + \see Fl_Menu_::insert(int index, const char* label, const char* shortcut, Fl_Callback *cb, void *user_data=0, int flags=0) + */ + int insert(int index, const char* label, const char* shortcut, Fl_Callback *cb, void *user_data=0, int flags=0) { + return insert(index, label, fl_old_shortcut(shortcut), cb, user_data, flags); + } void remove(int n); void replace(int rank, const char *name); - void update(); /** Set the Fl_Menu_Item array pointer to null, indicating a zero-length menu. \see Fl_Menu_::clear() */ @@ -66,6 +74,21 @@ public: \see Fl_Menu_::clear_submenu(int index) */ int clear_submenu(int index); + /** Make the shortcuts for this menu work no matter what window has the focus when you type it. + */ + void global() {}; + /** Sets the flags of item i + \see Fl_Menu_::mode(int i, int fl) */ + void mode (int i, int fl) { + Fl_Menu_::mode(i, fl); + update(); + } + /** Gets the flags of item i. + */ + int mode(int i) const { return Fl_Menu_::mode(i); } + /** Changes the shortcut of item i to n. + */ + void shortcut (int i, int s) { Fl_Menu_::shortcut(i, s); update(); }; }; #else diff --git a/src/Fl_Sys_Menu_Bar.mm b/src/Fl_Sys_Menu_Bar.mm index 8a42ba02f..e2bb478a8 100644 --- a/src/Fl_Sys_Menu_Bar.mm +++ b/src/Fl_Sys_Menu_Bar.mm @@ -388,6 +388,19 @@ int Fl_Sys_Menu_Bar::add(const char* label, int shortcut, Fl_Callback *cb, void } /** + * Forms-compatible procedure to add items to the system menu bar +* + * @see Fl_Menu_::add(const char* str) + */ +int Fl_Sys_Menu_Bar::add(const char* str) +{ + fl_open_display(); + int rank = Fl_Menu_::add(str); + update(); + return rank; +} + +/** * @brief insert in the system menu bar a new menu item * * insert in the system menu bar a new menu item, with a title string, shortcut int, @@ -440,8 +453,7 @@ void Fl_Sys_Menu_Bar::replace(int rank, const char *name) update(); } -/** Updates the system menu. - Useful after changes in the menu items, e.g., item activation/deactivation. +/** Updates the system menu after any change to its items. */ void Fl_Sys_Menu_Bar::update() { |
