// generated by Fast Light User Interface Designer (fluid) version 1.0300 #include "tree.h" /** // Global callback event counter */ static int G_cb_counter = 0; /** Return an Fl_Tree_Reason as a text string name */ const char* reason_as_name(Fl_Tree_Reason reason) { switch ( reason ) { case FL_TREE_REASON_NONE: return("none"); case FL_TREE_REASON_SELECTED: return("selected"); case FL_TREE_REASON_DESELECTED: return("deselected"); case FL_TREE_REASON_OPENED: return("opened"); case FL_TREE_REASON_CLOSED: return("closed"); default: return("???"); } } void Button_CB(Fl_Widget*w, void*data) { fprintf(stderr, "'%s' button pushed\n", w->label()); } /** Assign user icons to the items */ void AssignUserIcons() { static const char *L_folder_xpm[] = { "11 11 3 1", ". c None", "x c #d8d833", "@ c #808011", "...........", ".....@@@@..", "....@xxxx@.", "@@@@@xxxx@@", "@xxxxxxxxx@", "@xxxxxxxxx@", "@xxxxxxxxx@", "@xxxxxxxxx@", "@xxxxxxxxx@", "@xxxxxxxxx@", "@@@@@@@@@@@"}; static Fl_Pixmap L_folderpixmap(L_folder_xpm); static const char *L_document_xpm[] = { "11 11 3 1", ". c None", "x c #d8d8f8", "@ c #202060", ".@@@@@@@@@.", ".@xxxxxxx@.", ".@xxxxxxx@.", ".@xxxxxxx@.", ".@xxxxxxx@.", ".@xxxxxxx@.", ".@xxxxxxx@.", ".@xxxxxxx@.", ".@xxxxxxx@.", ".@xxxxxxx@.", ".@@@@@@@@@."}; static Fl_Pixmap L_documentpixmap(L_document_xpm); // Assign user icons to tree items for ( Fl_Tree_Item *item = tree->first(); item; item=item->next()) if ( usericon_radio->value() ) // Assign custom icons item->usericon(item->has_children() ? &L_folderpixmap : &L_documentpixmap); else // Don't assign custom icons item->usericon(0); tree->redraw(); } /** Rebuild the 'example tree' from scratch */ void RebuildTree() { // REBUILD THE TREE TO MAKE CURRENT "DEFAULT" PREFS TAKE EFFECT tree->clear(); tree->add("Aaa"); tree->add("Bbb"); tree->add("Ccc"); tree->add("Ddd"); tree->add("Bbb/child-01"); tree->add("Bbb/child-01/111"); tree->add("Bbb/child-01/222"); tree->add("Bbb/child-01/333"); tree->add("Bbb/child-02"); tree->add("Bbb/child-03"); tree->add("Bbb/child-04"); { static Fl_Button *but = 0; // Assign an FLTK widget to one of the items Fl_Tree_Item *i; if ( ( i = tree->find_item("Bbb/child-03") ) != NULL ) { if ( !but ) { // only do this once at program startup tree->begin(); but = new Fl_Button(1,1,140,1,"ccc button"); // we control w() only but->labelsize(10); but->callback(Button_CB); } i->widget(but); tree->end(); } } { // Assign an FLTK group to one of the items with widgets Fl_Tree_Item *i; if ( ( i = tree->find_item("Bbb/child-04") ) != NULL ) { static Fl_Group *grp = 0; if ( !grp ) { // only do this once at program startup tree->begin(); grp = new Fl_Group(100,100,140,18); // build group.. tree handles position grp->color(FL_WHITE); grp->begin(); Fl_Button *abut = new Fl_Button(grp->x()+0 ,grp->y()+2,65,15,"D1"); abut->labelsize(10); abut->callback(Button_CB); Fl_Button *bbut = new Fl_Button(grp->x()+75,grp->y()+2,65,15,"D2"); bbut->labelsize(10); bbut->callback(Button_CB); grp->end(); grp->resizable(grp); tree->end(); } i->widget(grp); } } // Add an 'Ascending' node, and create it sorted tree->sortorder(FL_TREE_SORT_NONE); tree->add("Ascending")->close(); tree->sortorder(FL_TREE_SORT_ASCENDING); tree->add("Ascending/Zzz"); tree->add("Ascending/Xxx"); tree->add("Ascending/Aaa"); tree->add("Ascending/Bbb"); tree->add("Ascending/Yyy"); tree->add("Ascending/Ccc"); // Add a 'Descending' node, and create it sorted tree->sortorder(FL_TREE_SORT_NONE); tree->add("Descending")->close(); tree->sortorder(FL_TREE_SORT_DESCENDING); tree->add("Descending/Zzz"); tree->add("Descending/Xxx"); tree->add("Descending/Aaa"); tree->add("Descending/Bbb"); tree->add("Descending/Yyy"); tree->add("Descending/Ccc"); // Add 500 items in numerical order tree->sortorder(FL_TREE_SORT_NONE); for ( int t=0; t<500; t++ ) { static char s[80]; sprintf(s, "500 Items/item %04d", t); tree->add(s); } tree->close("500 Items"); // close the 500 items by default AssignUserIcons(); tree->redraw(); } /** Prompt the user to change the specified color */ Fl_Color EditColor(Fl_Color val) { uchar r,g,b; // Get the current color Fl::get_color(val,r,g,b); // Bring up a color chooser to edit it fl_color_chooser("Choose Color",r,g,b); // Return the new color the user picked return(fl_rgb_color(r,g,b)); } Fl_Double_Window *window=(Fl_Double_Window *)0; Fl_Tree *tree=(Fl_Tree *)0; static void cb_tree(Fl_Tree*, void*) { G_cb_counter++; // Increment callback counter whenever tree callback is invoked Fl_Tree_Item *item = tree->callback_item(); if ( item ) { fprintf(stderr, "TREE CALLBACK: label='%s' userdata=%ld reason=%s\n", item->label(), (long)(fl_intptr_t)tree->user_data(), reason_as_name(tree->callback_reason())); } else { fprintf(stderr, "TREE CALLBACK: reason=%s item=(no item -- probably multiple items were changed at once)\n", reason_as_name(tree->callback_reason())); }; } Fl_Value_Slider *margintop_slider=(Fl_Value_Slider *)0; static void cb_margintop_slider(Fl_Value_Slider*, void*) { int val = (int)margintop_slider->value(); tree->margintop(val); tree->redraw(); } Fl_Value_Slider *marginleft_slider=(Fl_Value_Slider *)0; static void cb_marginleft_slider(Fl_Value_Slider*, void*) { int val = (int)marginleft_slider->value(); tree->marginleft(val); tree->redraw(); } Fl_Value_Slider *openchild_marginbottom_slider=(Fl_Value_Slider *)0; static void cb_openchild_marginbottom_slider(Fl_Value_Slider*, void*) { int val = (int)openchild_marginbottom_slider->value(); tree->openchild_marginbottom(val); tree->redraw(); } Fl_Choice *collapseicons_chooser=(Fl_Choice *)0; static void cb_collapseicons_chooser(Fl_Choice*, void*) { static const char *L_open_xpm[] = { #ifdef __APPLE__ "11 11 3 1", ". c #fefefe", "# c #444444", "@ c #000000", "###########", "#.........#", "#.........#", "#....@....#", "#....@....#", "#..@@@@@..#", "#....@....#", "#....@....#", "#.........#", "#.........#", "###########" #else "11 11 2 1", ". c None", "@ c #000000", "...@.......", "...@@......", "...@@@.....", "...@@@@....", "...@@@@@...", "...@@@@@@..", "...@@@@@...", "...@@@@....", "...@@@.....", "...@@......", "...@......." #endif }; static Fl_Pixmap L_openpixmap(L_open_xpm); static const char *L_close_xpm[] = { #ifdef __APPLE__ "11 11 3 1", ". c #fefefe", "# c #444444", "@ c #000000", "###########", "#.........#", "#.........#", "#.........#", "#.........#", "#..@@@@@..#", "#.........#", "#.........#", "#.........#", "#.........#", "###########" #else "11 11 2 1", ". c None", "@ c #000000", "...........", "...........", "...........", "...........", "...........", "@@@@@@@@@@@", ".@@@@@@@@@.", "..@@@@@@@..", "...@@@@@...", "....@@@....", ".....@....." #endif }; static Fl_Pixmap L_closepixmap(L_close_xpm); switch ( collapseicons_chooser->value() ) { case 0: tree->showcollapse(1); tree->openicon(0); tree->closeicon(0); break; case 1: tree->showcollapse(1); tree->openicon(&L_openpixmap); tree->closeicon(&L_closepixmap); break; case 2: tree->showcollapse(0); break; }; } Fl_Menu_Item menu_collapseicons_chooser[] = { {"Normal", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Custom", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Off", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {0,0,0,0,0,0,0,0,0} }; Fl_Choice *connectorstyle_chooser=(Fl_Choice *)0; static void cb_connectorstyle_chooser(Fl_Choice*, void*) { // CHANGE COLLAPSESTYLE switch ( connectorstyle_chooser->value() ) { case 0: tree->connectorstyle(FL_TREE_CONNECTOR_NONE); break; case 1: tree->connectorstyle(FL_TREE_CONNECTOR_DOTTED); break; case 2: tree->connectorstyle(FL_TREE_CONNECTOR_SOLID); break; }; } Fl_Menu_Item menu_connectorstyle_chooser[] = { {"None", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Dotted", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Solid", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {0,0,0,0,0,0,0,0,0} }; Fl_Choice *selectmode_chooser=(Fl_Choice *)0; static void cb_selectmode_chooser(Fl_Choice*, void*) { // Set selection mode switch ( selectmode_chooser->value() ) { case 0: tree->selectmode(FL_TREE_SELECT_NONE); break; // None case 1: tree->selectmode(FL_TREE_SELECT_SINGLE); break; // Single case 2: tree->selectmode(FL_TREE_SELECT_MULTI); break; // Multi default: tree->selectmode(FL_TREE_SELECT_SINGLE); break; // Single }; } Fl_Menu_Item menu_selectmode_chooser[] = { {"None", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Single", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Multi", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {0,0,0,0,0,0,0,0,0} }; Fl_Choice *whenmode_chooser=(Fl_Choice *)0; static void cb_whenmode_chooser(Fl_Choice*, void*) { // Set when mode switch ( whenmode_chooser->value() ) { case 0: tree->when(FL_WHEN_RELEASE); break; case 1: tree->when(FL_WHEN_CHANGED); break; case 2: tree->when(FL_WHEN_NEVER); break; default: tree->when(FL_WHEN_RELEASE); break; }; } Fl_Menu_Item menu_whenmode_chooser[] = { {"Changed", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Released", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Never", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {0,0,0,0,0,0,0,0,0} }; Fl_Check_Button *usericon_radio=(Fl_Check_Button *)0; static void cb_usericon_radio(Fl_Check_Button*, void*) { AssignUserIcons(); } Fl_Check_Button *showroot_radio=(Fl_Check_Button *)0; static void cb_showroot_radio(Fl_Check_Button*, void*) { int onoff = showroot_radio->value(); tree->showroot(onoff); } Fl_Check_Button *visiblefocus_checkbox=(Fl_Check_Button *)0; static void cb_visiblefocus_checkbox(Fl_Check_Button*, void*) { int onoff = visiblefocus_checkbox->value(); tree->visible_focus(onoff); } Fl_Button *selection_color_button=(Fl_Button *)0; static void cb_selection_color_button(Fl_Button*, void*) { Fl_Color val = EditColor(tree->selection_color()); // Get color of first item in tree selection_color_button->color(val); // update modified color to button tree->selection_color(val); tree->redraw(); } Fl_Box *showitem_box=(Fl_Box *)0; static void cb_Show(Fl_Button*, void*) { Fl_Tree_Item *item = tree->next_selected_item(); tree->show_item(item); } static void cb_Top(Fl_Button*, void*) { Fl_Tree_Item *item = tree->next_selected_item(); tree->show_item_top(item); } static void cb_Mid(Fl_Button*, void*) { Fl_Tree_Item *item = tree->next_selected_item(); tree->show_item_middle(item); } static void cb_Bot(Fl_Button*, void*) { Fl_Tree_Item *item = tree->next_selected_item(); tree->show_item_bottom(item); } Fl_Button *loaddb_button=(Fl_Button *)0; static void cb_loaddb_button(Fl_Button*, void*) { const char *filename = fl_file_chooser("Select a Preferences style Database", "Preferences(*.prefs)", 0L); if (filename) { tree->clear(); Fl_Preferences prefs(filename, 0L, 0L); tree->load(prefs); tree->redraw(); }; } Fl_Button *insertabove_button=(Fl_Button *)0; static void cb_insertabove_button(Fl_Button*, void*) { Fl_Tree_Item *item=tree->first(); while (item) { if ( item->is_selected() ) { tree->insert_above(item, "AaaAaa"); tree->insert_above(item, "BbbBbb"); tree->insert_above(item, "CccCcc"); } item = item->next(); } tree->redraw(); } Fl_Button *rebuildtree_button=(Fl_Button *)0; static void cb_rebuildtree_button(Fl_Button*, void*) { RebuildTree(); } Fl_Button *showpathname_button=(Fl_Button *)0; static void cb_showpathname_button(Fl_Button*, void*) { Fl_Tree_Item *item = tree->first_selected_item(); if ( !item ) { fl_message("No item was selected"); return; } char pathname[256]; switch ( tree->item_pathname(pathname, sizeof(pathname), item) ) { case 0: fl_message("Pathname for '%s' is: \"%s\"", (item->label() ? item->label() : "???"), pathname); break; case -1: fl_message("item_pathname() returned -1 (NOT FOUND)"); break; case -2: fl_message("item_pathname() returned -2 (STRING TOO LONG)"); break; }; } Fl_Button *clearall_button=(Fl_Button *)0; static void cb_clearall_button(Fl_Button*, void*) { tree->clear(); tree->redraw(); } Fl_Button *testcallbackflag_button=(Fl_Button *)0; static void cb_testcallbackflag_button(Fl_Button*, void*) { Fl_Tree_Item *root = tree->root(); fprintf(stderr, "--- Checking docallback off\n"); if (!root) return; //// "OFF" TEST // open/close: Make sure these methods don't trigger cb G_cb_counter = 0; tree->close(root, 0); if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\n close(item) triggered cb!"); G_cb_counter = 0; tree->open(root, 0); if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\n open(item) triggered cb!"); G_cb_counter = 0; tree->open_toggle(root, 0); if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\n open_toggle(item) triggered cb!"); G_cb_counter = 0; tree->open("ROOT", 0); if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\n open(path) triggered cb!"); G_cb_counter = 0; tree->close("ROOT", 0); if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\n close(path) triggered cb!"); tree->open(root,0); // leave root open // select/deselect: Make sure these methods don't trigger cb G_cb_counter = 0; tree->select(root, 0); if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\n select(item) triggered cb!"); G_cb_counter = 0; tree->deselect(root, 0); if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\n deselect(item) triggered cb!"); G_cb_counter = 0; tree->select_toggle(root, 0); if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\n select_toggle(item) triggered cb!"); G_cb_counter = 0; tree->deselect("ROOT", 0); if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\n deselect(path) triggered cb!"); G_cb_counter = 0; tree->select("ROOT", 0); if ( G_cb_counter ) fl_alert("FAILED 'OFF' TEST\n select(path) triggered cb!"); tree->deselect("ROOT"); // leave deselected //// "ON" TEST // open/close: Make sure these methods don't trigger cb G_cb_counter = 0; tree->close(root, 1); if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\n close(item) cb wasn't triggered!"); G_cb_counter = 0; tree->open(root, 1); if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\n open(item) cb wasn't triggered!"); G_cb_counter = 0; tree->open_toggle(root, 1); if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\n open_toggle(item) cb wasn't triggered!"); G_cb_counter = 0; tree->open(root, 1); if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\n open(item)[2] cb wasn't triggered!"); G_cb_counter = 0; tree->close(root, 1); if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\n close(item)[2] cb wasn't triggered!"); G_cb_counter = 0; tree->open("ROOT", 1); if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\n open(path) cb wasn't triggered!"); G_cb_counter = 0; tree->close("ROOT", 1); if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\n close(path) cb wasn't triggered!"); tree->open(root,0); // leave root open // select/deselect: Make sure these methods don't trigger cb G_cb_counter = 0; tree->select(root, 1); if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\n select(item) cb wasn't triggered!"); G_cb_counter = 0; tree->deselect(root, 1); if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\n deselect(item) cb wasn't triggered!"); G_cb_counter = 0; tree->select_toggle(root, 1); if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\n select_toggle(item) cb wasn't triggered!"); G_cb_counter = 0; tree->deselect("ROOT", 1); if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\n deselect(path) cb wasn't triggered!"); G_cb_counter = 0; tree->select("ROOT", 1); if ( !G_cb_counter ) fl_alert("FAILED 'ON' TEST\n select(path) cb wasn't triggered!"); tree->deselect("ROOT"); // leave deselected //// "default" TEST (should be same as 'on' // open/close: Make sure these methods don't trigger cb G_cb_counter = 0; tree->close(root); if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST: close(item) cb wasn't triggered!"); G_cb_counter = 0; tree->open(root); if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST: open(item) cb wasn't triggered!"); G_cb_counter = 0; tree->open_toggle(root); if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST: open_toggle(item) cb wasn't triggered!"); G_cb_counter = 0; tree->open("ROOT"); if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST: open(path) cb wasn't triggered!"); G_cb_counter = 0; tree->close("ROOT"); if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST: close(path) cb wasn't triggered!"); tree->open(root,0); // leave root open // select/deselect: Make sure these methods don't trigger cb G_cb_counter = 0; tree->select(root); if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST\n select(item) cb wasn't triggered!"); G_cb_counter = 0; tree->deselect(root); if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST\n deselect(item) cb wasn't triggered!"); G_cb_counter = 0; tree->select_toggle(root); if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST\n select_toggle(item) cb wasn't triggered!"); G_cb_counter = 0; tree->deselect("ROOT"); if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST\n deselect(path) cb wasn't triggered!"); G_cb_counter = 0; tree->select("ROOT"); if ( !G_cb_counter ) fl_alert("FAILED 'DEFAULT' TEST\n select(path) cb wasn't triggered!"); tree->deselect("ROOT"); // leave deselected fl_alert("TEST COMPLETED\n If you didn't see any error dialogs, test PASSED."); } Fl_Choice *all_font_choice=(Fl_Choice *)0; static void cb_all_font_choice(Fl_Choice*, void*) { // Find first item in tree Fl_Tree_Item *item = tree->first(); if ( !item ) return; // Get first item's font. Fl_Font val = (Fl_Font)all_font_choice->value(); // Get font value // Do selected items int count = 0; for ( item=tree->first(); item; item = tree->next(item) ) { if ( item->is_selected() ) { item->labelfont(val); count++; } } // No items selected? Do all.. if ( ! count ) { for ( item=tree->first(); item; item = tree->next(item) ) { item->labelfont(val); } } tree->redraw(); } Fl_Menu_Item menu_all_font_choice[] = { {"Helvetica", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Helvetica Bold", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Helvetica Italic", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Helvetica Bold Italic", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Courier", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Courier Bold", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Courier Italic", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Courier Bold Italic", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Times", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Times Bold", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Times Italic", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Times Bold Italic", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Symbol", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Screen", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Screen bold", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Zapf Dingbats", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {0,0,0,0,0,0,0,0,0} }; Fl_Value_Slider *labelsize_slider=(Fl_Value_Slider *)0; static void cb_labelsize_slider(Fl_Value_Slider*, void*) { int size = (int)labelsize_slider->value(); // DO SELECTED ITEMS int count = 0; Fl_Tree_Item *item; for ( item=tree->first(); item; item = tree->next(item) ) { if ( item->is_selected() ) { item->labelsize(size); count++; } } // NO ITEMS SELECTED? DO ALL if ( ! count ) { for ( item=tree->first(); item; item = tree->next(item) ) { item->labelsize(size); } } tree->redraw(); } Fl_Button *all_labelfgcolor_button=(Fl_Button *)0; static void cb_all_labelfgcolor_button(Fl_Button*, void*) { // Find first item in tree Fl_Tree_Item *item = tree->first(); if ( !item ) return; // Get first item's color Fl_Color val = EditColor(item->labelfgcolor()); // Get color of first item in tree all_labelfgcolor_button->color(val); // update modified color to button // Do selected items int count = 0; for ( item=tree->first(); item; item = tree->next(item) ) { if ( item->is_selected() ) { item->labelfgcolor(val); count++; } } // No items selected? Do all.. if ( ! count ) { for ( item=tree->first(); item; item = tree->next(item) ) { item->labelfgcolor(val); } } tree->redraw(); } Fl_Button *all_labelbgcolor_button=(Fl_Button *)0; static void cb_all_labelbgcolor_button(Fl_Button*, void*) { // Find first item in tree Fl_Tree_Item *item = tree->first(); if ( !item ) return; // Get first item's color Fl_Color val = EditColor(item->labelbgcolor()); // Get color of first item in tree all_labelbgcolor_button->color(val); // update modified color to button // Do selected items int count = 0; for ( item=tree->first(); item; item = tree->next(item) ) { if ( item->is_selected() ) { item->labelbgcolor(val); count++; } } // No items selected? Do all.. if ( ! count ) { for ( item=tree->first(); item; item = tree->next(item) ) { item->labelbgcolor(val); } } tree->redraw(); } Fl_Value_Slider *connectorwidth_slider=(Fl_Value_Slider *)0; static void cb_connectorwidth_slider(Fl_Value_Slider*, void*) { tree->connectorwidth((int)connectorwidth_slider->value()); } Fl_Light_Button *deactivate_toggle=(Fl_Light_Button *)0; static void cb_deactivate_toggle(Fl_Light_Button*, void*) { int onoff = deactivate_toggle->value() ? 0 : 1; Fl_Tree_Item *item; int count = 0; for ( item=tree->first(); item; item = tree->next(item) ) { if ( item->is_selected() ) { item->activate(onoff); ++count; } } if ( count == 0 ) { for ( item=tree->first(); item; item = tree->next(item) ) { item->activate(onoff); } } tree->redraw(); } Fl_Light_Button *bold_toggle=(Fl_Light_Button *)0; static void cb_bold_toggle(Fl_Light_Button*, void*) { int face = bold_toggle->value() ? FL_HELVETICA_BOLD : FL_HELVETICA; // DO SELECTED ITEMS int count = 0; Fl_Tree_Item *item; for ( item=tree->first(); item; item = tree->next(item) ) { if ( item->is_selected() ) { item->labelfont(face); count++; } } // NO ITEMS SELECTED? DO ALL if ( ! count ) { for ( item=tree->first(); item; item = tree->next(item) ) { item->labelfont(face); } } tree->redraw(); } Fl_Button *showselected_button=(Fl_Button *)0; static void cb_showselected_button(Fl_Button*, void*) { fprintf(stderr, "--- SELECTED ITEMS\n"); for ( Fl_Tree_Item *item = tree->first_selected_item(); item; item = tree->next_selected_item(item) ) { fprintf(stderr, "\t%s\n", item->label() ? item->label() : "???"); }; } Fl_Button *clearselected_button=(Fl_Button *)0; static void cb_clearselected_button(Fl_Button*, void*) { Fl_Tree_Item *item=tree->first(); while (item) { if ( item->is_selected() ) { if ( tree->remove(item) == -1 ) break; item = tree->first(); } else { item = item->next(); } } tree->redraw(); } Fl_Button *selectall_button=(Fl_Button *)0; static void cb_selectall_button(Fl_Button*, void*) { tree->select_all(0); tree->redraw(); } Fl_Button *deselectall_button=(Fl_Button *)0; static void cb_deselectall_button(Fl_Button*, void*) { tree->deselect_all(0); tree->redraw(); } Fl_Light_Button *bbbselect_toggle=(Fl_Light_Button *)0; static void cb_bbbselect_toggle(Fl_Light_Button*, void*) { // Toggle select of just the Bbb item (not children) Fl_Tree_Item *bbb = tree->find_item("/Bbb"); if ( !bbb) { fl_alert("FAIL: Couldn't find item '/Bbb'???"); return; } int onoff = bbbselect_toggle->value(); if ( onoff ) tree->select(bbb); // select /Bbb else tree->deselect(bbb); // deselect /Bbb; } Fl_Light_Button *bbbselect2_toggle=(Fl_Light_Button *)0; static void cb_bbbselect2_toggle(Fl_Light_Button*, void*) { // Toggle select of just the Bbb item and its immediate children Fl_Tree_Item *bbb = tree->find_item("/Bbb"); if ( !bbb) { fl_alert("FAIL: Couldn't find item '/Bbb'???"); return; } int onoff = bbbselect2_toggle->value(); if ( onoff ) tree->select_all(bbb); // select /Bbb and its children else tree->deselect_all(bbb); // deselect /Bbb and its children; } Fl_Light_Button *bbbchild02select_toggle=(Fl_Light_Button *)0; static void cb_bbbchild02select_toggle(Fl_Light_Button*, void*) { // Toggle select of just the /Bbb/child-02 item const char *pathname = "/Bbb/child-02"; int onoff = bbbchild02select_toggle->value(); int err = 0; if ( onoff ) err = tree->select(pathname); else err = tree->deselect(pathname); if ( err == -1 ) { fl_alert("FAIL: Couldn't find item '%s'",pathname); return; }; } Fl_Light_Button *rootselect_toggle=(Fl_Light_Button *)0; static void cb_rootselect_toggle(Fl_Light_Button*, void*) { // Toggle select of ROOT item and its children Fl_Tree_Item *item = tree->find_item("/ROOT"); if ( !item) { fl_alert("FAIL: Couldn't find item '/ROOT'???"); return; } int onoff = rootselect_toggle->value(); if ( onoff ) tree->select(item); // select /ROOT and its children else tree->deselect(item); // deselect /ROOT and its children; } Fl_Light_Button *rootselect2_toggle=(Fl_Light_Button *)0; static void cb_rootselect2_toggle(Fl_Light_Button*, void*) { // Toggle select of ROOT item and its children Fl_Tree_Item *item = tree->find_item("/ROOT"); if ( !item) { fl_alert("FAIL: Couldn't find item '/ROOT'???"); return; } int onoff = rootselect2_toggle->value(); if ( onoff ) tree->select_all(item); // select /ROOT and its children else tree->deselect_all(item); // deselect /ROOT and its children; } Fl_Button *item_labelfgcolor_button=(Fl_Button *)0; static void cb_item_labelfgcolor_button(Fl_Button*, void*) { Fl_Color val = EditColor(tree->item_labelfgcolor()); // Let user edit the color tree->item_labelfgcolor(val); // apply modified color to tree item_labelfgcolor_button->color(val); // update modified color to button; } Fl_Button *item_labelbgcolor_button=(Fl_Button *)0; static void cb_item_labelbgcolor_button(Fl_Button*, void*) { Fl_Color val = EditColor(tree->item_labelbgcolor()); // Let user edit the color tree->item_labelbgcolor(val); // apply modified color to tree item_labelbgcolor_button->color(val); // update modified color to button; } Fl_Choice *item_font_choice=(Fl_Choice *)0; static void cb_item_font_choice(Fl_Choice*, void*) { Fl_Font val = (Fl_Font)item_font_choice->value(); // get chooser's current font value tree->item_labelfont(val); // change font in tree; } Fl_Menu_Item menu_item_font_choice[] = { {"Helvetica", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Helvetica Bold", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Helvetica Italic", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Helvetica Bold Italic", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Courier", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Courier Bold", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Courier Italic", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Courier Bold Italic", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Times", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Times Bold", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Times Italic", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Times Bold Italic", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Symbol", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Screen", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Screen bold", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {"Zapf Dingbats", 0, 0, 0, 0, FL_NORMAL_LABEL, 0, 12, 0}, {0,0,0,0,0,0,0,0,0} }; Fl_Value_Slider *item_labelsize_slider=(Fl_Value_Slider *)0; static void cb_item_labelsize_slider(Fl_Value_Slider*, void*) { tree->item_labelsize((int)item_labelsize_slider->value()); } Fl_Box *resizer_box=(Fl_Box *)0; int main(int argc, char **argv) { { window = new Fl_Double_Window(1015, 445, "tree"); { tree = new Fl_Tree(15, 22, 280, 411, "Tree"); tree->tooltip("Test tree"); tree->box(FL_DOWN_BOX); tree->color((Fl_Color)55); tree->selection_color(FL_SELECTION_COLOR); tree->labeltype(FL_NORMAL_LABEL); tree->labelfont(0); tree->labelsize(14); tree->labelcolor(FL_FOREGROUND_COLOR); tree->callback((Fl_Callback*)cb_tree, (void*)(1234)); tree->align(Fl_Align(FL_ALIGN_TOP)); tree->when(FL_WHEN_RELEASE); tree->end(); } // Fl_Tree* tree { Fl_Group* o = new Fl_Group(300, 5, 705, 427); { Fl_Box* o = new Fl_Box(311, 23, 335, 263, "Tree Globals"); o->tooltip("These controls only affect the selected items. If no items are selected, all \ existing items in tree are modified."); o->box(FL_DOWN_BOX); o->color(FL_DARK1); o->labelsize(12); o->align(Fl_Align(FL_ALIGN_TOP)); } // Fl_Box* o { Fl_Value_Slider* o = margintop_slider = new Fl_Value_Slider(486, 31, 140, 16, "margintop()"); margintop_slider->tooltip("Changes the top margin for the tree widget"); margintop_slider->type(1); margintop_slider->labelsize(12); margintop_slider->textsize(12); margintop_slider->callback((Fl_Callback*)cb_margintop_slider, (void*)(tree)); margintop_slider->align(Fl_Align(FL_ALIGN_LEFT)); o->value(tree->margintop()); o->range(0.0, 100.0); o->step(1.0); o->color(46); o->selection_color(FL_RED); } // Fl_Value_Slider* margintop_slider { Fl_Value_Slider* o = marginleft_slider = new Fl_Value_Slider(486, 51, 140, 16, "marginleft()"); marginleft_slider->tooltip("Changes the left margin for the tree widget"); marginleft_slider->type(1); marginleft_slider->labelsize(12); marginleft_slider->textsize(12); marginleft_slider->callback((Fl_Callback*)cb_marginleft_slider, (void*)(tree)); marginleft_slider->align(Fl_Align(FL_ALIGN_LEFT)); o->value(tree->marginleft()); o->range(0.0, 100.0); o->step(1.0); o->color(46); o->selection_color(FL_RED); } // Fl_Value_Slider* marginleft_slider { Fl_Value_Slider* o = openchild_marginbottom_slider = new Fl_Value_Slider(486, 71, 140, 16, "openchild_marginbottom()"); openchild_marginbottom_slider->tooltip("Changes the vertical space below an open child tree"); openchild_marginbottom_slider->type(1); openchild_marginbottom_slider->labelsize(12); openchild_marginbottom_slider->textsize(12); openchild_marginbottom_slider->callback((Fl_Callback*)cb_openchild_marginbottom_slider, (void*)(tree)); openchild_marginbottom_slider->align(Fl_Align(FL_ALIGN_LEFT)); o->value(tree->openchild_marginbottom()); o->range(0.0, 100.0); o->step(1.0); o->color(46); o->selection_color(FL_RED); } // Fl_Value_Slider* openchild_marginbottom_slider { collapseicons_chooser = new Fl_Choice(486, 96, 140, 21, "Collapse icons"); collapseicons_chooser->tooltip("Tests Fl_Tree::openicon() and Fl_Tree::closeicon()"); collapseicons_chooser->down_box(FL_BORDER_BOX); collapseicons_chooser->labelsize(12); collapseicons_chooser->textsize(11); collapseicons_chooser->callback((Fl_Callback*)cb_collapseicons_chooser); collapseicons_chooser->menu(menu_collapseicons_chooser); } // Fl_Choice* collapseicons_chooser { connectorstyle_chooser = new Fl_Choice(486, 120, 140, 21, "Line style"); connectorstyle_chooser->tooltip("Tests connectorstyle() bit flags"); connectorstyle_chooser->down_box(FL_BORDER_BOX); connectorstyle_chooser->labelsize(12); connectorstyle_chooser->textsize(11); connectorstyle_chooser->callback((Fl_Callback*)cb_connectorstyle_chooser); connectorstyle_chooser->menu(menu_connectorstyle_chooser); switch (tree->connectorstyle()) { case FL_TREE_CONNECTOR_NONE: connectorstyle_chooser->value(0); break; case FL_TREE_CONNECTOR_DOTTED: connectorstyle_chooser->value(1); break; case FL_TREE_CONNECTOR_SOLID: connectorstyle_chooser->value(2); break; } } // Fl_Choice* connectorstyle_chooser { selectmode_chooser = new Fl_Choice(486, 144, 140, 21, "Selection Mode"); selectmode_chooser->tooltip("Sets how Fl_Tree handles mouse selection of tree items"); selectmode_chooser->down_box(FL_BORDER_BOX); selectmode_chooser->labelsize(12); selectmode_chooser->textsize(11); selectmode_chooser->callback((Fl_Callback*)cb_selectmode_chooser); selectmode_chooser->menu(menu_selectmode_chooser); selectmode_chooser->value(1); cb_selectmode_chooser(selectmode_chooser, (void*)0); } // Fl_Choice* selectmode_chooser { whenmode_chooser = new Fl_Choice(486, 168, 140, 21, "When"); whenmode_chooser->tooltip("Sets when() the tree\'s callback is invoked"); whenmode_chooser->down_box(FL_BORDER_BOX); whenmode_chooser->labelsize(12); whenmode_chooser->textsize(11); whenmode_chooser->callback((Fl_Callback*)cb_whenmode_chooser); whenmode_chooser->menu(menu_whenmode_chooser); whenmode_chooser->value(1); cb_whenmode_chooser(whenmode_chooser, (void*)0); } // Fl_Choice* whenmode_chooser { usericon_radio = new Fl_Check_Button(486, 194, 20, 16, "Enable user icons?"); usericon_radio->tooltip("Tests Fl_Tree_Item::usericon()"); usericon_radio->down_box(FL_DOWN_BOX); usericon_radio->labelsize(12); usericon_radio->callback((Fl_Callback*)cb_usericon_radio, (void*)(tree)); usericon_radio->align(Fl_Align(FL_ALIGN_LEFT_TOP)); usericon_radio->value(1); } // Fl_Check_Button* usericon_radio { showroot_radio = new Fl_Check_Button(486, 211, 20, 16, "Show root?"); showroot_radio->tooltip("Tests tree->showroot();"); showroot_radio->down_box(FL_DOWN_BOX); showroot_radio->labelsize(12); showroot_radio->callback((Fl_Callback*)cb_showroot_radio, (void*)(tree)); showroot_radio->align(Fl_Align(FL_ALIGN_LEFT_TOP)); int onoff = tree->showroot(); showroot_radio->value(onoff); } // Fl_Check_Button* showroot_radio { visiblefocus_checkbox = new Fl_Check_Button(486, 228, 20, 16, "Visible focus?"); visiblefocus_checkbox->tooltip("Toggles the tree\'s visible_focus() box"); visiblefocus_checkbox->down_box(FL_DOWN_BOX); visiblefocus_checkbox->labelsize(12); visiblefocus_checkbox->callback((Fl_Callback*)cb_visiblefocus_checkbox, (void*)(tree)); visiblefocus_checkbox->align(Fl_Align(FL_ALIGN_LEFT_TOP)); int onoff = tree->visible_focus(); visiblefocus_checkbox->value(onoff); } // Fl_Check_Button* visiblefocus_checkbox { Fl_Button* o = selection_color_button = new Fl_Button(486, 251, 16, 16, "Selection Color"); selection_color_button->tooltip("Changes the tree widget\'s selection color. Tests Fl_Tree::selection_color()"); selection_color_button->box(FL_DOWN_BOX); selection_color_button->labelsize(12); selection_color_button->callback((Fl_Callback*)cb_selection_color_button); selection_color_button->align(Fl_Align(FL_ALIGN_LEFT_TOP)); o->color(tree->selection_color()); } // Fl_Button* selection_color_button { Fl_Box* o = new Fl_Box(311, 312, 335, 120, "Test Operations"); o->tooltip("These controls only affect the defaults for new items that are created. These\ test the Fl_Tree_Prefs methods."); o->box(FL_DOWN_BOX); o->color(FL_DARK1); o->labelsize(12); o->align(Fl_Align(FL_ALIGN_TOP)); } // Fl_Box* o { showitem_box = new Fl_Box(331, 335, 70, 82, "show_item()\n"); showitem_box->box(FL_DOWN_BOX); showitem_box->labelsize(11); showitem_box->align(Fl_Align(FL_ALIGN_TOP)); } // Fl_Box* showitem_box { Fl_Button* o = new Fl_Button(346, 344, 40, 17, "Show"); o->tooltip("Tests show_item() with no position specified.\nMakes the selected item visibl\ e IF it is off-screen.\nNo change made if it is not off-screen."); o->labelsize(11); o->callback((Fl_Callback*)cb_Show); } // Fl_Button* o { Fl_Button* o = new Fl_Button(346, 361, 40, 16, "Top"); o->tooltip("Test show_item_top().\nScrolls selected item to the top of the display\n(only\ works if scrollbar showing)\nTo use:\n1) open \'500 items\'\n2) select item 0\ 010\n3) Hit Top/Mid/Bot"); o->labelsize(11); o->callback((Fl_Callback*)cb_Top); } // Fl_Button* o { Fl_Button* o = new Fl_Button(346, 377, 40, 16, "Mid"); o->tooltip("Tests show_item_middle().\nScrolls the selected item to the middle of the dis\ play\nTo use:\n 1) open \'500 items\'\n 2) select \'item 0010\'\n 3) Hit To\ p/Mid/Bot"); o->labelsize(11); o->callback((Fl_Callback*)cb_Mid); } // Fl_Button* o { Fl_Button* o = new Fl_Button(346, 393, 40, 16, "Bot"); o->tooltip("Tests show_item_bottom().\nScrolls the selected item to the bottom of the dis\ play\nTo use:\n 1) open \'500 items\'\n 2) select \'item 0010\'\n 3) Hit To\ p/Mid/Bot"); o->labelsize(11); o->callback((Fl_Callback*)cb_Bot); } // Fl_Button* o { loaddb_button = new Fl_Button(431, 338, 95, 16, "Load Database..."); loaddb_button->tooltip("Load the contents of an Fl_Preferences database into the tree view"); loaddb_button->labelsize(9); loaddb_button->callback((Fl_Callback*)cb_loaddb_button); } // Fl_Button* loaddb_button { insertabove_button = new Fl_Button(431, 358, 95, 16, "Insert Above"); insertabove_button->tooltip("Inserts three items above the selected items"); insertabove_button->labelsize(9); insertabove_button->callback((Fl_Callback*)cb_insertabove_button); } // Fl_Button* insertabove_button { rebuildtree_button = new Fl_Button(431, 378, 95, 16, "Rebuild Tree"); rebuildtree_button->tooltip("Rebuilds the tree with defaults"); rebuildtree_button->labelsize(9); rebuildtree_button->callback((Fl_Callback*)cb_rebuildtree_button); } // Fl_Button* rebuildtree_button { showpathname_button = new Fl_Button(431, 398, 95, 16, "Show Pathname"); showpathname_button->tooltip("Show the pathname for the selected item. Tests the Fl_Tree::item_pathname() m\ ethod."); showpathname_button->labelsize(9); showpathname_button->callback((Fl_Callback*)cb_showpathname_button); } // Fl_Button* showpathname_button { clearall_button = new Fl_Button(531, 338, 95, 16, "Clear All"); clearall_button->tooltip("Clears all items\nTests Fl_Tree::clear()"); clearall_button->labelsize(9); clearall_button->callback((Fl_Callback*)cb_clearall_button); } // Fl_Button* clearall_button { testcallbackflag_button = new Fl_Button(531, 358, 95, 16, "Test Callback Flag"); testcallbackflag_button->tooltip("Test the \'docallback\' argument can disable callbacks."); testcallbackflag_button->labelsize(9); testcallbackflag_button->callback((Fl_Callback*)cb_testcallbackflag_button); } // Fl_Button* testcallbackflag_button { Fl_Box* o = new Fl_Box(661, 23, 335, 263, "Selected Items"); o->tooltip("These controls only affect the selected items. If no items are selected, all \ existing items in tree are modified."); o->box(FL_DOWN_BOX); o->color(FL_DARK1); o->labelsize(12); o->align(Fl_Align(FL_ALIGN_TOP)); } // Fl_Box* o { Fl_Choice* o = all_font_choice = new Fl_Choice(828, 31, 140, 21, "Label Font"); all_font_choice->tooltip("Changes the font for the selected items\'s labels. If none selected, all are \ changed. Tests Fl_Tree_Item::labelfont();"); all_font_choice->down_box(FL_BORDER_BOX); all_font_choice->labelsize(12); all_font_choice->textsize(11); all_font_choice->callback((Fl_Callback*)cb_all_font_choice); all_font_choice->menu(menu_all_font_choice); o->value((int)tree->item_labelfont()); // get tree's current font, assign to chooser } // Fl_Choice* all_font_choice { Fl_Value_Slider* o = labelsize_slider = new Fl_Value_Slider(828, 55, 140, 16, "Label Size"); labelsize_slider->tooltip("Changes the font size of the selected items\'s labels. If none selected, all \ are changed. Tests Fl_Tree_Item::labelsize();"); labelsize_slider->type(1); labelsize_slider->labelsize(12); labelsize_slider->textsize(12); labelsize_slider->callback((Fl_Callback*)cb_labelsize_slider, (void*)(tree)); labelsize_slider->align(Fl_Align(FL_ALIGN_LEFT)); o->value(tree->item_labelsize()); o->range(5.0, 200.0); o->step(1.0); o->color(46); o->selection_color(FL_RED); } // Fl_Value_Slider* labelsize_slider { Fl_Button* o = all_labelfgcolor_button = new Fl_Button(828, 81, 16, 16, "Label FG Color"); all_labelfgcolor_button->tooltip("Changes the label fg color for the selected items. If none selected, all are \ changed. Tests Fl_Tree_Item::labelfgcolor();"); all_labelfgcolor_button->box(FL_DOWN_BOX); all_labelfgcolor_button->labelsize(12); all_labelfgcolor_button->callback((Fl_Callback*)cb_all_labelfgcolor_button); all_labelfgcolor_button->align(Fl_Align(FL_ALIGN_LEFT_TOP)); o->color(tree->item_labelfgcolor()); } // Fl_Button* all_labelfgcolor_button { Fl_Button* o = all_labelbgcolor_button = new Fl_Button(828, 99, 16, 16, "Label BG Color"); all_labelbgcolor_button->tooltip("Changes the label bg color for the selected items. If none selected, all are \ changed. Tests Fl_Tree_Item::labelbgcolor();"); all_labelbgcolor_button->box(FL_DOWN_BOX); all_labelbgcolor_button->labelsize(12); all_labelbgcolor_button->callback((Fl_Callback*)cb_all_labelbgcolor_button); all_labelbgcolor_button->align(Fl_Align(FL_ALIGN_LEFT_TOP)); o->color(tree->item_labelbgcolor()); } // Fl_Button* all_labelbgcolor_button { Fl_Value_Slider* o = connectorwidth_slider = new Fl_Value_Slider(828, 126, 140, 16, "Connector Width"); connectorwidth_slider->tooltip("Tests Fl_Tree::connectorwidth()"); connectorwidth_slider->type(1); connectorwidth_slider->labelsize(12); connectorwidth_slider->textsize(12); connectorwidth_slider->callback((Fl_Callback*)cb_connectorwidth_slider, (void*)(tree)); connectorwidth_slider->align(Fl_Align(FL_ALIGN_LEFT)); o->value(tree->connectorwidth()); o->range(1.0, 100.0); o->step(1.0); o->color(46); o->selection_color(FL_RED); } // Fl_Value_Slider* connectorwidth_slider { deactivate_toggle = new Fl_Light_Button(734, 154, 95, 16, " Deactivate"); deactivate_toggle->tooltip("Toggle the deactivation state of the selected items.\nIf none are selected, a\ ll are set."); deactivate_toggle->selection_color((Fl_Color)1); deactivate_toggle->labelsize(9); deactivate_toggle->callback((Fl_Callback*)cb_deactivate_toggle); } // Fl_Light_Button* deactivate_toggle { bold_toggle = new Fl_Light_Button(734, 174, 95, 16, " Bold Font"); bold_toggle->tooltip("Toggles bold font for selected items\nIf nothing selected, all are changed"); bold_toggle->selection_color((Fl_Color)1); bold_toggle->labelsize(9); bold_toggle->callback((Fl_Callback*)cb_bold_toggle); } // Fl_Light_Button* bold_toggle { showselected_button = new Fl_Button(829, 154, 95, 16, "Show Selected"); showselected_button->tooltip("Clears the selected items"); showselected_button->labelsize(9); showselected_button->callback((Fl_Callback*)cb_showselected_button); } // Fl_Button* showselected_button { clearselected_button = new Fl_Button(829, 174, 95, 16, "Remove Selected"); clearselected_button->tooltip("Removes the selected items"); clearselected_button->labelsize(9); clearselected_button->callback((Fl_Callback*)cb_clearselected_button); } // Fl_Button* clearselected_button { selectall_button = new Fl_Button(689, 201, 95, 16, "Select All"); selectall_button->tooltip("Selects all items in the tree"); selectall_button->labelsize(9); selectall_button->callback((Fl_Callback*)cb_selectall_button); } // Fl_Button* selectall_button { deselectall_button = new Fl_Button(689, 221, 95, 16, "Deselect All"); deselectall_button->tooltip("Deselects all items in the tree"); deselectall_button->labelsize(9); deselectall_button->callback((Fl_Callback*)cb_deselectall_button); } // Fl_Button* deselectall_button { bbbselect_toggle = new Fl_Light_Button(784, 201, 95, 16, " Select Bbb"); bbbselect_toggle->tooltip("Toggle selection of just the /Bbb item\n(Not children)"); bbbselect_toggle->selection_color((Fl_Color)1); bbbselect_toggle->labelsize(9); bbbselect_toggle->callback((Fl_Callback*)cb_bbbselect_toggle); } // Fl_Light_Button* bbbselect_toggle { bbbselect2_toggle = new Fl_Light_Button(784, 221, 95, 16, " Select Bbb+"); bbbselect2_toggle->tooltip("Toggle selection of the /Bbb item and its children"); bbbselect2_toggle->selection_color((Fl_Color)1); bbbselect2_toggle->labelsize(9); bbbselect2_toggle->callback((Fl_Callback*)cb_bbbselect2_toggle); } // Fl_Light_Button* bbbselect2_toggle { bbbchild02select_toggle = new Fl_Light_Button(784, 241, 95, 16, " Toggle child-02"); bbbchild02select_toggle->tooltip("Toggle the single item \"/Bbb/child-02\" using the item\'s \"pathname\"."); bbbchild02select_toggle->selection_color((Fl_Color)1); bbbchild02select_toggle->labelsize(9); bbbchild02select_toggle->callback((Fl_Callback*)cb_bbbchild02select_toggle); } // Fl_Light_Button* bbbchild02select_toggle { rootselect_toggle = new Fl_Light_Button(879, 201, 95, 16, "Select ROOT"); rootselect_toggle->tooltip("Toggle selection of the ROOT item"); rootselect_toggle->selection_color((Fl_Color)1); rootselect_toggle->labelsize(9); rootselect_toggle->callback((Fl_Callback*)cb_rootselect_toggle); } // Fl_Light_Button* rootselect_toggle { rootselect2_toggle = new Fl_Light_Button(879, 221, 95, 16, "Select ROOT+"); rootselect2_toggle->tooltip("Toggle selection of the ROOT item and all children"); rootselect2_toggle->selection_color((Fl_Color)1); rootselect2_toggle->labelsize(9); rootselect2_toggle->callback((Fl_Callback*)cb_rootselect2_toggle); } // Fl_Light_Button* rootselect2_toggle { Fl_Box* o = new Fl_Box(661, 312, 335, 120, "New Item Defaults"); o->tooltip("These controls only affect the defaults for new items that are created. These\ test the Fl_Tree_Prefs methods."); o->box(FL_DOWN_BOX); o->color(FL_DARK1); o->labelsize(12); o->align(Fl_Align(FL_ALIGN_TOP)); } // Fl_Box* o { Fl_Button* o = item_labelfgcolor_button = new Fl_Button(828, 327, 16, 16, "item_labelfgcolor"); item_labelfgcolor_button->tooltip("Sets the *default* label foreground color for new items created. Does NOT aff\ ect existing items."); item_labelfgcolor_button->box(FL_DOWN_BOX); item_labelfgcolor_button->labelsize(12); item_labelfgcolor_button->callback((Fl_Callback*)cb_item_labelfgcolor_button); item_labelfgcolor_button->align(Fl_Align(FL_ALIGN_LEFT_TOP)); o->color(tree->item_labelfgcolor()); } // Fl_Button* item_labelfgcolor_button { item_labelbgcolor_button = new Fl_Button(828, 345, 16, 16, "item_labelbgcolor"); item_labelbgcolor_button->tooltip("Sets the *default* label background color for new items created. Does NOT aff\ ect existing items."); item_labelbgcolor_button->box(FL_DOWN_BOX); item_labelbgcolor_button->labelsize(12); item_labelbgcolor_button->callback((Fl_Callback*)cb_item_labelbgcolor_button); item_labelbgcolor_button->align(Fl_Align(FL_ALIGN_LEFT_TOP)); item_labelbgcolor_button->color(tree->item_labelbgcolor()); } // Fl_Button* item_labelbgcolor_button { Fl_Choice* o = item_font_choice = new Fl_Choice(828, 371, 140, 21, "Item label font"); item_font_choice->tooltip("Sets the default font used for new items created. Does NOT affect existing it\ ems."); item_font_choice->down_box(FL_BORDER_BOX); item_font_choice->labelsize(12); item_font_choice->textsize(12); item_font_choice->callback((Fl_Callback*)cb_item_font_choice); item_font_choice->menu(menu_item_font_choice); o->value((int)tree->item_labelfont()); // get tree's current font, assign to chooser } // Fl_Choice* item_font_choice { Fl_Value_Slider* o = item_labelsize_slider = new Fl_Value_Slider(828, 396, 140, 16, "item_labelsize"); item_labelsize_slider->tooltip("Sets the default labelsize used for new items. Does NOT affect existing items\ ."); item_labelsize_slider->type(1); item_labelsize_slider->labelsize(12); item_labelsize_slider->textsize(12); item_labelsize_slider->callback((Fl_Callback*)cb_item_labelsize_slider, (void*)(tree)); item_labelsize_slider->align(Fl_Align(FL_ALIGN_LEFT)); o->value((int)tree->item_labelsize()); o->range(1.0, 50.0); o->step(1.0); o->color(46); o->selection_color(FL_RED); } // Fl_Value_Slider* item_labelsize_slider o->resizable(0); o->end(); } // Fl_Group* o { resizer_box = new Fl_Box(0, 263, 15, 14); } // Fl_Box* resizer_box window->end(); } // Fl_Double_Window* window // Initialize Tree tree->root_label("ROOT"); RebuildTree(); /*tree->show_self();*/ // FLTK stuff //Fl::scheme("gtk+"); window->resizable(tree); window->size_range(window->w(), window->h(), 0, 0); if ( tree->when() == FL_WHEN_CHANGED ) whenmode_chooser->value(0); else if ( tree->when() == FL_WHEN_RELEASE ) whenmode_chooser->value(1); else if ( tree->when() == FL_WHEN_NEVER ) whenmode_chooser->value(2); window->show(argc, argv); return Fl::run(); }