Fix offscreen drawing for cairo.
[ntk.git] / FL / Fl_Menu_Button.H
bloba5ff5d89b47d94d876c09ad34ddf57610f320edc
1 //
2 // "$Id: Fl_Menu_Button.H 8016 2010-12-12 11:19:12Z manolo $"
3 //
4 // Menu button header file for the Fast Light Tool Kit (FLTK).
5 //
6 // Copyright 1998-2010 by Bill Spitzak and others.
7 //
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Library General Public
10 // License as published by the Free Software Foundation; either
11 // version 2 of the License, or (at your option) any later version.
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 // Library General Public License for more details.
18 // You should have received a copy of the GNU Library General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21 // USA.
23 // Please report all bugs and problems on the following page:
25 //     http://www.fltk.org/str.php
28 /* \file
29    Fl_Menu_Button widget . */
31 #ifndef Fl_Menu_Button_H
32 #define Fl_Menu_Button_H
34 #include "Fl_Menu_.H"
36 /**
37   This is a button that when pushed pops up a menu (or hierarchy of
38   menus) defined by an array of 
39   Fl_Menu_Item objects.
40   <P ALIGN=CENTER>\image html  menu_button.png</P>
41   \image latex  menu_button.png " menu_button" width=5cm
42   <P>Normally any mouse button will pop up a menu and it is lined up
43   below the button as shown in the picture.  However an Fl_Menu_Button
44   may also control a pop-up menu.  This is done by setting the type().
45   If type() is zero a normal menu button is produced. 
46   If it is nonzero then this is a pop-up menu. The bits in type() indicate 
47   what mouse buttons pop up the menu (see Fl_Menu_Button::popup_buttons). </P>
48   <P>The menu will also pop up in response to shortcuts indicated by
49   putting a '&' character in the label(). </P>
50   <P>Typing the shortcut() of any of the menu items will cause
51   callbacks exactly the same as when you pick the item with the mouse.
52   The '&' character in menu item names are only looked at when the menu is
53   popped up, however. </P>
54   <P>When the user picks an item off the menu, the item's callback is
55   done with the menu_button as the Fl_Widget* argument.  If the
56   item does not have a callback the menu_button's callback is done
57   instead.
59 class FL_EXPORT Fl_Menu_Button : public Fl_Menu_ {
60 protected:
61   void draw();
62 public:
63   /**
64    \brief indicate what mouse buttons pop up the menu.
65    
66    Values for type() used to indicate what mouse buttons pop up the menu. 
67    Fl_Menu_Button::POPUP3 is usually what you want.
68    */  
69   enum popup_buttons {POPUP1 = 1, /**< pops up with the mouse 1st button. */
70     POPUP2,  /**< pops up with the mouse 2nd button. */
71     POPUP12, /**< pops up with the mouse 1st or 2nd buttons. */
72     POPUP3,   /**< pops up with the mouse 3rd button. */
73     POPUP13,  /**< pops up with the mouse 1st or 3rd buttons. */
74     POPUP23,  /**< pops up with the mouse 2nd or 3rd buttons. */
75     POPUP123 /**< pops up with any mouse button. */
76   };
77   int handle(int);
78   const Fl_Menu_Item* popup();
79   Fl_Menu_Button(int,int,int,int,const char * =0);
82 #endif
85 // End of "$Id: Fl_Menu_Button.H 8016 2010-12-12 11:19:12Z manolo $".