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:
parent
a8fe10cf88
commit
34dd1b15fb
@ -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:
|
||||
|
@ -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
|
||||
|
||||
|
58
FL/Fl_Sys_Menu_Bar_Driver.H
Normal file
58
FL/Fl_Sys_Menu_Bar_Driver.H
Normal 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$".
|
||||
//
|
13
FL/mac.H
13
FL/mac.H
@ -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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
189
src/Fl_Sys_Menu_Bar.cxx
Normal 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$".
|
||||
//
|
@ -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 \
|
||||
|
Loading…
Reference in New Issue
Block a user