Guys,
I'm a fltk/c newbie, so I'll really appreciate any suggestions of improvement
with the handle() function.
I am trying to add keyboard up/down navigation to my simple Tree.
#include <FL/Fl.H>
#include <stdio.h>
#include <FL/Fl.H>
#include <FL/Fl_Pixmap.H>
#include <FL/Fl_Group.H>
#include <FL/Fl_Tree.H>
#include <FL/fl_ask.H>
#include <FL/Fl_Double_Window.H>
#define FL_Down 0xff54 ///< The down arrow key.
#define FL_Up 0xff52 ///< The up arrow key.
Fl_Double_Window *window=(Fl_Double_Window *)0;
class MyTree: public Fl_Tree
{
public:
MyTree(int width, int height, int xlim, int ylim);
int handle (int event);
~MyTree(){}
};
MyTree::MyTree(int width, int height, int xlim, int ylim)
:Fl_Tree(width, height, xlim, ylim)
{
}
int MyTree::handle(int e)
{
int ret = Fl::event_key();
if (e== 12 && ret == FL_Down)
{
Fl_Tree_Item *item = item_clicked();
if ( item ) {
if (item != last())
{
item = item->next();
item_clicked(item);
deselect_all(); // deselect all items
select(item); // select this one
redraw();
set_changed();
do_callback((Fl_Widget*)this, user_data());
}
}
return 1;
}
else if (e==12 & ret == FL_Up)
{
Fl_Tree_Item *item = item_clicked();
if ( item ) {
if (!item->is_root())
{
item = item->prev();
item_clicked(item);
deselect_all(); // deselect all items
select(item); // select this one
redraw();
set_changed();
do_callback((Fl_Widget*)this, user_data());
}
}
return 1;
}
return Fl_Tree::handle(e);
}
MyTree *tree=(MyTree *)0;
void RebuildTree() { // REBUILD THE TREE TO MAKE CURRENT "DEFAULT" PREFS TAKE
EFFECT
tree->clear();
tree->add("Aaa");
tree->add("Bbb");
tree->add("Ccc");
tree->add("Ddd");
tree->add("Bbb/child-01");
tree->add("Bbb/child-01/111");
tree->add("Bbb/child-01/222");
tree->add("Bbb/child-01/333");
tree->redraw();
}
static void cb_tree(MyTree*, void*) {
Fl_Tree_Item *item = tree->item_clicked();
fprintf(stderr, "TREE CALLBACK: label='%s' userdata=%ld\n",
item->label(),
(long)tree->user_data());
}
int main(int argc, char **argv) {
window = new Fl_Double_Window(580, 695, "test-Fl_Tree");
tree = new MyTree(15, 15, 550, 390);
tree->callback((Fl_Callback*)cb_tree, (void*)(1234));
tree->end();
// Initialize Tree
tree->root_label("ROOT");
RebuildTree();
window->resizable(window);
window->size_range(window->w(), window->h(), 0, 0);
window->show(argc, argv);
return Fl::run();
}
_______________________________________________
fltk mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk