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
This commit is contained in:
parent
4f24b4cc65
commit
5979afb5bf
@ -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) \
|
||||
|
||||
186
examples/howto-browser-with-icons.cxx
Normal file
186
examples/howto-browser-with-icons.cxx
Normal file
@ -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$".
|
||||
//
|
||||
Loading…
Reference in New Issue
Block a user