// // Demonstrate creating an Fl_Browser with icons - Greg Ercolano 10/07/09 (STR#1739) // // Shows how one can add icons to items in a browser. // // Copyright 2009,2013 Greg Ercolano. // Copyright 1998-2010 by Bill Spitzak and others. // // This library is free software. Distribution and use rights are outlined in // the file "COPYING" which should have been included with this file. If this // file is missing or damaged, see the license at: // // https://www.fltk.org/COPYING.php // // Please see the following page on how to report bugs and issues: // // https://www.fltk.org/bugs.php // #include #include #include #include #include #include static const char *big[] = { // XPM "50 34 4 1", " c #000000", "o c #ff9900", "@ c #ffffff", "# c None", "##################################################", "### ############################## ####", "### ooooo ########################### ooooo ####", "### oo oo ######################### oo oo ####", "### oo oo ####################### oo oo ####", "### oo oo ##################### oo oo ####", "### oo oo ################### oo oo ####", "### oo oo oo oo ####", "### oo oo ooooooooooooooo oo oo ####", "### oo ooooooooooooooooooooo oo ####", "### oo ooooooooooooooooooooooooooo ooo ####", "#### oo ooooooo ooooooooooooo ooooooo oo #####", "#### oo oooooooo ooooooooooooo oooooooo oo #####", "##### oo oooooooo ooooooooooooo oooooooo oo ######", "##### o ooooooooooooooooooooooooooooooo o ######", "###### ooooooooooooooooooooooooooooooooooo #######", "##### ooooooooo ooooooooo ooooooooo ######", "##### oooooooo @@@ ooooooo @@@ oooooooo ######", "##### oooooooo @@@@@ ooooooo @@@@@ oooooooo ######", "##### oooooooo @@@@@ ooooooo @@@@@ oooooooo ######", "##### oooooooo @@@ ooooooo @@@ oooooooo ######", "##### ooooooooo ooooooooo ooooooooo ######", "###### oooooooooooooo oooooooooooooo #######", "###### oooooooo@@@@@@@ @@@@@@@oooooooo #######", "###### ooooooo@@@@@@@@@ @@@@@@@@@ooooooo #######", "####### ooooo@@@@@@@@@@@ @@@@@@@@@@@ooooo ########", "######### oo@@@@@@@@@@@@ @@@@@@@@@@@@oo ##########", "########## o@@@@@@ @@@@@ @@@@@ @@@@@@o ###########", "########### @@@@@@@ @ @@@@@@@ ############", "############ @@@@@@@@@@@@@@@@@@@@@ #############", "############## @@@@@@@@@@@@@@@@@ ###############", "################ @@@@@@@@@ #################", "#################### #####################", "##################################################", }; static const char *med[] = { // XPM "14 14 2 1", "# c #000000", " c #ffffff", "##############", "##############", "## ##", "## ## ## ##", "## ## ## ##", "## #### ##", "## ## ##", "## ## ##", "## #### ##", "## ## ## ##", "## ## ## ##", "## ##", "##############", "##############", }; static const char *sml[] = { // XPM "9 11 5 1", ". c None", "@ c #000000", "+ c #808080", "r c #802020", "# c #ff8080", ".........", ".........", "@+.......", "@@@+.....", "@@r@@+...", "@@##r@@+.", "@@####r@@", "@@##r@@+.", "@@r@@+...", "@@@+.....", "@+.......", }; // Create a custom browser // // You don't *have* to derive a class just to control icons in a browser, // but in final apps it's something you'd do to keep the implementation clean. // // All it really comes down to is calling browser->icon() to define icons // for the items you want. // class MyBrowser : public Fl_Browser { Fl_Image *big_icon; Fl_Image *med_icon; Fl_Image *sml_icon; public: MyBrowser(int X,int Y,int W,int H,const char *L=0) : Fl_Browser(X,Y,W,H,L) { // Create icons (these could also be pngs, jpegs..) big_icon = new Fl_Pixmap(big); med_icon = new Fl_Pixmap(med); sml_icon = new Fl_Pixmap(sml); // Normal browser initialization stuff textfont(FL_COURIER); textsize(14); type(FL_MULTI_BROWSER); add("One"); add("Two"); add("Three"); add("Four"); add("Five"); add("Six"); add("Seven"); } static void Choice_CB(Fl_Widget*w, void *d) { MyBrowser *mb = (MyBrowser*)d; Fl_Choice *ch = (Fl_Choice*)w; // See which icon the user picked Fl_Image *i = 0; if ( strcmp(ch->text(), "None" ) == 0 ) { i = 0; } else if ( strcmp(ch->text(), "Small" ) == 0 ) { i = mb->sml_icon; } else if ( strcmp(ch->text(), "Medium") == 0 ) { i = mb->med_icon; } else if ( strcmp(ch->text(), "Large" ) == 0 ) { i = mb->big_icon; } // Change the icon of three browser items to what the user picked // This is all you have to do to change a browser item's icon. // The browser will automatically resize the items if need be. mb->icon(3,i); mb->icon(4,i); mb->icon(5,i); } }; int main() { Fl_Double_Window *w = new Fl_Double_Window(400,300); // Create a browser MyBrowser *b = new MyBrowser(10,40,w->w()-20,w->h()-50); // Create a chooser to let the user change the icons Fl_Choice *choice = new Fl_Choice(60,10,140,25,"Icon:"); choice->add("None"); choice->add("Small"); choice->add("Medium"); choice->add("Large"); choice->callback(MyBrowser::Choice_CB, (void*)b); choice->take_focus(); choice->value(1); choice->do_callback(); w->end(); w->show(); return(Fl::run()); }