Author: greg.ercolano
Date: 2013-03-23 11:40:53 -0700 (Sat, 23 Mar 2013)
New Revision: 9845
Log:
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.



Added:
   branches/branch-1.3/examples/howto-browser-with-icons.cxx
Modified:
   branches/branch-1.3/examples/Makefile

Modified: branches/branch-1.3/examples/Makefile
===================================================================
--- branches/branch-1.3/examples/Makefile       2013-03-23 09:25:27 UTC (rev 
9844)
+++ branches/branch-1.3/examples/Makefile       2013-03-23 18:40:53 UTC (rev 
9845)
@@ -6,6 +6,7 @@
 
 # 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) \

Added: branches/branch-1.3/examples/howto-browser-with-icons.cxx
===================================================================
--- branches/branch-1.3/examples/howto-browser-with-icons.cxx                   
        (rev 0)
+++ branches/branch-1.3/examples/howto-browser-with-icons.cxx   2013-03-23 
18:40:53 UTC (rev 9845)
@@ -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$".
+//


Property changes on: branches/branch-1.3/examples/howto-browser-with-icons.cxx
___________________________________________________________________
Added: svn:keywords
   + author date id revision
Added: svn:eol-style
   + native

_______________________________________________
fltk-commit mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk-commit

Reply via email to