From 5979afb5bf8bd7fc2f730c31106570b8d5bc3e14 Mon Sep 17 00:00:00 2001 From: Greg Ercolano Date: Sat, 23 Mar 2013 18:40:53 +0000 Subject: 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 --- examples/Makefile | 1 + examples/howto-browser-with-icons.cxx | 186 ++++++++++++++++++++++++++++++++++ 2 files changed, 187 insertions(+) create mode 100644 examples/howto-browser-with-icons.cxx diff --git a/examples/Makefile b/examples/Makefile index cc2e4ded9..60003f56a 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -6,6 +6,7 @@ SHELL = /bin/sh # Executables ALL = howto-add_fd-and-popen$(EXEEXT) \ + howto-browser-with-icons$(EXEEXT) \ howto-drag-and-drop$(EXEEXT) \ howto-parse-args$(EXEEXT) \ howto-text-over-image-button$(EXEEXT) \ 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 +#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()); +} + +// +// End of "$Id$". +// -- cgit v1.2.3