summaryrefslogtreecommitdiff
path: root/examples/howto-browser-with-icons.cxx
diff options
context:
space:
mode:
authorGreg Ercolano <erco@seriss.com>2013-03-23 18:40:53 +0000
committerGreg Ercolano <erco@seriss.com>2013-03-23 18:40:53 +0000
commit5979afb5bf8bd7fc2f730c31106570b8d5bc3e14 (patch)
treebbd8d93c7c0a8bb6808dd53c2539a88d8efb3744 /examples/howto-browser-with-icons.cxx
parent4f24b4cc652ff64cb3fefe5477ab1324f467943e (diff)
Adding an example to demonstrate how to create an Fl_Browser with icons on the items.
Based on an example I'd added to STR#1739 to demo someone's patch. git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@9845 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'examples/howto-browser-with-icons.cxx')
-rw-r--r--examples/howto-browser-with-icons.cxx186
1 files changed, 186 insertions, 0 deletions
diff --git a/examples/howto-browser-with-icons.cxx b/examples/howto-browser-with-icons.cxx
new file mode 100644
index 000000000..d21d53f49
--- /dev/null
+++ b/examples/howto-browser-with-icons.cxx
@@ -0,0 +1,186 @@
+//
+// "$Id$"
+//
+// 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:
+//
+// http://www.fltk.org/COPYING.php
+//
+// Please report all bugs and problems on the following page:
+//
+// http://www.fltk.org/str.php
+//
+#include <FL/Fl.H>
+#include <FL/Fl_Double_Window.H>
+#include <FL/Fl_Browser.H>
+#include <FL/Fl_Choice.H>
+#include <FL/Fl_Image.H>
+#include <FL/Fl_Pixmap.H>
+
+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());
+}
+
+//
+// End of "$Id$".
+//