1 //
2 // "$Id$"
3 //
4 // Demonstrate creating an Fl_Browser with icons - Greg Ercolano 10/07/09 (STR#1739)
5 //
6 // Shows how one can add icons to items in a browser.
7 //
8 // Copyright 2009,2013 Greg Ercolano.
9 // Copyright 1998-2010 by Bill Spitzak and others.
10 //
11 // This library is free software. Distribution and use rights are outlined in
12 // the file "COPYING" which should have been included with this file. If this
13 // file is missing or damaged, see the license at:
14 //
15 // http://www.fltk.org/COPYING.php
16 //
17 // Please report all bugs and problems on the following page:
18 //
19 // http://www.fltk.org/str.php
20 //
21 #include <FL/Fl.H>
22 #include <FL/Fl_Double_Window.H>
23 #include <FL/Fl_Browser.H>
24 #include <FL/Fl_Choice.H>
25 #include <FL/Fl_Image.H>
26 #include <FL/Fl_Pixmap.H>
27
28 static const char *big[] = { // XPM
29 "50 34 4 1",
30 " c #000000",
31 "o c #ff9900",
32 "@ c #ffffff",
33 "# c None",
34 "##################################################",
35 "### ############################## ####",
36 "### ooooo ########################### ooooo ####",
37 "### oo oo ######################### oo oo ####",
38 "### oo oo ####################### oo oo ####",
39 "### oo oo ##################### oo oo ####",
40 "### oo oo ################### oo oo ####",
41 "### oo oo oo oo ####",
42 "### oo oo ooooooooooooooo oo oo ####",
43 "### oo ooooooooooooooooooooo oo ####",
44 "### oo ooooooooooooooooooooooooooo ooo ####",
45 "#### oo ooooooo ooooooooooooo ooooooo oo #####",
46 "#### oo oooooooo ooooooooooooo oooooooo oo #####",
47 "##### oo oooooooo ooooooooooooo oooooooo oo ######",
48 "##### o ooooooooooooooooooooooooooooooo o ######",
49 "###### ooooooooooooooooooooooooooooooooooo #######",
50 "##### ooooooooo ooooooooo ooooooooo ######",
51 "##### oooooooo @@@ ooooooo @@@ oooooooo ######",
52 "##### oooooooo @@@@@ ooooooo @@@@@ oooooooo ######",
53 "##### oooooooo @@@@@ ooooooo @@@@@ oooooooo ######",
54 "##### oooooooo @@@ ooooooo @@@ oooooooo ######",
55 "##### ooooooooo ooooooooo ooooooooo ######",
56 "###### oooooooooooooo oooooooooooooo #######",
57 "###### oooooooo@@@@@@@ @@@@@@@oooooooo #######",
58 "###### ooooooo@@@@@@@@@ @@@@@@@@@ooooooo #######",
59 "####### ooooo@@@@@@@@@@@ @@@@@@@@@@@ooooo ########",
60 "######### oo@@@@@@@@@@@@ @@@@@@@@@@@@oo ##########",
61 "########## o@@@@@@ @@@@@ @@@@@ @@@@@@o ###########",
62 "########### @@@@@@@ @ @@@@@@@ ############",
63 "############ @@@@@@@@@@@@@@@@@@@@@ #############",
64 "############## @@@@@@@@@@@@@@@@@ ###############",
65 "################ @@@@@@@@@ #################",
66 "#################### #####################",
67 "##################################################",
68 };
69
70
71 static const char *med[] = { // XPM
72 "14 14 2 1",
73 "# c #000000",
74 " c #ffffff",
75 "##############",
76 "##############",
77 "## ##",
78 "## ## ## ##",
79 "## ## ## ##",
80 "## #### ##",
81 "## ## ##",
82 "## ## ##",
83 "## #### ##",
84 "## ## ## ##",
85 "## ## ## ##",
86 "## ##",
87 "##############",
88 "##############",
89 };
90
91 static const char *sml[] = { // XPM
92 "9 11 5 1",
93 ". c None",
94 "@ c #000000",
95 "+ c #808080",
96 "r c #802020",
97 "# c #ff8080",
98 ".........",
99 ".........",
100 "@+.......",
101 "@@@+.....",
102 "@@r@@+...",
103 "@@##r@@+.",
104 "@@####r@@",
105 "@@##r@@+.",
106 "@@r@@+...",
107 "@@@+.....",
108 "@+.......",
109 };
110
111 // Create a custom browser
112 //
113 // You don't *have* to derive a class just to control icons in a browser,
114 // but in final apps it's something you'd do to keep the implementation clean.
115 //
116 // All it really comes down to is calling browser->icon() to define icons
117 // for the items you want.
118 //
119 class MyBrowser : public Fl_Browser {
120 Fl_Image *big_icon;
121 Fl_Image *med_icon;
122 Fl_Image *sml_icon;
123
124 public:
MyBrowser(int X,int Y,int W,int H,const char * L=0)125 MyBrowser(int X,int Y,int W,int H,const char *L=0) : Fl_Browser(X,Y,W,H,L) {
126
127 // Create icons (these could also be pngs, jpegs..)
128 big_icon = new Fl_Pixmap(big);
129 med_icon = new Fl_Pixmap(med);
130 sml_icon = new Fl_Pixmap(sml);
131
132 // Normal browser initialization stuff
133 textfont(FL_COURIER);
134 textsize(14);
135 type(FL_MULTI_BROWSER);
136 add("One");
137 add("Two");
138 add("Three");
139 add("Four");
140 add("Five");
141 add("Six");
142 add("Seven");
143 }
Choice_CB(Fl_Widget * w,void * d)144 static void Choice_CB(Fl_Widget*w, void *d) {
145 MyBrowser *mb = (MyBrowser*)d;
146 Fl_Choice *ch = (Fl_Choice*)w;
147
148 // See which icon the user picked
149 Fl_Image *i = 0;
150 if ( strcmp(ch->text(), "None" ) == 0 ) { i = 0; }
151 else if ( strcmp(ch->text(), "Small" ) == 0 ) { i = mb->sml_icon; }
152 else if ( strcmp(ch->text(), "Medium") == 0 ) { i = mb->med_icon; }
153 else if ( strcmp(ch->text(), "Large" ) == 0 ) { i = mb->big_icon; }
154
155 // Change the icon of three browser items to what the user picked
156 // This is all you have to do to change a browser item's icon.
157 // The browser will automatically resize the items if need be.
158 mb->icon(3,i);
159 mb->icon(4,i);
160 mb->icon(5,i);
161 }
162 };
main()163 int main() {
164 Fl_Double_Window *w = new Fl_Double_Window(400,300);
165
166 // Create a browser
167 MyBrowser *b = new MyBrowser(10,40,w->w()-20,w->h()-50);
168
169 // Create a chooser to let the user change the icons
170 Fl_Choice *choice = new Fl_Choice(60,10,140,25,"Icon:");
171 choice->add("None");
172 choice->add("Small");
173 choice->add("Medium");
174 choice->add("Large");
175 choice->callback(MyBrowser::Choice_CB, (void*)b);
176 choice->take_focus();
177 choice->value(1); choice->do_callback();
178
179 w->end();
180 w->show();
181 return(Fl::run());
182 }
183
184 //
185 // End of "$Id$".
186 //
187