Skip to content

Commit

Permalink
Converted class Fl_Sys_Menu_Bar to the driver model.
Browse files Browse the repository at this point in the history
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12575 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
  • Loading branch information
Manolo Gouy authored and Manolo Gouy committed Dec 2, 2017
1 parent a8fe10c commit 34dd1b1
Show file tree
Hide file tree
Showing 8 changed files with 358 additions and 165 deletions.
3 changes: 2 additions & 1 deletion FL/Fl_Menu_Bar.H
Expand Up @@ -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
Expand Down Expand Up @@ -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:
Expand Down
44 changes: 16 additions & 28 deletions FL/Fl_Sys_Menu_Bar.H
Expand Up @@ -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
Expand All @@ -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.
Expand All @@ -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();}
Expand All @@ -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

Expand Down
58 changes: 58 additions & 0 deletions FL/Fl_Sys_Menu_Bar_Driver.H
@@ -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 changes: 2 additions & 11 deletions FL/mac.H
Expand Up @@ -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
Expand Down Expand Up @@ -113,23 +113,14 @@ 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)
*/
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;

Expand Down
3 changes: 2 additions & 1 deletion src/CMakeLists.txt
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 34dd1b1

Please sign in to comment.