diff options
| author | Greg Ercolano <erco@seriss.com> | 2018-08-06 18:04:46 +0000 |
|---|---|---|
| committer | Greg Ercolano <erco@seriss.com> | 2018-08-06 18:04:46 +0000 |
| commit | 205570d1340e6109ef721053cebfb7f9acb0255a (patch) | |
| tree | 2a384971d687814f00aa087ca22520a126f9f1ee /FL/Fl_Tree.H | |
| parent | 339ba4c8b307f025c5ef8999f8539656057d69b7 (diff) | |
Fl_Tree documentation fixes for html/pdf, doxygen 1.8.5
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@13008 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'FL/Fl_Tree.H')
| -rw-r--r-- | FL/Fl_Tree.H | 507 |
1 files changed, 233 insertions, 274 deletions
diff --git a/FL/Fl_Tree.H b/FL/Fl_Tree.H index 119662887..63c06240a 100644 --- a/FL/Fl_Tree.H +++ b/FL/Fl_Tree.H @@ -36,280 +36,239 @@ /// \brief This file contains the definitions of the Fl_Tree class /// -/// \class Fl_Tree -/// -/// \brief Tree widget. -/// -/// \image html tree-simple.png "Fl_Tree example program" -/// \image latex tree-simple.png "Fl_Tree example program" width=4cm -/// -/// \code -/// Fl_Tree // Top level widget -/// |--- Fl_Tree_Item // Items in the tree -/// |--- Fl_Tree_Prefs // Preferences for the tree -/// |--- Fl_Tree_Connector (enum) // Connection modes -/// |--- Fl_Tree_Select (enum) // Selection modes -/// |--- Fl_Tree_Sort (enum) // Sort behavior -/// \endcode -/// Similar to Fl_Browser, Fl_Tree is a browser of Fl_Tree_Item's arranged -/// in a parented hierarchy, or 'tree'. Subtrees can be expanded or closed. -/// Items can be added, deleted, inserted, sorted and re-ordered. -/// -/// The tree items may also contain other FLTK widgets, like buttons, input fields, -/// or even "custom" widgets. -/// -/// The callback() is invoked depending on the value of when(): -/// -/// - FL_WHEN_RELEASE -- callback invoked when left mouse button is released on an item -/// - FL_WHEN_CHANGED -- callback invoked when left mouse changes selection state -/// -/// The simple way to define a tree: -/// \code -/// #include <FL/Fl_Tree.H> -/// [..] -/// Fl_Tree tree(X,Y,W,H); -/// tree.begin(); -/// tree.add("Flintstones/Fred"); -/// tree.add("Flintstones/Wilma"); -/// tree.add("Flintstones/Pebbles"); -/// tree.add("Simpsons/Homer"); -/// tree.add("Simpsons/Marge"); -/// tree.add("Simpsons/Bart"); -/// tree.add("Simpsons/Lisa"); -/// tree.end(); -/// \endcode -/// -/// \par FEATURES -/// Items can be added with add(),<BR> -/// removed with remove(),<BR> -/// completely cleared with clear(),<BR> -/// inserted with insert() and insert_above(),<BR> -/// selected/deselected with select() and deselect(),<BR> -/// open/closed with open() and close(),<BR> -/// positioned on the screen with show_item_top(), show_item_middle() and -/// show_item_bottom(),<BR> -/// item children can be swapped around with Fl_Tree_Item::swap_children(),<BR> -/// items can be moved around with Fl_Tree_Item::move(),<BR> -/// an item's children can be walked with Fl_Tree_Item::first() and Fl_Tree_Item::next(), -/// an item's children can be indexed directly with Fl_Tree_Item::child() -/// and Fl_Tree_Item::children(),<BR> -/// items can be moved from one subtree to another with Fl_Tree_Item::deparent() -/// and Fl_Tree_Item::reparent(),<BR> -/// sorting can be controlled when items are add()ed via sortorder().<BR> -/// You can walk the entire tree with first() and next().<BR> -/// You can walk visible items with first_visible_item() -/// and next_visible_item().<BR> -/// You can walk selected items with first_selected_item() and -/// next_selected_item().<BR> -/// Items can be found by their pathname using find_item(const char*), -/// and an item's pathname can be found with item_pathname().<BR> -/// The selected items' colors are controlled by selection_color() -/// (inherited from Fl_Widget).<BR> -/// A hook is provided to allow you to redefine how item's labels are drawn -/// via Fl_Tree::item_draw_callback().<BR> -/// -/// \par SELECTION OF ITEMS -/// The tree can have different selection behaviors controlled by selectmode(). -/// The background color used for selected items is the Fl_Tree::selection_color(). -/// The foreground color for selected items is controlled internally with fl_contrast(). -/// -/// \par CHILD WIDGETS -/// FLTK widgets (including custom widgets) can be assigned to tree items via -/// Fl_Tree_Item::widget(). -/// \par -/// When an Fl_Tree_Item::widget() is defined, the default behavior is for the -/// widget() to be shown in place of the item's label (if it has one). -/// Only the widget()'s width will be used; the widget()'s x() and y() position -/// will be managed by the tree, and the h() will track the item's height. -/// This default behavior can be altered (ABI 1.3.1): -/// Setting Fl_Tree::item_draw_mode()'s FL_TREE_ITEM_DRAW_LABEL_AND_WIDGET flag -/// causes the label + widget to be displayed together in that order, and -/// adding the FL_TREE_ITEM_HEIGHT_FROM_WIDGET flag causes widget's height -/// to define the widget()'s height. -/// -/// \par ICONS -/// The tree's open/close icons can be redefined with -/// Fl_Tree::openicon(), Fl_Tree::closeicon(). User icons -/// can either be changed globally with Fl_Tree::usericon(), -/// or on a per-item basis with Fl_Tree_Item::usericon(). -/// \par -/// Various default preferences can be globally manipulated via Fl_Tree_Prefs, -/// including colors, margins, icons, connection lines, etc. -/// -/// \par FONTS AND COLORS -/// When adding new items to the tree, the new items get the -/// defaults for fonts and colors from: -/// \par -/// - Fl_Tree::item_labelfont() -- The default item label font (default: FL_HELVETICA) -/// - Fl_Tree::item_labelsize() -- The default item label size (default: FL_NORMAL_SIZE) -/// - Fl_Tree::item_labelfgcolor() -- The default item label foreground color (default: FL_FOREGROUND_COLOR) -/// - Fl_Tree::item_labelbgcolor() -- The default item label background color (default: 0xffffffff, which tree uses as 'transparent') -/// \par -/// Each item (Fl_Tree_Item) inherits a copy of these font/color attributes when created, -/// and each item has its own methods to let the app change these values on a per-item basis -/// using methods of the same name: -/// \par -/// - Fl_Tree_Item::labelfont() -- The item's label font (default: FL_HELVETICA) -/// - Fl_Tree_Item::labelsize() -- The item's label size (default: FL_NORMAL_SIZE) -/// - Fl_Tree_Item::labelfgcolor() -- The item's label foreground color (default: FL_FOREGROUND_COLOR) -/// - Fl_Tree_Item::labelbgcolor() -- The item's label background color (default: 0xffffffff, which uses the tree's own bg color) -/// -/// \par CALLBACKS -/// The tree's callback() will be invoked when items change state or are open/closed. -/// when() controls when mouse/keyboard events invoke the callback. -/// callback_item() and callback_reason() can be used to determine the cause of the callback. e.g. -/// \par -/// \code -/// void MyTreeCallback(Fl_Widget *w, void *data) { -/// Fl_Tree *tree = (Fl_Tree*)w; -/// Fl_Tree_Item *item = (Fl_Tree_Item*)tree->callback_item(); // get selected item -/// switch ( tree->callback_reason() ) { -/// case FL_TREE_REASON_SELECTED: [..] -/// case FL_TREE_REASON_DESELECTED: [..] -/// case FL_TREE_REASON_RESELECTED: [..] -/// case FL_TREE_REASON_OPENED: [..] -/// case FL_TREE_REASON_CLOSED: [..] -/// } -/// \endcode -/// -/// \par SIMPLE EXAMPLES -/// To find all the selected items: -/// \code -/// for ( Fl_Tree_Item *i=first_selected_item(); i; i=next_selected_item(i) ) -/// printf("Item %s is selected\n", i->label()); -/// \endcode -/// To get an item's full menu pathname, use Fl_Tree::item_pathname(), e.g. -/// \code -/// char pathname[256] = "???"; -/// tree->item_pathname(pathname, sizeof(pathname), item); // eg. "Parent/Child/Item" -/// \endcode -/// \par -/// To walk all the items of the tree from top to bottom: -/// \code -/// // Walk all the items in the tree, and print their labels -/// for ( Fl_Tree_Item *item = tree->first(); item; item = tree->next(item) ) { -/// printf("Item: %s\n", item->label()); -/// } -/// \endcode -/// \par -/// To recursively walk all the children of a particular item, -/// define a function that uses recursion: -/// \code -/// // Find all of the item's children and print an indented report of their labels -/// void my_print_all_children(Fl_Tree_Item *item, int indent=0) { -/// for ( int t=0; t<item->children(); t++ ) { -/// printf("%*s Item: %s\n", indent, "", item->child(t)->label()); -/// my_print_all_children(item->child(t), indent+4); // recurse -/// } -/// } -/// \endcode -/// \par -/// To change the default label font and color when creating new items: -/// \code -/// tree = new Fl_Tree(..); -/// tree->item_labelfont(FL_COURIER); // Use Courier font for all new items -/// tree->item_labelfgcolor(FL_RED); // Use red color for labels of all new items -/// [..] -/// // Now create the items in the tree using the above defaults. -/// tree->add("Aaa"); -/// tree->add("Bbb"); -/// [..] -/// \endcode -/// \par -/// To change the font and color of all existing items in the tree: -/// \code -/// // Change the font and color of all items currently in the tree -/// for ( Fl_Tree_Item *item = tree->first(); item; item = tree->next(item) ) { -/// item->labelfont(FL_COURIER); -/// item->labelcolor(FL_RED); -/// } -/// \endcode -/// -/// \par DISPLAY DESCRIPTION -/// The following image shows the tree's various visual elements -/// and the methods that control them: -/// \par -/// \image html tree-elements.png -/// \image latex tree-elements.png "Fl_Tree elements" width=6cm -/// \par -/// The following shows the protected dimension variables 'tree inner' (tix..) -/// and 'tree outer' (tox..): -/// \image html tree-dimensions.png "Fl_Tree inner/outer dimensions" width=6cm -/// \image latex tree-dimensions.png "Fl_Tree inner/outer dimensions" width=6cm -/// -/// \par KEYBOARD BINDINGS -/// The following table lists keyboard bindings for navigating the tree: -/// -/// <TABLE BORDER="1" SUMMARY="Fl_Tree keyboard bindings."> -/// <CAPTION ALIGN=TOP>Fl_Tree keyboard bindings.</CAPTION> -/// <TR> -/// <TD WIDTH=25% ALIGN=CENTER><B>Keyboard</B></TD> -/// <TD WIDTH=25% ALIGN=CENTER><B>FL_TREE_SELECT_MULTI</B></TD> -/// <TD WIDTH=25% ALIGN=CENTER><B>FL_TREE_SELECT_SINGLE</B></TD> -/// <TD WIDTH=25% ALIGN=CENTER><B>FL_TREE_SELECT_NONE</B></TD> -/// -/// </TR><TR> -/// <TD ALIGN=CENTER><B>Ctrl-A</B> (Linux/Windows)<BR><B>Command-A</B> (Mac)</TD> -/// <TD ALIGN=CENTER>Select all items.</TD> -/// <TD ALIGN=CENTER>N/A</TD> -/// <TD ALIGN=CENTER>N/A</TD> -/// -/// </TR><TR> -/// <TD ALIGN=CENTER><B>Space </B></TD> -/// <TD ALIGN=CENTER>Selects item.</TD> -/// <TD ALIGN=CENTER>Selects item.</TD> -/// <TD ALIGN=CENTER>N/A</TD> -/// -/// </TR><TR> -/// <TD ALIGN=CENTER><B>Ctrl-Space </B></TD> -/// <TD ALIGN=CENTER>Toggle item.</TD> -/// <TD ALIGN=CENTER>Toggle item.</TD> -/// <TD ALIGN=CENTER>N/A</TD> -/// -/// </TR><TR> -/// <TD ALIGN=CENTER><B>Shift-Space </B></TD> -/// <TD ALIGN=CENTER>Extends selection<BR>from last item.</TD> -/// <TD ALIGN=CENTER>Selects item.</TD> -/// <TD ALIGN=CENTER>N/A</TD> -/// -/// </TR><TR> -/// <TD ALIGN=CENTER><B>Enter,<BR>Ctrl-Enter,<BR>Shift-Enter </B></TD> -/// <TD ALIGN=CENTER>Toggles open/close</TD> -/// <TD ALIGN=CENTER>Toggles open/close</TD> -/// <TD ALIGN=CENTER>Toggles open/close</TD> -/// -/// </TR><TR> -/// <TD ALIGN=CENTER><B>Right / Left</B></TD> -/// <TD ALIGN=CENTER>Open/Close item.</TD> -/// <TD ALIGN=CENTER>Open/Close item.</TD> -/// <TD ALIGN=CENTER>Open/Close item.</TD> -/// -/// </TR><TR> -/// <TD ALIGN=CENTER><B>Up / Down</B></TD> -/// <TD ALIGN=CENTER>Move focus box up/down.</TD> -/// <TD ALIGN=CENTER>Move focus box up/down.</TD> -/// <TD ALIGN=CENTER>N/A</TD> -/// -/// </TR><TR> -/// <TD ALIGN=CENTER><B>Shift-Up / Shift-Down</B></TD> -/// <TD ALIGN=CENTER>Extend selection up/down.</TD> -/// <TD ALIGN=CENTER>Move focus up/down.</TD> -/// <TD ALIGN=CENTER>N/A</TD> -/// -/// </TR><TR> -/// <TD ALIGN=CENTER><B>Home / End</B></TD> -/// <TD ALIGN=CENTER>Move to top/bottom of tree.</TD> -/// <TD ALIGN=CENTER>Move to top/bottom of tree.</TD> -/// <TD ALIGN=CENTER>Move to top/bottom of tree.</TD> -/// -/// </TR><TR> -/// <TD ALIGN=CENTER><B>PageUp / PageDown</B></TD> -/// <TD ALIGN=CENTER>Page up/down.</TD> -/// <TD ALIGN=CENTER>Page up/down.</TD> -/// <TD ALIGN=CENTER>Page up/down.</TD> -/// -/// </TD></TR></TABLE> -/// +/** \class Fl_Tree + + \brief Tree widget. + + \image html tree-simple.png "Fl_Tree example program" + \image latex tree-simple.png "Fl_Tree example program" width=4cm + + \code + Fl_Tree // Top level widget + |--- Fl_Tree_Item // Items in the tree + |--- Fl_Tree_Prefs // Preferences for the tree + |--- Fl_Tree_Connector (enum) // Connection modes + |--- Fl_Tree_Select (enum) // Selection modes + |--- Fl_Tree_Sort (enum) // Sort behavior + \endcode + + Similar to Fl_Browser, Fl_Tree is a browser of Fl_Tree_Item's arranged + in a parented hierarchy, or 'tree'. Subtrees can be expanded or closed. + Items can be added, deleted, inserted, sorted and re-ordered. + + The tree items may also contain other FLTK widgets, like buttons, input fields, + or even "custom" widgets. + + The callback() is invoked depending on the value of when(): + + - FL_WHEN_RELEASE -- callback invoked when left mouse button is released on an item + - FL_WHEN_CHANGED -- callback invoked when left mouse changes selection state + + The simple way to define a tree: + \par + \code + #include <FL/Fl_Tree.H> + [..] + Fl_Tree tree(X,Y,W,H); + tree.begin(); + tree.add("Flintstones/Fred"); + tree.add("Flintstones/Wilma"); + tree.add("Flintstones/Pebbles"); + tree.add("Simpsons/Homer"); + tree.add("Simpsons/Marge"); + tree.add("Simpsons/Bart"); + tree.add("Simpsons/Lisa"); + tree.end(); + \endcode + + \par FEATURES + Items can be added with add(),<BR> + removed with remove(),<BR> + completely cleared with clear(),<BR> + inserted with insert() and insert_above(),<BR> + selected/deselected with select() and deselect(),<BR> + open/closed with open() and close(),<BR> + positioned on the screen with show_item_top(), show_item_middle() and + show_item_bottom(),<BR> + item children can be swapped around with Fl_Tree_Item::swap_children(),<BR> + items can be moved around with Fl_Tree_Item::move(),<BR> + an item's children can be walked with Fl_Tree_Item::first() and Fl_Tree_Item::next(), + an item's children can be indexed directly with Fl_Tree_Item::child() + and Fl_Tree_Item::children(),<BR> + items can be moved from one subtree to another with Fl_Tree_Item::deparent() + and Fl_Tree_Item::reparent(),<BR> + sorting can be controlled when items are add()ed via sortorder().<BR> + You can walk the entire tree with first() and next().<BR> + You can walk visible items with first_visible_item() + and next_visible_item().<BR> + You can walk selected items with first_selected_item() and + next_selected_item().<BR> + Items can be found by their pathname using find_item(const char*), + and an item's pathname can be found with item_pathname().<BR> + The selected items' colors are controlled by selection_color() + (inherited from Fl_Widget).<BR> + A hook is provided to allow you to redefine how item's labels are drawn + via Fl_Tree::item_draw_callback().<BR> + + \par SELECTION OF ITEMS + The tree can have different selection behaviors controlled by selectmode(). + The background color used for selected items is the Fl_Tree::selection_color(). + The foreground color for selected items is controlled internally with fl_contrast(). + + \par CHILD WIDGETS + FLTK widgets (including custom widgets) can be assigned to tree items via + Fl_Tree_Item::widget(). + \par + When an Fl_Tree_Item::widget() is defined, the default behavior is for the + widget() to be shown in place of the item's label (if it has one). + Only the widget()'s width will be used; the widget()'s x() and y() position + will be managed by the tree, and the h() will track the item's height. + This default behavior can be altered (ABI 1.3.1): + Setting Fl_Tree::item_draw_mode()'s FL_TREE_ITEM_DRAW_LABEL_AND_WIDGET flag + causes the label + widget to be displayed together in that order, and + adding the FL_TREE_ITEM_HEIGHT_FROM_WIDGET flag causes widget's height + to define the widget()'s height. + + \par ICONS + The tree's open/close icons can be redefined with + Fl_Tree::openicon(), Fl_Tree::closeicon(). User icons + can either be changed globally with Fl_Tree::usericon(), + or on a per-item basis with Fl_Tree_Item::usericon(). + \par + Various default preferences can be globally manipulated via Fl_Tree_Prefs, + including colors, margins, icons, connection lines, etc. + + \par FONTS AND COLORS + When adding new items to the tree, the new items get the + defaults for fonts and colors from: + \par + - Fl_Tree::item_labelfont() -- The default item label font (default: FL_HELVETICA) + - Fl_Tree::item_labelsize() -- The default item label size (default: FL_NORMAL_SIZE) + - Fl_Tree::item_labelfgcolor() -- The default item label foreground color (default: FL_FOREGROUND_COLOR) + - Fl_Tree::item_labelbgcolor() -- The default item label background color (default: 0xffffffff, which tree uses as 'transparent') + \par + Each item (Fl_Tree_Item) inherits a copy of these font/color attributes when created, + and each item has its own methods to let the app change these values on a per-item basis + using methods of the same name: + \par + - Fl_Tree_Item::labelfont() -- The item's label font (default: FL_HELVETICA) + - Fl_Tree_Item::labelsize() -- The item's label size (default: FL_NORMAL_SIZE) + - Fl_Tree_Item::labelfgcolor() -- The item's label foreground color (default: FL_FOREGROUND_COLOR) + - Fl_Tree_Item::labelbgcolor() -- The item's label background color (default: 0xffffffff, which uses the tree's own bg color) + + \par CALLBACKS + The tree's callback() will be invoked when items change state or are open/closed. + when() controls when mouse/keyboard events invoke the callback. + callback_item() and callback_reason() can be used to determine the cause of the callback. e.g. + \par + \code + void MyTreeCallback(Fl_Widget *w, void *data) { + Fl_Tree *tree = (Fl_Tree*)w; + Fl_Tree_Item *item = (Fl_Tree_Item*)tree->callback_item(); // get selected item + switch ( tree->callback_reason() ) { + case FL_TREE_REASON_SELECTED: [..] + case FL_TREE_REASON_DESELECTED: [..] + case FL_TREE_REASON_RESELECTED: [..] + case FL_TREE_REASON_OPENED: [..] + case FL_TREE_REASON_CLOSED: [..] + } + : + } + \endcode + + \par SIMPLE EXAMPLES + To find all the selected items: + \par + \code + for ( Fl_Tree_Item *i=first_selected_item(); i; i=next_selected_item(i) ) + printf("Item %s is selected\n", i->label()); + \endcode + \par + To get an item's full menu pathname, use Fl_Tree::item_pathname(), e.g. + \par + \code + [..] + char pathname[256] = "???"; + tree->item_pathname(pathname, sizeof(pathname), item); // eg. "Parent/Child/Item" + [..] + \endcode + \par + To walk all the items of the tree from top to bottom: + \par + \code + // Walk all the items in the tree, and print their labels + for ( Fl_Tree_Item *item = tree->first(); item; item = tree->next(item) ) { + printf("Item: %s\n", item->label()); + } + \endcode + \par + To recursively walk all the children of a particular item, + define a function that uses recursion: + \par + \code + // Find all of the item's children and print an indented report of their labels + void my_print_all_children(Fl_Tree_Item *item, int indent=0) { + for ( int t=0; t<item->children(); t++ ) { + printf("%*s Item: %s\n", indent, "", item->child(t)->label()); + my_print_all_children(item->child(t), indent+4); // recurse + } + } + \endcode + \par + To change the default label font and color when creating new items: + \par + \code + tree = new Fl_Tree(..); + tree->item_labelfont(FL_COURIER); // Use Courier font for all new items + tree->item_labelfgcolor(FL_RED); // Use red color for labels of all new items + [..] + // Now create the items in the tree using the above defaults. + tree->add("Aaa"); + tree->add("Bbb"); + \endcode + \par + To change the font and color of all existing items in the tree: + \par + \code + // Change the font and color of all items currently in the tree + for ( Fl_Tree_Item *item = tree->first(); item; item = tree->next(item) ) { + item->labelfont(FL_COURIER); + item->labelcolor(FL_RED); + } + \endcode + + \par DISPLAY DESCRIPTION + The following image shows the tree's various visual elements + and the methods that control them: + \par + \image html tree-elements.png + \image latex tree-elements.png "Fl_Tree elements" width=6cm + \par + The following shows the protected dimension variables 'tree inner' (tix..) + and 'tree outer' (tox..): + \image html tree-dimensions.png "Fl_Tree inner/outer dimensions" width=6cm + \image latex tree-dimensions.png "Fl_Tree inner/outer dimensions" width=6cm + + \par KEYBOARD BINDINGS + The following table lists keyboard bindings for navigating the tree: + \par + Keyboard | FL_TREE_SELECT_MULTI | FL_TREE_SELECT_SINGLE | FL_TREE_SELECT_NONE | + ------------------------|-----------------------------|-----------------------------|-----------------------------| + Ctrl-A (Linux/Windows) | Select all items | N/A | N/A | + Command-A (Mac) | Select all items | N/A | N/A | + Space | Selects item | Selects item | N/A | + Ctrl-Space | Toggle item | Toggle item | N/A | + Shift-Space | Extends selection | Selects item | N/A | + Enter | Toggles open/close | Toggles open/close | Toggles open/close | + Ctrl-Enter | Toggles open/close | Toggles open/close | Toggles open/close | + Shift-Enter | Toggles open/close | Toggles open/close | Toggles open/close | + Right / Left | Open/Close item | Open/Close item | Open/Close item | + Up / Down | Move focus box up/down | Move focus box up/down | N/A | + Shift-Up / Shift-Down | Extend selection up/down | Move focus up/down | N/A | + Home / End | Move to top/bottom of tree | Move to top/bottom of tree | Move to top/bottom of tree | + PageUp / PageDown | Page up/down | Page up/down | Page up/down | + +*/ /// \enum Fl_Tree_Reason /// The reason the callback was invoked. |
