[go: up one dir, main page]

File: Fl_Sys_Menu_Bar.H

package info (click to toggle)
fltk1.3 1.3.4-4
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 24,292 kB
  • ctags: 18,602
  • sloc: cpp: 104,403; ansic: 88,673; sh: 3,654; makefile: 1,869; perl: 27; xml: 7
file content (134 lines) | stat: -rw-r--r-- 4,651 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
//
// "$Id: Fl_Sys_Menu_Bar.H 11795 2016-06-22 07:49:34Z greg.ercolano $"
//
// MacOS system menu bar header file for the Fast Light Tool Kit (FLTK).
//
// Copyright 1998-2010 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_H
#define Fl_Sys_Menu_Bar_H

#include "Fl_Menu_Bar.H"
#include "x.H"

#if defined(__APPLE__) || defined(FL_DOXYGEN)

/**
  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.
 \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.
  
  Changes to the menu state are immediately visible in the menubar when they are made
  using member functions of the Fl_Sys_Menu_Bar class. Other changes (e.g., by a call to
  Fl_Menu_Item::set()) should be followed by a call to Fl_Sys_Menu_Bar::update() to be
  visible in the menubar across all platforms.
  
  A few FLTK features are not supported by the Mac System menu:

  \li no symbolic labels
  \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().
 */
class FL_EXPORT Fl_Sys_Menu_Bar : public Fl_Menu_Bar {

#if FLTK_ABI_VERSION >= 10304
  // NEW -- update() public (STR#3317)
public:
  void update();
protected:
  void draw();
#else
  // OLD -- update() protected
protected:
  void update();
  void draw();
#endif

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 
   */
  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);
  /** Adds a new menu item. 
   \see Fl_Menu_::add(const char* label, int shortcut, Fl_Callback*, void *user_data=0, int flags=0)
   */
  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 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();
    }
  /** 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(); }
};

#else

#if FLTK_ABI_VERSION >= 10304
// NEW -- small class for update()
class FL_EXPORT Fl_Sys_Menu_Bar : public Fl_Menu_Bar {
public:
  Fl_Sys_Menu_Bar(int x,int y,int w,int h,const char *l=0) : Fl_Menu_Bar(x,y,w,h,l) {}
  inline void update() {}
};
#else
// OLD -- simple typedef
typedef Fl_Menu_Bar Fl_Sys_Menu_Bar;
#endif

#endif // defined(__APPLE__) || defined(FL_DOXYGEN)

#endif // Fl_Sys_Menu_Bar_H

//
// End of "$Id: Fl_Sys_Menu_Bar.H 11795 2016-06-22 07:49:34Z greg.ercolano $".
//