From de6f468b5121df32566bbaa3b250d35eae8e1178 Mon Sep 17 00:00:00 2001
From: Albrecht Schlosser
FLTK provides many types of buttons:

-Figure 3-1: FLTK Button Widgets
All of these buttons just need the corresponding
-<FL/Fl_xyz_Button.H> header file. The constructor
+
-Fl_Button *button = new Fl_Button(x, y, width, height, "label"); +\code +Fl_Button *button = new Fl_Button(x, y, width, height, "label"); Fl_Light_Button *lbutton = new Fl_Light_Button(x, y, width, height); -Fl_Round_Button *rbutton = new Fl_Round_Button(x, y, width, height, "label"); -- -
Each button has an associated -type() -which allows it to behave as a push button, toggle button, or -radio button:
- --button->type(FL_NORMAL_BUTTON); -lbutton->type(FL_TOGGLE_BUTTON); -rbutton->type(FL_RADIO_BUTTON); -- -
For toggle and radio buttons, the -value() -method returns the current button state (0 = off, 1 = on). The -set() and -clear() -methods can be used on toggle buttons to turn a toggle button -on or off, respectively. Radio buttons can be turned on with -the -setonly() +Fl_Round_Button *rbutton = new Fl_Round_Button(x, y, width, height, "label"); +\endcode + +
Each button has an associated type() which allows +it to behave as a push button, toggle button, or radio button:
+ +\code +button->type(FL_NORMAL_BUTTON); +lbutton->type(FL_TOGGLE_BUTTON); +rbutton->type(FL_RADIO_BUTTON); +\endcode + +For toggle and radio buttons, the value() method returns +the current button state (0 = off, 1 = on). The set() and +clear() methods can be used on toggle buttons to turn a +toggle button on or off, respectively. +Radio buttons can be turned on with the setonly() method; this will also turn off other radio buttons in the same group.
@@ -74,41 +62,32 @@ group.FLTK provides several text widgets for displaying and receiving text:
The Fl_Output and Fl_Multiline_Output widgets allow the user to copy text from the output field but not change it.
-The value() -method is used to get or set the string that is displayed:
+The value() method is used to get or set the +string that is displayed:
-
-Fl_Input *input = new Fl_Input(x, y, width, height, "label");
-input->value("Now is the time for all good men...");
-
+\code
+Fl_Input *input = new Fl_Input(x, y, width, height, "label");
+input->value("Now is the time for all good men...");
+\endcode
The string is copied to the widget's own storage when you set the value() of the widget.
@@ -126,28 +105,25 @@ strings. FLTK provides the following valuators:
-Figure 3-2: FLTK valuator widgets
The value() -method gets and sets the current value of the widget. The -minimum() -and maximum() +
The value() method gets and sets the current value +of the widget. The minimum() and maximum() methods set the range of values that are reported by the widget.
@@ -156,29 +132,31 @@ widget.The Fl_Group widget class is used as a general -purpose "container" widget. Besides grouping radio +purpose "container" widget. Besides grouping radio buttons, the groups are used to encapsulate windows, tabs, and scrolled windows. The following group classes are available with FLTK:
-button->position(x, y); -group->resize(x, y, width, height); -window->size(width, height); -+\code +button->position(x, y); +group->resize(x, y, width, height); +window->size(width, height); +\endcode
If you change a widget's size or position after it is displayed you will have to call redraw() on the @@ -228,6 +206,8 @@ fixed contents.
These symbols are the default colors for all FLTK widgets. They are @@ -244,35 +224,34 @@ explained in more detail in the chapter
RGB colors can be set using the fl_rgb_color() +
RGB colors can be set using the fl_rgb_color() function:
-+\code Fl_Color c = fl_rgb_color(85, 170, 255); -+\endcode
The widget color is set using the color() method:
--button->color(FL_RED); -+\code +button->color(FL_RED); +\endcode
Similarly, the label color is set using the labelcolor() method:
--button->labelcolor(FL_WHITE); -+\code +button->labelcolor(FL_WHITE); +\endcode
The type Fl_Boxtype stored and returned in
Fl_Widget::box()
-is an enumeration defined in <Enumerations.H>.
+is an enumeration defined in

-Figure 3-3: FLTK box types
FL_NO_BOX means nothing is drawn at all, so whatever is already on the screen remains. The FL_..._FRAME types only @@ -297,25 +276,25 @@ the box and adding it to the table of boxtypes.
The drawing function is passed the bounding box and background color for the widget:
-
+\code
void xyz_draw(int x, int y, int w, int h, Fl_Color c) {
...
}
-
+\endcode
A simple drawing function might fill a rectangle with the given color and then draw a black outline:
-
+\code
void xyz_draw(int x, int y, int w, int h, Fl_Color c) {
fl_color(c);
fl_rectf(x, y, w, h);
fl_color(FL_BLACK);
fl_rect(x, y, w, h);
}
-
+\endcode
The Fl::set_boxtype() method adds or replaces the specified box type:
-+\code #define XYZ_BOX FL_FREE_BOXTYPE Fl::set_boxtype(XYZ_BOX, xyz_draw, 1, 1, 2, 2); -+\endcode
The last 4 arguments to Fl::set_boxtype() are the offsets for the x, y, width, and height values that should be @@ -376,13 +355,12 @@ for the label. Symbols can be included with the label string by escaping them using the "@" symbol - "@@" displays a single at sign. Figure 3-4 shows the available symbols.
-
-Figure 3-4: FLTK label symbols
The @ sign may also be followed by the following optional -"formatting" characters, in this order:
+"formatting" characters, in this order:Thus, to show a very large arrow pointing downward you would use the -label string "@+92->". +label string "@+92->".
+\code
void xyz_draw(const Fl_Label *label, int x, int y, int w, int h, Fl_Align align) {
...
}
-
+\endcode
The label should be drawn inside this bounding box, even if FL_ALIGN_INSIDE is not enabled. The function @@ -509,11 +487,11 @@ is not called if the label value is NULL.
Fl_Label structure and references to the width and height: -
-void xyz_measure(const Fl_Label *label, int &w, int &h) {
+\code
+void xyz_measure(const Fl_Label *label, int &w, int &h) {
...
}
-
+\endcode
The function should measure the size of the label and set w and h to the size it will occupy.
@@ -523,11 +501,11 @@ void xyz_measure(const Fl_Label *label, int &w, int &h) {The Fl::set_labeltype method creates a label type using your draw and measure functions:
-+\code #define XYZ_LABEL FL_FREE_LABELTYPE Fl::set_labeltype(XYZ_LABEL, xyz_draw, xyz_measure); -+\endcode
The label type number n can be any integer value starting at the constant FL_FREE_LABELTYPE. Once you @@ -550,19 +528,19 @@ to generate a vector shape inside a two-by-two units sized box around the origin. This function is then linked into the symbols table using fl_add_symbol:
--int fl_add_symbol(const char *name, void (*drawit)(Fl_Color), int scalable) -+\code +int fl_add_symbol(const char *name, void (*drawit)(Fl_Color), int scalable) +\endcode
name is the name of the symbol without the "@"; scalable must be set to 1 if the symbol is generated using scalable vector drawing functions.
--int fl_draw_symbol(const char *name,int x,int y,int w,int h,Fl_Color col) -+\code +int fl_draw_symbol(const char *name,int x,int y,int w,int h,Fl_Color col) +\endcode -
This function draw a named symbol fitting the given rectangle. +
This function draws a named symbol fitting the given rectangle.
+\code
void xyz_callback(Fl_Widget *w, void *data) {
...
}
-
+\endcode
The callback() method sets the callback function for a widget. You can optionally pass a pointer to some data needed for the callback:
-+\code int xyz_data; -button->callback(xyz_callback, &xyz_data); -+button->callback(xyz_callback, &xyz_data); +\endcode
Normally callbacks are performed only when the value of the -widget changes. You can change this using the -when() +widget changes. You can change this using the Fl_Widget::when() method:
--button->when(FL_WHEN_NEVER); -button->when(FL_WHEN_CHANGED); -button->when(FL_WHEN_RELEASE); -button->when(FL_WHEN_RELEASE_ALWAYS); -button->when(FL_WHEN_ENTER_KEY); -button->when(FL_WHEN_ENTER_KEY_ALWAYS); -button->when(FL_WHEN_CHANGED | FL_WHEN_NOT_CHANGED); -+\code +button->when(FL_WHEN_NEVER); +button->when(FL_WHEN_CHANGED); +button->when(FL_WHEN_RELEASE); +button->when(FL_WHEN_RELEASE_ALWAYS); +button->when(FL_WHEN_ENTER_KEY); +button->when(FL_WHEN_ENTER_KEY_ALWAYS); +button->when(FL_WHEN_CHANGED | FL_WHEN_NOT_CHANGED); +\endcode
-button->shortcut(FL_Enter); -button->shortcut(FL_SHIFT + 'b'); -button->shortcut(FL_CTRL + 'b'); -button->shortcut(FL_ALT + 'b'); -button->shortcut(FL_CTRL + FL_ALT + 'b'); -button->shortcut(0); // no shortcut -+\code +button->shortcut(FL_Enter); +button->shortcut(FL_SHIFT + 'b'); +button->shortcut(FL_CTRL + 'b'); +button->shortcut(FL_ALT + 'b'); +button->shortcut(FL_CTRL + FL_ALT + 'b'); +button->shortcut(0); // no shortcut +\endcode
The shortcut value is the key event value - the ASCII value or one of the special keys like -- cgit v1.2.3