FLTK 1.4.0
|
The Fl_Tabs widget is a container widget that displays a set of tabs, with each tab representing a different child widget. More...
#include <Fl_Tabs.H>
Public Types | |
enum | { OVERFLOW_COMPRESS = 0 , OVERFLOW_CLIP , OVERFLOW_PULLDOWN , OVERFLOW_DRAG } |
Public Member Functions | |
void | client_area (int &rx, int &ry, int &rw, int &rh, int tabh=0) |
Returns the position and size available to be used by its children. More... | |
Fl_Tabs (int X, int Y, int W, int H, const char *L=0) | |
Creates a new Fl_Tabs widget using the given position, size, and label string. More... | |
int | handle (int) FL_OVERRIDE |
Handle all events in the tabs area and forward the rest to the selected child. More... | |
void | handle_overflow (int ov) |
Set a method to handle an overflowing tab bar. More... | |
Fl_Widget * | push () const |
Returns the tab group for the tab the user has currently down-clicked on and remains over until FL_RELEASE. More... | |
int | push (Fl_Widget *) |
This is called by the tab widget's handle() method to set the tab group widget the user last FL_PUSH'ed on. More... | |
void | resize (int, int, int, int) FL_OVERRIDE |
Make sure that we redraw all tabs when the widget size changes. More... | |
void | show () FL_OVERRIDE |
Ensure proper placement of selected tab. More... | |
Fl_Align | tab_align () const |
Gets the tab label alignment. More... | |
void | tab_align (Fl_Align a) |
Sets the tab label alignment. More... | |
Fl_Widget * | value () |
Gets the currently visible widget/tab. More... | |
int | value (Fl_Widget *) |
Sets the widget to become the current visible widget/tab. More... | |
virtual Fl_Widget * | which (int event_x, int event_y) |
Return a pointer to the child widget with a tab at the given coordinates. More... | |
~Fl_Tabs () FL_OVERRIDE | |
Delete allocated resources and destroy all children. | |
Public Member Functions inherited from Fl_Group | |
Fl_Widget *& | _ddfdesign_kludge () |
This is for forms compatibility only. | |
void | add (Fl_Widget &) |
The widget is removed from its current group (if any) and then added to the end of this group. | |
void | add (Fl_Widget *o) |
See void Fl_Group::add(Fl_Widget &w) | |
void | add_resizable (Fl_Widget &o) |
Adds a widget to the group and makes it the resizable widget. | |
Fl_Widget *const * | array () const |
Returns a pointer to the array of children. More... | |
Fl_Group const * | as_group () const FL_OVERRIDE |
Fl_Group * | as_group () FL_OVERRIDE |
Returns an Fl_Group pointer if this widget is an Fl_Group. More... | |
void | begin () |
Sets the current group so you can build the widget tree by just constructing the widgets. More... | |
Fl_Widget * | child (int n) const |
Returns array()[n]. More... | |
int | children () const |
Returns how many child widgets the group has. | |
void | clear () |
Deletes all child widgets from memory recursively. More... | |
unsigned int | clip_children () |
Returns the current clipping mode. More... | |
void | clip_children (int c) |
Controls whether the group widget clips the drawing of child widgets to its bounding box. More... | |
virtual int | delete_child (int n) |
Removes the widget at index from the group and deletes it. More... | |
void | end () |
Exactly the same as current(this->parent()). More... | |
int | find (const Fl_Widget &o) const |
See int Fl_Group::find(const Fl_Widget *w) const. | |
int | find (const Fl_Widget *) const |
Searches the child array for the widget and returns the index. More... | |
Fl_Group (int, int, int, int, const char *=0) | |
Creates a new Fl_Group widget using the given position, size, and label string. More... | |
void | focus (Fl_Widget *W) |
void | forms_end () |
This is for forms compatibility only. | |
int | handle (int) FL_OVERRIDE |
Handles the specified event. More... | |
void | init_sizes () |
Resets the internal array of widget sizes and positions. More... | |
void | insert (Fl_Widget &, int i) |
The widget is removed from its current group (if any) and then inserted into this group. More... | |
void | insert (Fl_Widget &o, Fl_Widget *before) |
This does insert(w, find(before)). More... | |
void | remove (Fl_Widget &) |
Removes a widget from the group but does not delete it. More... | |
void | remove (Fl_Widget *o) |
Removes the widget o from the group. More... | |
void | remove (int index) |
Removes the widget at index from the group but does not delete it. More... | |
Fl_Widget * | resizable () const |
Returns the group's resizable widget. More... | |
void | resizable (Fl_Widget &o) |
Sets the group's resizable widget. More... | |
void | resizable (Fl_Widget *o) |
The resizable widget defines both the resizing box and the resizing behavior of the group and its children. More... | |
void | resize (int, int, int, int) FL_OVERRIDE |
Resizes the Fl_Group widget and all of its children. More... | |
virtual | ~Fl_Group () |
The destructor also deletes all the children. More... | |
Public Member Functions inherited from Fl_Widget | |
void | _clear_fullscreen () |
void | _set_fullscreen () |
void | activate () |
Activates the widget. More... | |
unsigned int | active () const |
Returns whether the widget is active. More... | |
int | active_r () const |
Returns whether the widget and all of its parents are active. More... | |
Fl_Align | align () const |
Gets the label alignment. More... | |
void | align (Fl_Align alignment) |
Sets the label alignment. More... | |
long | argument () const |
Gets the current user data (long) argument that is passed to the callback function. More... | |
void | argument (long v) |
Sets the current user data (long) argument that is passed to the callback function. More... | |
virtual class Fl_Gl_Window * | as_gl_window () |
Returns an Fl_Gl_Window pointer if this widget is an Fl_Gl_Window. More... | |
virtual class Fl_Gl_Window const * | as_gl_window () const |
virtual Fl_Group * | as_group () |
Returns an Fl_Group pointer if this widget is an Fl_Group. More... | |
virtual Fl_Group const * | as_group () const |
virtual Fl_Window * | as_window () |
Returns an Fl_Window pointer if this widget is an Fl_Window. More... | |
virtual Fl_Window const * | as_window () const |
void | bind_deimage (Fl_Image *img) |
Sets the image to use as part of the widget label when in the inactive state. More... | |
void | bind_deimage (int f) |
Bind the inactive image to the widget, so the widget will delete the image when it is no longer needed. More... | |
void | bind_image (Fl_Image *img) |
Sets the image to use as part of the widget label when in the active state. More... | |
void | bind_image (int f) |
Bind the image to the widget, so the widget will delete the image when it is no longer needed. More... | |
Fl_Boxtype | box () const |
Gets the box type of the widget. More... | |
void | box (Fl_Boxtype new_box) |
Sets the box type for the widget. More... | |
Fl_Callback_p | callback () const |
Gets the current callback function for the widget. More... | |
void | callback (Fl_Callback *cb) |
Sets the current callback function for the widget. More... | |
void | callback (Fl_Callback *cb, Fl_Callback_User_Data *p, bool auto_free) |
Sets the current callback function and managed user data for the widget. More... | |
void | callback (Fl_Callback *cb, void *p) |
Sets the current callback function and data for the widget. More... | |
void | callback (Fl_Callback0 *cb) |
Sets the current callback function for the widget. More... | |
void | callback (Fl_Callback1 *cb, long p=0) |
Sets the current callback function for the widget. More... | |
unsigned int | changed () const |
Checks if the widget value changed since the last callback. More... | |
void | clear_active () |
Marks the widget as inactive without sending events or changing focus. More... | |
void | clear_changed () |
Marks the value of the widget as unchanged. More... | |
void | clear_damage (uchar c=0) |
Clears or sets the damage flags. More... | |
void | clear_output () |
Sets a widget to accept input. More... | |
void | clear_visible () |
Hides the widget. More... | |
void | clear_visible_focus () |
Disables keyboard focus navigation with this widget. More... | |
Fl_Color | color () const |
Gets the background color of the widget. More... | |
void | color (Fl_Color bg) |
Sets the background color of the widget. More... | |
void | color (Fl_Color bg, Fl_Color sel) |
Sets the background and selection color of the widget. More... | |
Fl_Color | color2 () const |
For back compatibility only. More... | |
void | color2 (unsigned a) |
For back compatibility only. More... | |
int | contains (const Fl_Widget *w) const |
Checks if w is a child of this widget. More... | |
void | copy_label (const char *new_label) |
Sets the current label. More... | |
void | copy_tooltip (const char *text) |
Sets the current tooltip text. More... | |
uchar | damage () const |
Returns non-zero if draw() needs to be called. More... | |
void | damage (uchar c) |
Sets the damage bits for the widget. More... | |
void | damage (uchar c, int x, int y, int w, int h) |
Sets the damage bits for an area inside the widget. More... | |
int | damage_resize (int, int, int, int) |
Internal use only. | |
void | deactivate () |
Deactivates the widget. More... | |
Fl_Image * | deimage () |
Gets the image that is used as part of the widget label when in the inactive state. More... | |
const Fl_Image * | deimage () const |
Gets the image that is used as part of the widget label when in the inactive state. More... | |
void | deimage (Fl_Image &img) |
Sets the image to use as part of the widget label when in the inactive state. More... | |
void | deimage (Fl_Image *img) |
Sets the image to use as part of the widget label when in the inactive state. More... | |
int | deimage_bound () const |
Returns whether the inactive image is managed by the widget. More... | |
void | do_callback (Fl_Callback_Reason reason=FL_REASON_UNKNOWN) |
Calls the widget callback function with default arguments. More... | |
void | do_callback (Fl_Widget *widget, long arg, Fl_Callback_Reason reason=FL_REASON_UNKNOWN) |
Calls the widget callback function with arbitrary arguments. More... | |
void | do_callback (Fl_Widget *widget, void *arg=0, Fl_Callback_Reason reason=FL_REASON_UNKNOWN) |
Calls the widget callback function with arbitrary arguments. More... | |
virtual void | draw ()=0 |
Draws the widget. More... | |
void | draw_label (int, int, int, int, Fl_Align) const |
Draws the label in an arbitrary bounding box with an arbitrary alignment. More... | |
int | h () const |
Gets the widget height. More... | |
virtual int | handle (int event) |
Handles the specified event. More... | |
virtual void | hide () |
Makes a widget invisible. More... | |
int | horizontal_label_margin () |
Get the spacing between the label and the horizontal edge of the widget. More... | |
void | horizontal_label_margin (int px) |
Set the spacing between the label and the horizontal edge of the widget. More... | |
Fl_Image * | image () |
Gets the image that is used as part of the widget label when in the active state. More... | |
const Fl_Image * | image () const |
Gets the image that is used as part of the widget label when in the active state. More... | |
void | image (Fl_Image &img) |
Sets the image to use as part of the widget label when in the active state. More... | |
void | image (Fl_Image *img) |
Sets the image to use as part of the widget label when in the active state. More... | |
int | image_bound () const |
Returns whether the image is managed by the widget. More... | |
int | inside (const Fl_Widget *wgt) const |
Checks if this widget is a child of wgt . More... | |
int | is_label_copied () const |
Returns whether the current label was assigned with copy_label(). More... | |
const char * | label () const |
Gets the current label text. More... | |
void | label (const char *text) |
Sets the current label pointer. More... | |
void | label (Fl_Labeltype a, const char *b) |
Shortcut to set the label text and type in one call. More... | |
int | label_image_spacing () |
Return the gap size between the label and the image. More... | |
void | label_image_spacing (int gap) |
Set the gap between the label and the image in pixels. More... | |
Fl_Color | labelcolor () const |
Gets the label color. More... | |
void | labelcolor (Fl_Color c) |
Sets the label color. More... | |
Fl_Font | labelfont () const |
Gets the font to use. More... | |
void | labelfont (Fl_Font f) |
Sets the font to use. More... | |
Fl_Fontsize | labelsize () const |
Gets the font size in pixels. More... | |
void | labelsize (Fl_Fontsize pix) |
Sets the font size in pixels. More... | |
Fl_Labeltype | labeltype () const |
Gets the label type. More... | |
void | labeltype (Fl_Labeltype a) |
Sets the label type. More... | |
void | measure_label (int &ww, int &hh) const |
Sets width ww and height hh accordingly with the label size. More... | |
bool | needs_keyboard () const |
Returns whether this widget needs a keyboard. More... | |
void | needs_keyboard (bool needs) |
Sets whether this widget needs a keyboard. More... | |
unsigned int | output () const |
Returns if a widget is used for output only. More... | |
Fl_Group * | parent () const |
Returns a pointer to the parent widget. More... | |
void | parent (Fl_Group *p) |
Internal use only - "for hacks only". More... | |
void | position (int X, int Y) |
Repositions the window or widget. More... | |
void | redraw () |
Schedules the drawing of the widget. More... | |
void | redraw_label () |
Schedules the drawing of the label. More... | |
virtual void | resize (int x, int y, int w, int h) |
Changes the size or position of the widget. More... | |
Fl_Color | selection_color () const |
Gets the selection color. More... | |
void | selection_color (Fl_Color a) |
Sets the selection color. More... | |
void | set_active () |
Marks the widget as active without sending events or changing focus. More... | |
void | set_changed () |
Marks the value of the widget as changed. More... | |
void | set_output () |
Sets a widget to output only. More... | |
void | set_visible () |
Makes the widget visible. More... | |
void | set_visible_focus () |
Enables keyboard focus navigation with this widget. More... | |
int | shortcut_label () const |
Returns whether the widget's label uses '&' to indicate shortcuts. More... | |
void | shortcut_label (int value) |
Sets whether the widget's label uses '&' to indicate shortcuts. More... | |
virtual void | show () |
Makes a widget visible. More... | |
void | size (int W, int H) |
Changes the size of the widget. More... | |
int | take_focus () |
Gives the widget the keyboard focus. More... | |
unsigned int | takesevents () const |
Returns if the widget is able to take events. More... | |
int | test_shortcut () |
Returns true if the widget's label contains the entered '&x' shortcut. More... | |
const char * | tooltip () const |
Gets the current tooltip text. More... | |
void | tooltip (const char *text) |
Sets the current tooltip text. More... | |
Fl_Window * | top_window () const |
Returns a pointer to the top-level window for the widget. More... | |
Fl_Window * | top_window_offset (int &xoff, int &yoff) const |
Finds the x/y offset of the current widget relative to the top-level window. More... | |
uchar | type () const |
Gets the widget type. More... | |
void | type (uchar t) |
Sets the widget type. More... | |
int | use_accents_menu () |
Returns non zero if MAC_USE_ACCENTS_MENU flag is set, 0 otherwise. | |
void * | user_data () const |
Gets the user data for this widget. More... | |
void | user_data (Fl_Callback_User_Data *v, bool auto_free) |
Sets the user data for this widget. | |
void | user_data (void *v) |
Sets the user data for this widget. | |
int | vertical_label_margin () |
Get the spacing between the label and the vertical edge of the widget. More... | |
void | vertical_label_margin (int px) |
Set the spacing between the label and the vertical edge of the widget. More... | |
unsigned int | visible () const |
Returns whether a widget is visible. More... | |
unsigned int | visible_focus () const |
Checks whether this widget has a visible focus. More... | |
void | visible_focus (int v) |
Modifies keyboard focus navigation. More... | |
int | visible_r () const |
Returns whether a widget and all its parents are visible. More... | |
int | w () const |
Gets the widget width. More... | |
Fl_When | when () const |
Returns the conditions under which the callback is called. More... | |
void | when (uchar i) |
Sets the flags used to decide when a callback is called. More... | |
Fl_Window * | window () const |
Returns a pointer to the nearest parent window up the widget hierarchy. More... | |
int | x () const |
Gets the widget position in its window. More... | |
int | y () const |
Gets the widget position in its window. More... | |
virtual | ~Fl_Widget () |
Destroys the widget. More... | |
Protected Member Functions | |
void | check_overflow_menu () |
Check if the tabs overflow and sets the has_overflow_menu flag accordingly. | |
virtual void | clear_tab_positions () |
Clear internal array of tab positions and widths. More... | |
void | draw () FL_OVERRIDE |
Draw the tabs area, the optional pulldown button, and all children. More... | |
void | draw_overflow_menu_button () |
Draw square button-like graphics with a down arrow in the top or bottom right corner. | |
virtual void | draw_tab (int x1, int x2, int W, int H, Fl_Widget *o, int flags, int sel) |
Draw a tab in the top or bottom tabs area. More... | |
void | handle_overflow_menu () |
This is called when the user clicks the overflow pulldown menu button. More... | |
virtual int | hit_close (Fl_Widget *o, int event_x, int event_y) |
Check whether the coordinates fall within the "close" button area of the tab. More... | |
virtual int | hit_overflow_menu (int event_x, int event_y) |
Determine if the coordinates are in the area of the overflow menu button. More... | |
virtual int | hit_tabs_area (int event_x, int event_y) |
Determine if the coordinates are within the tabs area. More... | |
int | maybe_do_callback (Fl_Widget *o) |
Set tab o as selected an call callbacks if needed. More... | |
int | on_insert (Fl_Widget *, int) FL_OVERRIDE |
Make sure that we redraw all tabs when new children are added. More... | |
int | on_move (int, int) FL_OVERRIDE |
Make sure that we redraw all tabs when children are moved. More... | |
void | on_remove (int) FL_OVERRIDE |
Make sure that we redraw all tabs when new children are removed. More... | |
virtual void | redraw_tabs () |
Redraw all tabs (and only the tabs). More... | |
virtual int | tab_height () |
Return space (height) in pixels usable for tabs. More... | |
virtual int | tab_positions () |
Calculate tab positions and widths. More... | |
void | take_focus (Fl_Widget *o) |
Take keyboard focus if o is not NULL. More... | |
Protected Member Functions inherited from Fl_Group | |
Fl_Rect * | bounds () |
Returns the internal array of widget sizes and positions. More... | |
void | draw () FL_OVERRIDE |
Draws the widget. More... | |
void | draw_child (Fl_Widget &widget) const |
Forces a child to redraw. More... | |
void | draw_children () |
Draws all children of the group. More... | |
void | draw_outside_label (const Fl_Widget &widget) const |
Parents normally call this to draw outside labels of child widgets. | |
virtual int | on_insert (Fl_Widget *, int) |
Allow derived groups to act when a widget is added as a child. More... | |
virtual int | on_move (int, int) |
Allow derived groups to act when a widget is moved within the group. More... | |
virtual void | on_remove (int) |
Allow derived groups to act when a child widget is removed from the group. More... | |
int * | sizes () |
Returns the internal array of widget sizes and positions. More... | |
void | update_child (Fl_Widget &widget) const |
Draws a child only if it needs it. More... | |
Protected Member Functions inherited from Fl_Widget | |
void | clear_flag (unsigned int c) |
Clears a flag in the flags mask. | |
void | draw_backdrop () const |
If FL_ALIGN_IMAGE_BACKDROP is set, the image or deimage will be drawn. | |
void | draw_box () const |
Draws the widget box according its box style. | |
void | draw_box (Fl_Boxtype t, Fl_Color c) const |
Draws a box of type t, of color c at the widget's position and size. | |
void | draw_box (Fl_Boxtype t, int x, int y, int w, int h, Fl_Color c) const |
Draws a box of type t, of color c at the position X,Y and size W,H. | |
void | draw_focus () const |
Draws a focus rectangle around the widget. More... | |
void | draw_focus (Fl_Boxtype t, int X, int Y, int W, int H) const |
Draws a focus rectangle around the widget. More... | |
void | draw_focus (Fl_Boxtype t, int x, int y, int w, int h, Fl_Color bg) const |
Draws a focus box for the widget at the given position and size. More... | |
void | draw_label () const |
Draws the widget's label at the defined label position. More... | |
void | draw_label (int, int, int, int) const |
Draws the label in an arbitrary bounding box. More... | |
Fl_Widget (int x, int y, int w, int h, const char *label=0L) | |
Creates a widget at the given position and size. More... | |
unsigned int | flags () const |
Gets the widget flags mask. | |
void | h (int v) |
Internal use only. More... | |
void | set_flag (unsigned int c) |
Sets a flag in the flags mask. | |
void | w (int v) |
Internal use only. More... | |
void | x (int v) |
Internal use only. More... | |
void | y (int v) |
Internal use only. More... | |
Protected Attributes | |
int | has_overflow_menu |
set in OVERFLOW_PULLDOWN mode if tabs overflow. The actual menu array is created only on demand | |
int | overflow_type |
Fl_Align | tab_align_ |
tab label alignment | |
int | tab_count |
Array size of tab positions etc. More... | |
int * | tab_flags |
Array of tab flag of tabs per child. More... | |
int | tab_offset |
for pulldown and drag overflow, this is the horizontal offset when the tabs bar is dragged by the user | |
int * | tab_pos |
Array of x-offsets of tabs per child + 1. More... | |
int * | tab_width |
Array of widths of tabs per child. More... | |
Additional Inherited Members | |
Static Public Member Functions inherited from Fl_Group | |
static Fl_Group * | current () |
Returns the currently active group. More... | |
static void | current (Fl_Group *g) |
Sets the current group. More... | |
Static Public Member Functions inherited from Fl_Widget | |
static void | default_callback (Fl_Widget *widget, void *data) |
The default callback for all widgets that don't set a callback. More... | |
static unsigned int | label_shortcut (const char *t) |
Returns the Unicode value of the '&x' shortcut in a given text. More... | |
static int | test_shortcut (const char *, const bool require_alt=false) |
Returns true if the given text t contains the entered '&x' shortcut. More... | |
Protected Types inherited from Fl_Widget | |
enum | { INACTIVE = 1<<0 , INVISIBLE = 1<<1 , OUTPUT = 1<<2 , NOBORDER = 1<<3 , FORCE_POSITION = 1<<4 , NON_MODAL = 1<<5 , SHORTCUT_LABEL = 1<<6 , CHANGED = 1<<7 , OVERRIDE = 1<<8 , VISIBLE_FOCUS = 1<<9 , COPIED_LABEL = 1<<10 , CLIP_CHILDREN = 1<<11 , MENU_WINDOW = 1<<12 , TOOLTIP_WINDOW = 1<<13 , MODAL = 1<<14 , NO_OVERLAY = 1<<15 , GROUP_RELATIVE = 1<<16 , COPIED_TOOLTIP = 1<<17 , FULLSCREEN = 1<<18 , MAC_USE_ACCENTS_MENU = 1<<19 , NEEDS_KEYBOARD = 1<<20 , IMAGE_BOUND = 1<<21 , DEIMAGE_BOUND = 1<<22 , AUTO_DELETE_USER_DATA = 1<<23 , MAXIMIZED = 1<<24 , POPUP = 1<<25 , USERFLAG3 = 1<<29 , USERFLAG2 = 1<<30 , USERFLAG1 = 1<<31 } |
flags possible values enumeration. More... | |
The Fl_Tabs widget is a container widget that displays a set of tabs, with each tab representing a different child widget.
The user can select a tab by clicking on it, and the corresponding child widget will be displayed. The Fl_Tabs widget is useful for organizing a large number of controls or other widgets into a compact space, allowing the user to switch between different sets of controls as needed.
Clicking the tab makes a child visible() by calling show() on it, and all other children are made invisible by calling hide() on them. Usually the children are Fl_Group widgets containing several widgets themselves.
Each child makes a card, and its label() is printed on the card tab, including the label font and style. The selection color of that child is used to color the tab, while the color of the child determines the background color of the pane. '&' in labels are used to prefix a shortcut that is drawn underlined and that activates the corresponding tab; repeated '&&' avoids that.
The size of the tabs is controlled by the bounding box of the children (there should be some space between the children and the edge of the Fl_Tabs), and the tabs may be placed "inverted" on the bottom - this is determined by which gap is larger. It is easiest to lay this out in FLUID, using the FLUID browser to select each child group and resize them until the tabs look the way you want them to.
The background area behind and to the right of the tabs is "transparent", exposing the background detail of the parent. The value of Fl_Tabs::box() does not affect this area. So if Fl_Tabs is resized by itself without the parent, force the appropriate parent (visible behind the tabs) to redraw() to prevent artifacts.
See "Resizing Caveats" below on how to keep tab heights constant. See "Callback's Use Of when()" on how to control the details of how clicks invoke the callback().
A typical use of the Fl_Tabs widget:
Default Appearance
The appearance of each "tab" is taken from the label() and color() of the child group corresponding to that "tab" and panel. Where the "tabs" appear depends on the position and size of the child groups that make up the panels within the Fl_Tabs widget, i.e. whether there is more space above or below them. The height of the "tabs" depends on how much free space is available.
Highlighting The Selected Tab
The selected "tab" can be highlighted further by setting the selection_color() of the Fl_Tab itself, e.g.
The result of the above looks like:
Uniform Tab and Panel Appearance
In order to have uniform tab and panel appearance, not only must the color() and selection_color() for each child group be set, but also the selection_color() of the Fl_Tab itself any time a new "tab" is selected. This can be achieved within the Fl_Tab callback, e.g.
The result of the above looks like:
If Fl_Tabs has no children, the widget will be drawn as a flat rectangle in the background color set by color().
Close Button on Tabs
The Fl_Tabs widget allows you to specify that a child widget should display a close button in its tab. If the FL_WHEN_CLOSED flag is set for the child widget, an "X" symbol will be displayed to the left of the label text in the tab. When the close button is clicked, the child widget's callback function will be called with the FL_REASON_CLOSED reason. It is then the responsibility of the child widget to remove itself from the Fl_Tabs container.
Tabs that are in a compressed state will not display a close button until they are fully expanded.
Overflowing Tabs
When the combined width of the tabs exceeds that of the Fl_Tabs widget, the tabs will overflow. Fl_Tabs provides four options for managing tabs overflow:
Resizing Caveats
When Fl_Tabs is resized vertically, the default behavior scales the tab's height as well as its children. To keep the tab height constant during resizing, set the tab widget's resizable() to one of the tab's child groups, i.e.
As of FLTK 1.3.3, Fl_Tabs() supports the following flags for when():
Notes:
anonymous enum |
Fl_Tabs::Fl_Tabs | ( | int | X, |
int | Y, | ||
int | W, | ||
int | H, | ||
const char * | L = 0 |
||
) |
Creates a new Fl_Tabs widget using the given position, size, and label string.
The default boxtype is FL_THIN_UP_BOX.
Use add(Fl_Widget*) to add each child, which are usually Fl_Group widgets. The children should be sized to stay away from the top or bottom edge of the Fl_Tabs widget, which is where the tabs will be drawn.
All children of Fl_Tabs should have the same size and exactly fit on top of each other. They should only leave space above or below where the tabs will go, but not on the sides. If the first child of Fl_Tabs is set to "resizable()", the riders will not resize when the tabs are resized.
The destructor also deletes all the children. This allows a whole tree to be deleted at once, without having to keep a pointer to all the children in the user code. A kludge has been done so the Fl_Tabs and all of its children can be automatic (local) variables, but you must declare the Fl_Tabs widget first so that it is destroyed last.
|
protectedvirtual |
Clear internal array of tab positions and widths.
void Fl_Tabs::client_area | ( | int & | rx, |
int & | ry, | ||
int & | rw, | ||
int & | rh, | ||
int | tabh = 0 |
||
) |
Returns the position and size available to be used by its children.
If there isn't any child yet the tabh
parameter will be used to calculate the return values. This assumes that the children's labelsize is the same as the Fl_Tabs' labelsize and adds a small border.
If there are already children, the values of child(0) are returned, and tabh
is ignored.
tabh
can be one of
tabh
value, tabs on top (height = tabh) tabh
value, tabs on bottom (height = -tabh)[in] | tabh | position and optional height of tabs (see above) |
[out] | rx,ry,rw,rh | (x,y,w,h) of client area for children |
|
protectedvirtual |
Draw the tabs area, the optional pulldown button, and all children.
Reimplemented from Fl_Group.
|
protectedvirtual |
Draw a tab in the top or bottom tabs area.
Tabs can be selected, or on the left or right side of the selected tab. If overlapping, left tabs are drawn bottom to top using clipping. The selected tab is then the topmost, followed by the right side tabs drawn top to bottom.
Tabs with the FL_WHEN_CLOSE bit set will draw a cross on their left side only if they are not compressed/overlapping.
[in] | x1 | horizontal position of the left visible edge of the tab |
[in] | x2 | horizontal position of the following tab |
[in] | W,H | width and height of the tab |
[in] | o | the child widget that corresponds to this tab |
[in] | flags | if bit 1 is set, this tab is overlapped by another tab |
[in] | what | can be LEFT, SELECTED, or RIGHT to indicate if the tab is to the left side or the right side of the selected tab, or the selected tab itself |
|
virtual |
Handle all events in the tabs area and forward the rest to the selected child.
[in] | event | handle this event |
Reimplemented from Fl_Group.
void Fl_Tabs::handle_overflow | ( | int | ov | ) |
Set a method to handle an overflowing tab bar.
The Fl_Tabs widget allows you to specify how to handle the situation where there are more tabs than can be displayed at once. The available options are:
OVERFLOW_COMPRESS:
Tabs will be compressed and overlaid on top of each other.OVERFLOW_CLIP:
Only the first tabs that fit will be displayed.OVERFLOW_PULLDOWN:
Tabs that do not fit will be placed in a pull-down menu.OVERFLOW_DRAG:
The tab bar can be dragged horizontally to reveal additional tabs.You can set the desired behavior using the overflow() method.
ov | overflow type |
|
protected |
This is called when the user clicks the overflow pulldown menu button.
This method creates a menu item array that contains the titles of all tabs in the Fl_Tabs group. Visible and invisible tabs are separated by dividers to indicate their state.
The menu is then presented until the user selects an item or cancels. The chosen tab is then selected and made visible.
The menu item array is the deleted.
|
protectedvirtual |
Check whether the coordinates fall within the "close" button area of the tab.
The Fl_Tabs::hit_close() method checks whether the given event coordinates fall within the area of the "close" button on the tab of the specified child widget. This method should be called after the Fl_Tabs::which() method, which updates a lookup table used to determine the width of each tab.
o | check the tab of this widget |
event_x,event_y | event coordinates |
|
protectedvirtual |
Determine if the coordinates are in the area of the overflow menu button.
event_x,event_y | event coordinates |
|
protectedvirtual |
Determine if the coordinates are within the tabs area.
event_x,event_y | event coordinates |
|
protected |
Set tab o as selected an call callbacks if needed.
[in] | o | the newly selected tab |
|
protectedvirtual |
Make sure that we redraw all tabs when new children are added.
Reimplemented from Fl_Group.
|
protectedvirtual |
Make sure that we redraw all tabs when children are moved.
Reimplemented from Fl_Group.
|
protectedvirtual |
Make sure that we redraw all tabs when new children are removed.
Reimplemented from Fl_Group.
|
inline |
Returns the tab group for the tab the user has currently down-clicked on and remains over until FL_RELEASE.
Otherwise, returns NULL.
While the user is down-clicked on a tab, the return value is the tab group for that tab. But as soon as the user releases, or drags off the tab with the button still down, the return value will be NULL.
int Fl_Tabs::push | ( | Fl_Widget * | o | ) |
This is called by the tab widget's handle() method to set the tab group widget the user last FL_PUSH'ed on.
Set back to zero on FL_RELEASE.
As of this writing, the value is mainly used by draw_tab() to determine whether or not to draw a 'down' box for the tab when it's clicked, and to turn it off if the user drags off it.
|
protectedvirtual |
Redraw all tabs (and only the tabs).
This method sets the Fl_Tab's damage flags so the tab area is redrawn.
|
virtual |
Make sure that we redraw all tabs when the widget size changes.
Reimplemented from Fl_Group.
|
virtual |
Ensure proper placement of selected tab.
Reimplemented from Fl_Widget.
|
inline |
Gets the tab label alignment.
|
inline |
Sets the tab label alignment.
The default is FL_ALIGN_CENTER so tab labels are centered, but since the label space is measured (per label) to fit the labels, there wouldn't be any difference if labels were aligned left or right.
If you want to show an image (icon) next to the group's label you can set a different label alignment. FL_ALIGN_IMAGE_NEXT_TO_TEXT is the recommended alignment to show the icon left of the text.
|
protectedvirtual |
Return space (height) in pixels usable for tabs.
The calculated height is the largest space between all children and the upper and lower widget boundaries, respectively. If the space at the bottom is larger than at the top, the value will be negative and the tabs should be placed at the bottom.
> | 0 To put the tabs at the top of the widget. |
< | 0 To put the tabs on the bottom. |
Full | height, if children() == 0. |
|
protectedvirtual |
Calculate tab positions and widths.
This protected method calculates the horizontal display positions and widths of all tabs. If the number of children 'nc'
(see below) is > 0 three internal arrays are allocated, otherwise the arrays are free'd and the pointers are set to NULL. Note that the first array is larger (nc+1).
If needed, these arrays are (re)allocated.
These positions are actually of the left edge of the slope. They are either separated by the correct distance or by EXTRASPACE or by zero.
In OVERFLOW_COMPRESS mode, tab positions and widths are compressed to make the entire tabs bar fit into the width of Fl_Tabs while keeping the selected tab fully visible.
In other overflow modes, the tabs area may be dragged horizontally using tab_offset. The tab_pos array is not adjusted to the horizontal offset, but starts at this->x() plus the box's left margin.
The protected variable tab_count
is set to the currently allocated size, i.e. the number of children (nc
).
-1 | If the number of children is 0 (zero). |
|
protected |
Take keyboard focus if o is not NULL.
[in] | o | selected tab |
Fl_Widget * Fl_Tabs::value | ( | ) |
Gets the currently visible widget/tab.
The Fl_Tabs::value() method returns a pointer to the currently visible child widget of the Fl_Tabs container. The visible child is the first child that is currently being displayed, or the last child if none of the children are being displayed.
If child widgets have been added, moved, or deleted, this method ensures that only one tab is visible at a time.
int Fl_Tabs::value | ( | Fl_Widget * | newvalue | ) |
Sets the widget to become the current visible widget/tab.
The Fl_Tabs::value() method allows you to set a particular child widget of the Fl_Tabs container to be the currently visible widget. If the specified widget is a child of the Fl_Tabs container, it will be made visible and all other children will be hidden. The method returns 1 if the value was changed, and 0 if the specified value was already set.
[in] | newvalue | a poiner to a child widget |
|
virtual |
Return a pointer to the child widget with a tab at the given coordinates.
The Fl_Tabs::which() method returns a pointer to the child widget of the Fl_Tabs container that corresponds to the tab at the given event coordinates. If the event coordinates are outside the area of the tabs or if the Fl_Tabs container has no children, the method returns NULL.
event_x,event_y | event coordinates |
|
protected |
|
protected |
Array size of tab positions etc.
|
protected |
Array of tab flag of tabs per child.
|
protected |
Array of x-offsets of tabs per child + 1.
|
protected |
Array of widths of tabs per child.