| // |
| // "$Id: Fl_Button.H 7903 2010-11-28 21:06:39Z matt $" |
| // |
| // Button header file for the Fast Light Tool Kit (FLTK). |
| // |
| // Copyright 1998-2010 by Bill Spitzak and others. |
| // |
| // This library is free software; you can redistribute it and/or |
| // modify it under the terms of the GNU Library General Public |
| // License as published by the Free Software Foundation; either |
| // version 2 of the License, or (at your option) any later version. |
| // |
| // This library is distributed in the hope that it will be useful, |
| // but WITHOUT ANY WARRANTY; without even the implied warranty of |
| // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| // Library General Public License for more details. |
| // |
| // You should have received a copy of the GNU Library General Public |
| // License along with this library; if not, write to the Free Software |
| // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
| // USA. |
| // |
| // Please report all bugs and problems on the following page: |
| // |
| // http://www.fltk.org/str.php |
| // |
| |
| /* \file |
| Fl_Button widget . */ |
| |
| #ifndef Fl_Button_H |
| #define Fl_Button_H |
| |
| #ifndef Fl_Widget_H |
| #include "Fl_Widget.H" |
| #endif |
| |
| // values for type() |
| #define FL_NORMAL_BUTTON 0 /**< value() will be set to 1 during the press of the button and |
| reverts back to 0 when the button is released */ |
| #define FL_TOGGLE_BUTTON 1 ///< value() toggles between 0 and 1 at every click of the button |
| #define FL_RADIO_BUTTON (FL_RESERVED_TYPE+2) /**< is set to 1 at button press, and all other |
| buttons in the same group with <tt>type() == FL_RADIO_BUTTON</tt> |
| are set to zero.*/ |
| #define FL_HIDDEN_BUTTON 3 ///< for Forms compatibility |
| |
| extern FL_EXPORT Fl_Shortcut fl_old_shortcut(const char*); |
| |
| class Fl_Widget_Tracker; |
| |
| /** |
| \class Fl_Button |
| \brief Buttons generate callbacks when they are clicked by the user. |
| |
| You control exactly when and how by changing the values for type() and |
| when(). Buttons can also generate callbacks in response to \c FL_SHORTCUT |
| events. The button can either have an explicit shortcut(int s) value or a |
| letter shortcut can be indicated in the label() with an '\&' character |
| before it. For the label shortcut it does not matter if \e Alt is held |
| down, but if you have an input field in the same window, the user will have |
| to hold down the \e Alt key so that the input field does not eat the event |
| first as an \c FL_KEYBOARD event. |
| |
| \todo Refactor the doxygen comments for Fl_Button type() documentation. |
| |
| For an Fl_Button object, the type() call returns one of: |
| \li \c FL_NORMAL_BUTTON (0): value() remains unchanged after button press. |
| \li \c FL_TOGGLE_BUTTON: value() is inverted after button press. |
| \li \c FL_RADIO_BUTTON: value() is set to 1 after button press, and all other |
| buttons in the current group with <tt>type() == FL_RADIO_BUTTON</tt> |
| are set to zero. |
| |
| \todo Refactor the doxygen comments for Fl_Button when() documentation. |
| |
| For an Fl_Button object, the following when() values are useful, the default |
| being \c FL_WHEN_RELEASE: |
| \li \c 0: The callback is not done, instead changed() is turned on. |
| \li \c FL_WHEN_RELEASE: The callback is done after the user successfully |
| clicks the button, or when a shortcut is typed. |
| \li \c FL_WHEN_CHANGED: The callback is done each time the value() changes |
| (when the user pushes and releases the button, and as the mouse is |
| dragged around in and out of the button). |
| */ |
| class FL_EXPORT Fl_Button : public Fl_Widget { |
| |
| int shortcut_; |
| char value_; |
| char oldval; |
| uchar down_box_; |
| |
| protected: |
| |
| static Fl_Widget_Tracker *key_release_tracker; |
| static void key_release_timeout(void*); |
| void simulate_key_action(); |
| |
| virtual void draw(); |
| |
| public: |
| |
| virtual int handle(int); |
| |
| Fl_Button(int X, int Y, int W, int H, const char *L = 0); |
| |
| int value(int v); |
| |
| /** |
| Returns the current value of the button (0 or 1). |
| */ |
| char value() const {return value_;} |
| |
| /** |
| Same as \c value(1). |
| \see value(int v) |
| */ |
| int set() {return value(1);} |
| |
| /** |
| Same as \c value(0). |
| \see value(int v) |
| */ |
| int clear() {return value(0);} |
| |
| void setonly(); // this should only be called on FL_RADIO_BUTTONs |
| |
| /** |
| Returns the current shortcut key for the button. |
| \retval int |
| */ |
| int shortcut() const {return shortcut_;} |
| |
| /** |
| Sets the shortcut key to \c s. |
| Setting this overrides the use of '\&' in the label(). |
| The value is a bitwise OR of a key and a set of shift flags, for example: |
| <tt>FL_ALT | 'a'</tt>, or |
| <tt>FL_ALT | (FL_F + 10)</tt>, or just |
| <tt>'a'</tt>. |
| A value of 0 disables the shortcut. |
| |
| The key can be any value returned by Fl::event_key(), but will usually be |
| an ASCII letter. Use a lower-case letter unless you require the shift key |
| to be held down. |
| |
| The shift flags can be any set of values accepted by Fl::event_state(). |
| If the bit is on, that shift key must be pushed. Meta, Alt, Ctrl, and |
| Shift must be off if they are not in the shift flags (zero for the other |
| bits indicates a "don't care" setting). |
| \param[in] s bitwise OR of key and shift flags |
| */ |
| void shortcut(int s) {shortcut_ = s;} |
| |
| /** |
| Returns the current down box type, which is drawn when value() is non-zero. |
| \retval Fl_Boxtype |
| */ |
| Fl_Boxtype down_box() const {return (Fl_Boxtype)down_box_;} |
| |
| /** |
| Sets the down box type. The default value of 0 causes FLTK to figure out |
| the correct matching down version of box(). |
| \param[in] b down box type |
| */ |
| void down_box(Fl_Boxtype b) {down_box_ = b;} |
| |
| /// (for backwards compatibility) |
| void shortcut(const char *s) {shortcut(fl_old_shortcut(s));} |
| |
| /// (for backwards compatibility) |
| Fl_Color down_color() const {return selection_color();} |
| |
| /// (for backwards compatibility) |
| void down_color(unsigned c) {selection_color(c);} |
| }; |
| |
| #endif |
| |
| // |
| // End of "$Id: Fl_Button.H 7903 2010-11-28 21:06:39Z matt $". |
| // |