Converted class Fl_Sys_Menu_Bar to the driver model.

git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12575 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
This commit is contained in:
Manolo Gouy 2017-12-02 16:20:30 +00:00
parent a8fe10cf88
commit 34dd1b15fb
8 changed files with 377 additions and 184 deletions

View File

@ -3,7 +3,7 @@
//
// Menu bar header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2016 by Bill Spitzak and others.
// Copyright 1998-2017 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
@ -65,6 +65,7 @@
callbacks exactly the same as when you pick the item with the mouse.
*/
class FL_EXPORT Fl_Menu_Bar : public Fl_Menu_ {
friend class Fl_Sys_Menu_Bar_Driver;
protected:
void draw();
public:

View File

@ -3,7 +3,7 @@
//
// MacOS system menu bar header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 by Bill Spitzak and others.
// Copyright 1998-2017 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
@ -21,7 +21,7 @@
#include <FL/Fl_Menu_Bar.H>
#if defined(__APPLE__) || defined(FL_DOXYGEN)
class Fl_Sys_Menu_Bar_Driver;
/**
A class to create, modify and delete menus that appear on Mac OS X in the menu bar at the top of the screen.
@ -41,14 +41,15 @@
\li no embossed labels
\li no font sizes
You can configure a callback for the 'About' menu item to invoke your own code with fl_mac_set_about().
You can configure a callback for the 'About' menu item to invoke your own code with Fl_Sys_Menu_Bar::about().
*/
class FL_EXPORT Fl_Sys_Menu_Bar : public Fl_Menu_Bar {
protected:
void draw();
virtual void draw();
public:
Fl_Sys_Menu_Bar(int x,int y,int w,int h,const char *l=0);
~Fl_Sys_Menu_Bar();
virtual ~Fl_Sys_Menu_Bar();
Fl_Sys_Menu_Bar_Driver *driver();
/** Return the system menu's array of Fl_Menu_Item's
*/
const Fl_Menu_Item *menu() const {return Fl_Menu_::menu();}
@ -71,38 +72,25 @@ public:
}
void remove(int n);
void replace(int index, const char *name);
/** Set the Fl_Menu_Item array pointer to null, indicating a zero-length menu.
\see Fl_Menu_::clear()
*/
void clear();
/** Clears the specified submenu pointed to by index of all menu items.
\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();
}
void mode (int i, int fl);
/** 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(); }
/** Turns the radio item "on" for the menu item and turns "off" adjacent radio items of the same group.*/
void setonly (Fl_Menu_Item *item) { Fl_Menu_::setonly(item); update(); }
void shortcut (int i, int s);
void setonly (Fl_Menu_Item *item);
static void about(Fl_Callback *cb, void *data);
};
#else
extern Fl_Sys_Menu_Bar *fl_sys_menu_bar;
typedef Fl_Menu_Bar Fl_Sys_Menu_Bar;
/**
* Attaches a callback to the "About myprog" item of the system application menu.
For back-compatibility. Equivalent to Fl_Sys_Menu_Bar::about(cb, user_data).
*/
inline void fl_mac_set_about(Fl_Callback *cb, void *user_data, int shortcut = 0) { Fl_Sys_Menu_Bar::about(cb, user_data);}
#endif // defined(__APPLE__) || defined(FL_DOXYGEN)
#endif // Fl_Sys_Menu_Bar_H

View File

@ -0,0 +1,58 @@
//
// "$Id$"
//
// system menu bar widget for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2017 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
#ifndef Fl_Sys_Menu_Bar_Driver_H
#define Fl_Sys_Menu_Bar_Driver_H
#include <FL/Fl_Sys_Menu_Bar.H>
class Fl_Sys_Menu_Bar_Driver {
friend class Fl_Sys_Menu_Bar;
protected:
Fl_Sys_Menu_Bar *bar;
public:
Fl_Sys_Menu_Bar_Driver();
virtual ~Fl_Sys_Menu_Bar_Driver();
virtual void update() {}
virtual void draw() { bar->Fl_Menu_Bar::draw();}
virtual void about(Fl_Callback *cb, void *data) {}
virtual int add(const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags) {
return bar->Fl_Menu_Bar::add(label, shortcut, cb, user_data, flags);
}
virtual int add(const char* str) { return bar->Fl_Menu_Bar::add(str); }
virtual int insert(int index, const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags) {
return bar->Fl_Menu_Bar::insert(index, label, shortcut, cb, user_data, flags);
}
virtual void menu(const Fl_Menu_Item *m) { bar->Fl_Menu_Bar::menu(m); }
virtual void shortcut(int i, int s) { bar->Fl_Menu_Bar::shortcut(i, s); }
virtual void setonly(Fl_Menu_Item *item) { bar->Fl_Menu_Bar::setonly(item); }
virtual void clear() { bar->Fl_Menu_Bar::clear(); }
virtual int clear_submenu(int index) { return bar->Fl_Menu_Bar::clear_submenu(index);}
virtual void remove(int index) { bar->Fl_Menu_Bar::remove(index); }
virtual void replace(int index, const char *name) { bar->Fl_Menu_Bar::replace(index, name); }
virtual void mode(int i, int fl) { bar->Fl_Menu_Bar::mode(i, fl); }
static Fl_Sys_Menu_Bar_Driver *driver_; // to be assigned with a unique object of this class or of a derived class
};
#endif // Fl_Sys_Menu_Bar_Driver_H
//
// End of "$Id$".
//

View File

@ -3,7 +3,7 @@
//
// Mac header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2016 by Bill Spitzak and others.
// Copyright 1998-2017 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
@ -113,15 +113,6 @@ extern CGContextRef fl_gc;
\sa \ref osissues_macos
@{ */
/**
* \brief Attaches a callback to the "About myprog" item of the system application menu.
*
* \param cb a callback that will be called by "About myprog" menu item
* with NULL 1st argument.
* \param user_data a pointer transmitted as 2nd argument to the callback.
* \param shortcut optional shortcut to attach to the "About myprog" menu item (e.g., FL_META+'a')
*/
extern void fl_mac_set_about( Fl_Callback *cb, void *user_data, int shortcut = 0);
/** \brief The version number of the running Mac OS X (e.g., 100604 for 10.6.4)
*/
@ -129,7 +120,7 @@ extern int fl_mac_os_version;
/** The system menu bar.
*/
extern class Fl_Sys_Menu_Bar *fl_sys_menu_bar;
//extern class Fl_Sys_Menu_Bar *fl_sys_menu_bar;
struct Fl_Menu_Item;

View File

@ -63,6 +63,7 @@ set (CPPFILES
Fl_Single_Window.cxx
Fl_Slider.cxx
Fl_Spinner.cxx
Fl_Sys_Menu_Bar.cxx
Fl_System_Driver.cxx
Fl_Table.cxx
Fl_Table_Row.cxx
@ -405,7 +406,7 @@ if (APPLE AND (NOT OPTION_APPLE_X11) AND (NOT OPTION_APPLE_SDL))
Fl_cocoa.mm
drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm
Fl_Native_File_Chooser_MAC.mm
Fl_Sys_Menu_Bar.mm
Fl_MacOS_Sys_Menu_Bar.mm
)
else()
set (MMFILES

View File

@ -3,7 +3,7 @@
//
// MacOS system menu bar widget for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2013 by Bill Spitzak and others.
// Copyright 1998-2017 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
@ -31,12 +31,35 @@
*
* Many other calls of the parent class don't work.
*/
#if defined(__APPLE__) || defined(FL_DOXYGEN) // PORTME: Fl_Screen_Driver - platform system menu bar
#include <FL/Fl_Menu_Item.H>
#include <FL/Fl_Sys_Menu_Bar.H>
#include <FL/Fl_Sys_Menu_Bar_Driver.H>
#include <FL/x.H>
#include <FL/Fl.H>
#if defined(__APPLE__)
class Fl_MacOS_Sys_Menu_Bar_Driver : public Fl_Sys_Menu_Bar_Driver {
public:
Fl_MacOS_Sys_Menu_Bar_Driver();
virtual ~Fl_MacOS_Sys_Menu_Bar_Driver();
virtual void update();
virtual void draw() {}
virtual void about(Fl_Callback *cb, void *data);
virtual int add(const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags);
virtual int add(const char* str);
virtual int insert(int index, const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags);
virtual void menu(const Fl_Menu_Item *m);
virtual void shortcut (int i, int s);
virtual void setonly (Fl_Menu_Item *item);
virtual void clear();
virtual int clear_submenu(int index);
virtual void remove(int index);
virtual void replace(int index, const char *name);
virtual void mode(int i, int fl);
};
// this runs once if this source file is linked in, and initializes the
// static variable Fl_Sys_Menu_Bar_Driver::driver_ with an object of class Fl_MacOS_Sys_Menu_Bar_Driver
static int unused = (Fl_Sys_Menu_Bar_Driver::driver_ = new Fl_MacOS_Sys_Menu_Bar_Driver(), 0);
#import <Cocoa/Cocoa.h>
@ -47,7 +70,6 @@
typedef const Fl_Menu_Item *pFl_Menu_Item;
Fl_Sys_Menu_Bar *fl_sys_menu_bar = 0;
static Fl_Menu_Bar *custom_menu;
static char *remove_ampersand(const char *s);
@ -201,22 +223,19 @@ const char *Fl_Mac_App_Menu::quit = "Quit %@";
@end
void fl_mac_set_about( Fl_Callback *cb, void *user_data, int shortcut)
void Fl_MacOS_Sys_Menu_Bar_Driver::about( Fl_Callback *cb, void *user_data)
{
fl_open_display();
Fl_Menu_Item aboutItem;
memset(&aboutItem, 0, sizeof(Fl_Menu_Item));
aboutItem.callback(cb);
aboutItem.user_data(user_data);
aboutItem.shortcut(shortcut);
NSMenu *appleMenu = [[[NSApp mainMenu] itemAtIndex:0] submenu];
CFStringRef cfname = CFStringCreateCopy(NULL, (CFStringRef)[[appleMenu itemAtIndex:0] title]);
[appleMenu removeItemAtIndex:0];
FLMenuItem *item = [[[FLMenuItem alloc] initWithTitle:(NSString*)cfname
action:@selector(directCallback)
keyEquivalent:@""] autorelease];
if (aboutItem.shortcut())
[item setFltkShortcut:aboutItem.shortcut()];
NSData *pointer = [NSData dataWithBytes:&aboutItem length:sizeof(Fl_Menu_Item)];
[item setRepresentedObject:pointer];
[appleMenu insertItem:item atIndex:0];
@ -347,126 +366,12 @@ static void convertToMenuBar(const Fl_Menu_Item *mm)
if (mm) createSubMenu(fl_system_menu, mm, NULL, @selector(doCallback));
}
/**
* @brief create a system menu bar using the given list of menu structs
*
* \author Matthias Melcher
*
* @param m list of Fl_Menu_Item
*/
void Fl_Sys_Menu_Bar::menu(const Fl_Menu_Item *m)
void Fl_MacOS_Sys_Menu_Bar_Driver::update()
{
fl_open_display();
Fl_Menu_Bar::menu( m );
convertToMenuBar(m);
convertToMenuBar(bar->Fl_Menu_::menu());
}
/**
* @brief Add a new menu item to the system menu bar.
*
* Add to the system menu bar a new menu item, with a title string, shortcut int,
* callback, argument to the callback, and flags.
*
* @param label - new menu item's label
* @param shortcut - new menu item's integer shortcut (can be 0 for none, or e.g. FL_ALT+'x')
* @param cb - callback to be invoked when item selected (can be 0 for none, in which case the menubar's callback() can be used instead)
* @param user_data - argument to the callback
* @param flags - item's flags, e.g. ::FL_MENU_TOGGLE, etc.
*
* \returns the index into the menu() array, where the entry was added
*
* @see Fl_Menu_::add(const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags)
*/
int Fl_Sys_Menu_Bar::add(const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags)
{
fl_open_display();
int index = Fl_Menu_::add(label, shortcut, cb, user_data, flags);
update();
return index;
}
/**
* Forms-compatible procedure to add items to the system menu bar
*
* \returns the index into the menu() array, where the entry was added
* @see Fl_Menu_::add(const char* str)
*/
int Fl_Sys_Menu_Bar::add(const char* str)
{
fl_open_display();
int index = Fl_Menu_::add(str);
update();
return index;
}
/**
* @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,
* callback, argument to the callback, and flags.
*
* \returns the index into the menu() array, where the entry was inserted
* @see Fl_Menu_::insert(int index, const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags)
*/
int Fl_Sys_Menu_Bar::insert(int index, const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags)
{
fl_open_display();
int menu_index = Fl_Menu_::insert(index, label, shortcut, cb, user_data, flags);
update();
return menu_index;
}
void Fl_Sys_Menu_Bar::clear()
{
Fl_Menu_::clear();
convertToMenuBar(NULL);
}
int Fl_Sys_Menu_Bar::clear_submenu(int index)
{
int retval = Fl_Menu_::clear_submenu(index);
if (retval != -1) update();
return retval;
}
/**
* @brief remove an item from the system menu bar
*
* @param index the index of the item to remove
*/
void Fl_Sys_Menu_Bar::remove(int index)
{
Fl_Menu_::remove(index);
update();
}
/**
* @brief rename an item from the system menu bar
*
* @param index the index of the item to rename
* @param name the new item name as a UTF8 string
*/
void Fl_Sys_Menu_Bar::replace(int index, const char *name)
{
Fl_Menu_::replace(index, name); // index
update();
}
void Fl_Sys_Menu_Bar::update()
{
convertToMenuBar(Fl_Menu_::menu());
}
/*
* Draw the menu bar.
* Nothing here because the OS does this for us.
*/
void Fl_Sys_Menu_Bar::draw() {
}
static int process_sys_menu_shortcuts(int event)
{
if (event != FL_SHORTCUT || !fl_sys_menu_bar || Fl::modal()) return 0;
@ -480,28 +385,87 @@ static int process_sys_menu_shortcuts(int event)
return 1;
}
/**
The constructor.
On Mac OS X, all arguments are unused. On other platforms they are used as by Fl_Menu_Bar::Fl_Menu_Bar().
*/
Fl_Sys_Menu_Bar::Fl_Sys_Menu_Bar(int x,int y,int w,int h,const char *l)
: Fl_Menu_Bar(x,y,w,h,l)
Fl_MacOS_Sys_Menu_Bar_Driver::Fl_MacOS_Sys_Menu_Bar_Driver() : Fl_Sys_Menu_Bar_Driver()
{
deactivate(); // don't let the old area take events
if (fl_sys_menu_bar) delete fl_sys_menu_bar;
fl_sys_menu_bar = this;
Fl::add_handler(process_sys_menu_shortcuts);
}
/** The destructor */
Fl_Sys_Menu_Bar::~Fl_Sys_Menu_Bar()
Fl_MacOS_Sys_Menu_Bar_Driver::~Fl_MacOS_Sys_Menu_Bar_Driver()
{
fl_sys_menu_bar = 0;
clear();
Fl::remove_handler(process_sys_menu_shortcuts);
}
void Fl_MacOS_Sys_Menu_Bar_Driver::menu(const Fl_Menu_Item *m)
{
fl_open_display();
bar->Fl_Menu_Bar::menu( m );
convertToMenuBar(m);
}
void Fl_MacOS_Sys_Menu_Bar_Driver::clear()
{
bar->Fl_Menu_::clear();
convertToMenuBar(NULL);
}
int Fl_MacOS_Sys_Menu_Bar_Driver::clear_submenu(int index)
{
int retval = bar->Fl_Menu_::clear_submenu(index);
if (retval != -1) update();
return retval;
}
void Fl_MacOS_Sys_Menu_Bar_Driver::remove(int index)
{
bar->Fl_Menu_::remove(index);
update();
}
void Fl_MacOS_Sys_Menu_Bar_Driver::replace(int index, const char *name)
{
bar->Fl_Menu_::replace(index, name);
update();
}
void Fl_MacOS_Sys_Menu_Bar_Driver::mode(int i, int fl) {
bar->Fl_Menu_::mode(i, fl);
update();
}
void Fl_MacOS_Sys_Menu_Bar_Driver::shortcut (int i, int s) {
bar->Fl_Menu_Bar::shortcut(i, s);
update();
}
void Fl_MacOS_Sys_Menu_Bar_Driver::setonly (Fl_Menu_Item *item) {
bar->Fl_Menu_::setonly(item);
update();
}
int Fl_MacOS_Sys_Menu_Bar_Driver::add(const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags)
{
fl_open_display();
int index = bar->Fl_Menu_::add(label, shortcut, cb, user_data, flags);
update();
return index;
}
int Fl_MacOS_Sys_Menu_Bar_Driver::add(const char* str)
{
fl_open_display();
int index = bar->Fl_Menu_::add(str);
update();
return index;
}
int Fl_MacOS_Sys_Menu_Bar_Driver::insert(int index, const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags)
{
fl_open_display();
int menu_index = bar->Fl_Menu_::insert(index, label, shortcut, cb, user_data, flags);
update();
return menu_index;
}
/** \class Fl_Mac_App_Menu
Mac OS-specific class allowing to customize and localize the application menu.
@ -542,7 +506,7 @@ void Fl_Mac_App_Menu::custom_application_menu_items(const Fl_Menu_Item *m)
[item release];
}
}
#endif /* __APPLE__ */ // PORTME: Fl_Screen_Driver - platform system menu bar
#endif /* __APPLE__ */
//
// End of "$Id$".

189
src/Fl_Sys_Menu_Bar.cxx Normal file
View File

@ -0,0 +1,189 @@
//
// "$Id$"
//
// system menu bar widget for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2017 by Bill Spitzak and others.
//
// This library is free software. Distribution and use rights are outlined in
// the file "COPYING" which should have been included with this file. If this
// file is missing or damaged, see the license at:
//
// http://www.fltk.org/COPYING.php
//
// Please report all bugs and problems on the following page:
//
// http://www.fltk.org/str.php
//
#include <FL/Fl_Sys_Menu_Bar_Driver.H>
#include <FL/x.H>
Fl_Sys_Menu_Bar *fl_sys_menu_bar = 0;
// initialize this static variable if it was not initialized previously
Fl_Sys_Menu_Bar_Driver *Fl_Sys_Menu_Bar_Driver::driver_ =
( driver_ ? driver_ : new Fl_Sys_Menu_Bar_Driver() );
Fl_Sys_Menu_Bar_Driver *Fl_Sys_Menu_Bar::driver() {return Fl_Sys_Menu_Bar_Driver::driver_;}
/**
The constructor.
On Mac OS X, all arguments are unused. On other platforms they are used as by Fl_Menu_Bar::Fl_Menu_Bar().
*/
Fl_Sys_Menu_Bar::Fl_Sys_Menu_Bar(int x,int y,int w,int h,const char *l)
: Fl_Menu_Bar(x,y,w,h,l)
{
if (fl_sys_menu_bar) delete fl_sys_menu_bar;
fl_sys_menu_bar = this;
Fl_Sys_Menu_Bar_Driver::driver_->bar = this;
}
/** The destructor */
Fl_Sys_Menu_Bar::~Fl_Sys_Menu_Bar()
{
fl_sys_menu_bar = 0;
clear();
}
Fl_Sys_Menu_Bar_Driver::Fl_Sys_Menu_Bar_Driver() {bar = NULL;}
Fl_Sys_Menu_Bar_Driver::~Fl_Sys_Menu_Bar_Driver() {}
void Fl_Sys_Menu_Bar::update() {
driver()->update();
}
/**
* @brief create a system menu bar using the given list of menu structs
*
* \author Matthias Melcher
*
* @param m Zero-ending list of Fl_Menu_Item's
*/
void Fl_Sys_Menu_Bar::menu(const Fl_Menu_Item *m)
{
driver()->menu(m);
}
/** Changes the shortcut of item i to n.
*/
void Fl_Sys_Menu_Bar::shortcut (int i, int s) {
driver()->shortcut(i, s);
}
/** Turns the radio item "on" for the menu item and turns "off" adjacent radio items of the same group.*/
void Fl_Sys_Menu_Bar::setonly (Fl_Menu_Item *item) {
driver()->setonly(item);
}
/** Sets the flags of item i
\see Fl_Menu_::mode(int i, int fl) */
void Fl_Sys_Menu_Bar::mode (int i, int fl) {
driver()->mode(i, fl);
}
/**
* @brief Add a new menu item to the system menu bar.
*
* Add to the system menu bar a new menu item, with a title string, shortcut int,
* callback, argument to the callback, and flags.
*
* @param label - new menu item's label
* @param shortcut - new menu item's integer shortcut (can be 0 for none, or e.g. FL_ALT+'x')
* @param cb - callback to be invoked when item selected (can be 0 for none, in which case the menubar's callback() can be used instead)
* @param user_data - argument to the callback
* @param flags - item's flags, e.g. ::FL_MENU_TOGGLE, etc.
*
* \returns the index into the menu() array, where the entry was added
*
* @see Fl_Menu_::add(const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags)
*/
int Fl_Sys_Menu_Bar::add(const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags)
{
return driver()->add(label, shortcut, cb, user_data, flags);
}
/**
* Forms-compatible procedure to add items to the system menu bar
*
* \returns the index into the menu() array, where the entry was added
* @see Fl_Menu_::add(const char* str)
*/
int Fl_Sys_Menu_Bar::add(const char* str)
{
return driver()->add(str);
}
/**
* @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,
* callback, argument to the callback, and flags.
*
* \returns the index into the menu() array, where the entry was inserted
* @see Fl_Menu_::insert(int index, const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags)
*/
int Fl_Sys_Menu_Bar::insert(int index, const char* label, int shortcut, Fl_Callback *cb, void *user_data, int flags)
{
return driver()->insert(index, label, shortcut, cb, user_data, flags);
}
/** Set the Fl_Menu_Item array pointer to null, indicating a zero-length menu.
\see Fl_Menu_::clear()
*/
void Fl_Sys_Menu_Bar::clear()
{
driver()->clear();
}
/** Clears the specified submenu pointed to by index of all menu items.
\see Fl_Menu_::clear_submenu(int index)
*/
int Fl_Sys_Menu_Bar::clear_submenu(int index)
{
return driver()->clear_submenu(index);
}
/**
* @brief remove an item from the system menu bar
*
* @param index the index of the item to remove
*/
void Fl_Sys_Menu_Bar::remove(int index)
{
driver()->remove(index);
}
/**
* @brief rename an item from the system menu bar
*
* @param index the index of the item to rename
* @param name the new item name as a UTF8 string
*/
void Fl_Sys_Menu_Bar::replace(int index, const char *name)
{
driver()->replace(index, name);
}
/**
* Attaches a callback to the "About myprog" item of the system application menu.
* This cross-platform function is effective only under the MacOS platform.
* \param cb a callback that will be called by "About myprog" menu item
* with NULL 1st argument.
* \param user_data a pointer transmitted as 2nd argument to the callback.
*/
void Fl_Sys_Menu_Bar::about(Fl_Callback *cb, void *data) {
if (fl_sys_menu_bar) fl_sys_menu_bar->driver()->about(cb, data);
}
void Fl_Sys_Menu_Bar::draw() {
driver()->draw();
}
//
// End of "$Id$".
//

View File

@ -82,6 +82,7 @@ CPPFILES = \
Fl_Single_Window.cxx \
Fl_Slider.cxx \
Fl_Spinner.cxx \
Fl_Sys_Menu_Bar.cxx \
Fl_System_Driver.cxx \
Fl_Table.cxx \
Fl_Table_Row.cxx \
@ -167,7 +168,7 @@ OBJCPPFILES = \
Fl_cocoa.mm \
drivers/Cocoa/Fl_Cocoa_Printer_Driver.mm \
Fl_Native_File_Chooser_MAC.mm \
Fl_Sys_Menu_Bar.mm
Fl_MacOS_Sys_Menu_Bar.mm
FLCPPFILES = \
forms_compatibility.cxx \