Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Adding an example to demonstrate how to create an Fl_Browser with ico…
…ns 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
- Loading branch information
Showing
2 changed files
with
187 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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$". | ||
// |