~hitmuri/vjpirate/trunk

« back to all changes in this revision

Viewing changes to os/mac/include/FL/Fl_Button.H

  • Committer: Florent Berthaut
  • Date: 2014-07-26 18:53:16 UTC
  • mfrom: (5.1.12 mac)
  • Revision ID: flo@localhost.localdomain-20140726185316-c2ucnwmgm5kij4e2
Merged mac branch

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
//
 
2
// "$Id: Fl_Button.H 7903 2010-11-28 21:06:39Z matt $"
 
3
//
 
4
// 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.
 
12
//
 
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.
 
17
//
 
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.
 
22
//
 
23
// Please report all bugs and problems on the following page:
 
24
//
 
25
//     http://www.fltk.org/str.php
 
26
//
 
27
 
 
28
/* \file
 
29
   Fl_Button widget . */
 
30
 
 
31
#ifndef Fl_Button_H
 
32
#define Fl_Button_H
 
33
 
 
34
#ifndef Fl_Widget_H
 
35
#include "Fl_Widget.H"
 
36
#endif
 
37
 
 
38
// values for type()
 
39
#define FL_NORMAL_BUTTON        0   /**< value() will be set to 1 during the press of the button and 
 
40
                                         reverts back to 0 when the button is released */
 
41
#define FL_TOGGLE_BUTTON        1   ///< value() toggles between 0 and 1 at every click of the button
 
42
#define FL_RADIO_BUTTON         (FL_RESERVED_TYPE+2) /**< is set to 1 at button press, and all other
 
43
                                         buttons in the same group with <tt>type() == FL_RADIO_BUTTON</tt>
 
44
                                         are set to zero.*/
 
45
#define FL_HIDDEN_BUTTON        3   ///< for Forms compatibility
 
46
 
 
47
extern FL_EXPORT Fl_Shortcut fl_old_shortcut(const char*);
 
48
 
 
49
class Fl_Widget_Tracker;
 
50
 
 
51
/**
 
52
  \class Fl_Button
 
53
  \brief Buttons generate callbacks when they are clicked by the user.
 
54
  
 
55
  You control exactly when and how by changing the values for type() and
 
56
  when().  Buttons can also generate callbacks in response to \c FL_SHORTCUT
 
57
  events.  The button can either have an explicit shortcut(int s) value or a
 
58
  letter shortcut can be indicated in the label() with an '\&' character
 
59
  before it.  For the label shortcut it does not matter if \e Alt is held
 
60
  down, but if you have an input field in the same window, the user will have
 
61
  to hold down the \e Alt key so that the input field does not eat the event
 
62
  first as an \c FL_KEYBOARD event.
 
63
 
 
64
  \todo Refactor the doxygen comments for Fl_Button type() documentation.
 
65
 
 
66
  For an Fl_Button object, the type() call returns one of:
 
67
  \li \c FL_NORMAL_BUTTON (0): value() remains unchanged after button press.
 
68
  \li \c FL_TOGGLE_BUTTON: value() is inverted after button press.
 
69
  \li \c FL_RADIO_BUTTON: value() is set to 1 after button press, and all other
 
70
         buttons in the current group with <tt>type() == FL_RADIO_BUTTON</tt>
 
71
         are set to zero.
 
72
 
 
73
  \todo Refactor the doxygen comments for Fl_Button when() documentation.
 
74
 
 
75
  For an Fl_Button object, the following when() values are useful, the default
 
76
  being \c FL_WHEN_RELEASE:
 
77
  \li \c 0: The callback is not done, instead changed() is turned on.
 
78
  \li \c FL_WHEN_RELEASE: The callback is done after the user successfully
 
79
         clicks the button, or when a shortcut is typed.
 
80
  \li \c FL_WHEN_CHANGED: The callback is done each time the value() changes
 
81
         (when the user pushes and releases the button, and as the mouse is
 
82
         dragged around in and out of the button).
 
83
*/
 
84
class FL_EXPORT Fl_Button : public Fl_Widget {
 
85
 
 
86
  int shortcut_;
 
87
  char value_;
 
88
  char oldval;
 
89
  uchar down_box_;
 
90
 
 
91
protected:
 
92
 
 
93
  static Fl_Widget_Tracker *key_release_tracker;
 
94
  static void key_release_timeout(void*);
 
95
  void simulate_key_action();
 
96
  
 
97
  virtual void draw();
 
98
 
 
99
public:
 
100
 
 
101
  virtual int handle(int);
 
102
 
 
103
  Fl_Button(int X, int Y, int W, int H, const char *L = 0);
 
104
 
 
105
  int value(int v);
 
106
 
 
107
  /**
 
108
    Returns the current value of the button (0 or 1).
 
109
   */
 
110
  char value() const {return value_;}
 
111
 
 
112
  /**
 
113
    Same as \c value(1).
 
114
    \see value(int v)
 
115
   */
 
116
  int set() {return value(1);}
 
117
 
 
118
  /**
 
119
    Same as \c value(0).
 
120
    \see value(int v)
 
121
   */
 
122
  int clear() {return value(0);}
 
123
 
 
124
  void setonly(); // this should only be called on FL_RADIO_BUTTONs
 
125
 
 
126
  /**
 
127
    Returns the current shortcut key for the button.
 
128
    \retval int
 
129
   */
 
130
  int shortcut() const {return shortcut_;}
 
131
 
 
132
  /**
 
133
    Sets the shortcut key to \c s.
 
134
    Setting this overrides the use of '\&' in the label().
 
135
    The value is a bitwise OR of a key and a set of shift flags, for example:
 
136
    <tt>FL_ALT | 'a'</tt>, or
 
137
    <tt>FL_ALT | (FL_F + 10)</tt>, or just
 
138
    <tt>'a'</tt>.
 
139
    A value of 0 disables the shortcut.
 
140
 
 
141
    The key can be any value returned by Fl::event_key(), but will usually be
 
142
    an ASCII letter.  Use a lower-case letter unless you require the shift key
 
143
    to be held down.
 
144
 
 
145
    The shift flags can be any set of values accepted by Fl::event_state().
 
146
    If the bit is on, that shift key must be pushed.  Meta, Alt, Ctrl, and
 
147
    Shift must be off if they are not in the shift flags (zero for the other
 
148
    bits indicates a "don't care" setting).
 
149
    \param[in] s bitwise OR of key and shift flags
 
150
   */
 
151
  void shortcut(int s) {shortcut_ = s;}
 
152
 
 
153
  /**
 
154
    Returns the current down box type, which is drawn when value() is non-zero.
 
155
    \retval Fl_Boxtype
 
156
   */
 
157
  Fl_Boxtype down_box() const {return (Fl_Boxtype)down_box_;}
 
158
 
 
159
  /**
 
160
    Sets the down box type. The default value of 0 causes FLTK to figure out
 
161
    the correct matching down version of box().
 
162
    \param[in] b down box type
 
163
   */
 
164
  void down_box(Fl_Boxtype b) {down_box_ = b;}
 
165
 
 
166
  /// (for backwards compatibility)
 
167
  void shortcut(const char *s) {shortcut(fl_old_shortcut(s));}
 
168
 
 
169
  /// (for backwards compatibility)
 
170
  Fl_Color down_color() const {return selection_color();}
 
171
 
 
172
  /// (for backwards compatibility)
 
173
  void down_color(unsigned c) {selection_color(c);}
 
174
};
 
175
 
 
176
#endif
 
177
 
 
178
//
 
179
// End of "$Id: Fl_Button.H 7903 2010-11-28 21:06:39Z matt $".
 
180
//