fltk/examples/tree-custom-draw-items.cxx
Greg Ercolano 88cea3c82d o Added Fl_Tree::item_draw_callback(), letting one define a custom draw function for Fl_Tree_Item's.
o Added examples/tree-custom-draw-items.cxx to demonstrate its use.
o Fixed small doc error for recent Fl_Tree::get_selected_items()



git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@10018 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
2013-11-10 04:33:44 +00:00

101 lines
2.9 KiB
C++

//
// "$Id$"
//
// Demonstrate Fl_Tree custom item draw callback. - erco 11/09/2013
//
// Copyright 2013 Greg Ercolano.
// Copyright 1998-2013 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 <stdio.h>
#include <math.h> // sin(3)
#include <FL/Fl.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Tree.H>
#if FLTK_ABI_VERSION >= 10303
static void draw_item(Fl_Tree_Item *item, void *data) {
Fl_Tree *tree = (Fl_Tree*)data;
int X=item->label_x(), Y=item->label_y(),
W=item->label_w(), H=item->label_h();
// Draw the background
fl_color(item->is_selected() ? tree->selection_color() : item->labelbgcolor());
fl_rectf(X,Y,W,H);
// Draw some red/grn/blu boxes
int x = X + 5;
fl_color(FL_RED); fl_rectf(x, Y+2, 10, H-4); x += 10;
fl_color(FL_GREEN); fl_rectf(x, Y+2, 10, H-4); x += 10;
fl_color(FL_BLUE); fl_rectf(x, Y+2, 10, H-4); x += 10;
x += 5;
// Draw text
fl_font(item->labelfont(), item->labelsize());
fl_color(item->labelfgcolor());
char s[80];
sprintf(s, "Custom: '%s'", item->label()?item->label():"---");
fl_draw(s, x+tree->labelmarginleft(),Y,W,H, FL_ALIGN_LEFT);
int fw=0,fh=0;
fl_measure(s,fw,fh);
x += fw + 10;
// Draw a red sine wave past the text to end of xywh area
fl_color(FL_RED);
for ( float a=0.0; x<(X+W); x++,a+=.1) {
int y = Y + sin(a) * ((H-2)/2) + (H/2);
fl_point(x,y);
}
}
int main(int argc, char *argv[]) {
Fl::scheme("gtk+");
Fl_Double_Window *win = new Fl_Double_Window(250, 400, "Simple Tree");
win->begin();
{
// Create the tree
Fl_Tree *tree = new Fl_Tree(0, 0, win->w(), win->h());
tree->showroot(0); // don't show root of tree
tree->item_draw_callback(draw_item, (void*)tree); // setup a callback for the tree
// Add some items
tree->add("Flintstones/Fred");
tree->add("Flintstones/Wilma");
tree->add("Flintstones/Pebbles");
tree->add("Simpsons/Homer");
tree->add("Simpsons/Marge");
tree->add("Simpsons/Bart");
tree->add("Simpsons/Lisa");
tree->add("Superjail/Warden");
tree->add("Superjail/Jared");
tree->add("Superjail/Alice");
tree->add("Superjail/Jailbot");
// Start with some items closed
tree->close("Simpsons");
tree->close("Superjail");
}
win->end();
win->resizable(win);
win->show(argc, argv);
return(Fl::run());
}
#else
#include <FL/Fl.H>
#include <FL/fl_message.H>
int main(int, char**) {
fl_alert("This demo is dependent on an ABI feature.\n"
"FLTK_ABI_VERSION must be set to 10303 (or higher) in Enumerations.H");
return 1;
}
#endif
//
// End of "$Id$".
//