FLTK 1.3.8

Fl_Tree.H
Go to the documentation of this file.
1//
2// "$Id$"
3//
4
5#ifndef FL_TREE_H
6#define FL_TREE_H
7
8#include <FL/Fl.H>
9#include <FL/Fl_Group.H>
10#include <FL/Fl_Scrollbar.H>
11#include <FL/fl_draw.H>
12
13#include <FL/Fl_Tree_Item.H>
14#include <FL/Fl_Tree_Prefs.H>
15
17// FL/Fl_Tree.H
19//
20// Fl_Tree -- This file is part of the Fl_Tree widget for FLTK
21// Copyright (C) 2009-2010 by Greg Ercolano.
22//
23// This library is free software. Distribution and use rights are outlined in
24// the file "COPYING" which should have been included with this file. If this
25// file is missing or damaged, see the license at:
26//
27// http://www.fltk.org/COPYING.php
28//
29// Please report all bugs and problems on the following page:
30//
31// http://www.fltk.org/str.php
32//
33
38
307
311 enum Fl_Tree_Reason {
312 FL_TREE_REASON_NONE=0,
313 FL_TREE_REASON_SELECTED,
314 FL_TREE_REASON_DESELECTED,
315#if FLTK_ABI_VERSION >= 10301
316 FL_TREE_REASON_RESELECTED,
317#endif /*FLTK_ABI_VERSION*/
318 FL_TREE_REASON_OPENED,
319 FL_TREE_REASON_CLOSED,
320 FL_TREE_REASON_DRAGGED
321};
322
323 class FL_EXPORT Fl_Tree : public Fl_Group {
324 friend class Fl_Tree_Item;
325 Fl_Tree_Item *_root; // can be null!
326 Fl_Tree_Item *_item_focus; // item that has focus box
327 Fl_Tree_Item *_callback_item; // item invoked during callback (can be NULL)
328 Fl_Tree_Reason _callback_reason; // reason for the callback
329 Fl_Tree_Prefs _prefs; // all the tree's settings
330 int _scrollbar_size; // size of scrollbar trough
331#if FLTK_ABI_VERSION >= 10301
332 // NEW:
333 Fl_Tree_Item *_lastselect; // used to extend selections
334#else /*FLTK_ABI_VERSION*/
335 // OLD: static data inside handle() method
336#endif /*FLTK_ABI_VERSION*/
337 void fix_scrollbar_order();
338
339 protected:
340 Fl_Scrollbar *_vscroll;
341#if FLTK_ABI_VERSION >= 10303
342 Fl_Scrollbar *_hscroll;
343 int _tox,_toy,_tow,_toh;
344 int _tix,_tiy,_tiw,_tih;
345
347 int _tree_w;
349 int _tree_h;
350#endif
351 void item_clicked(Fl_Tree_Item* val);
352 void do_callback_for_item(Fl_Tree_Item* item, Fl_Tree_Reason reason);
353#if FLTK_ABI_VERSION >= 10303
354// next_visible_item() and extend_selection() moved to 'public' in ABI 1.3.3
355// undocmented draw_tree() dropped -- draw() does all the work now
356#else
357 Fl_Tree_Item *next_visible_item(Fl_Tree_Item *start, int dir);
358 void extend_selection(Fl_Tree_Item *from, Fl_Tree_Item *to);
359 int draw_tree();
360#endif
361
362 public:
363 Fl_Tree(int X, int Y, int W, int H, const char *L=0);
364 ~Fl_Tree();
365 int handle(int e);
366 void draw();
367 void show_self();
368 void resize(int,int,int,int);
369
371 // root methods
373 void root_label(const char *new_label);
374 Fl_Tree_Item* root();
375 void root(Fl_Tree_Item *newitem);
376 const Fl_Tree_Prefs& prefs() const { return _prefs; }
377
379 // Item creation/removal methods
381#if FLTK_ABI_VERSION >= 10303
382 Fl_Tree_Item *add(const char *path, Fl_Tree_Item *newitem=0);
383#else
384 Fl_Tree_Item *add(const char *path);
385 Fl_Tree_Item *add(const char *path, Fl_Tree_Item *newitem);
386#endif
387 Fl_Tree_Item* add(Fl_Tree_Item *parent_item, const char *name);
388 Fl_Tree_Item *insert_above(Fl_Tree_Item *above, const char *name);
389 Fl_Tree_Item* insert(Fl_Tree_Item *item, const char *name, int pos);
390 int remove(Fl_Tree_Item *item);
391 void clear();
392 void clear_children(Fl_Tree_Item *item);
393
395 // Item lookup methods
397 Fl_Tree_Item *find_item(const char *path);
398 const Fl_Tree_Item *find_item(const char *path) const;
399 int item_pathname(char *pathname, int pathnamelen, const Fl_Tree_Item *item) const;
400#if FLTK_ABI_VERSION >= 10303
401 const Fl_Tree_Item* find_clicked(int yonly=0) const;
402 Fl_Tree_Item* find_clicked(int yonly=0);
403#else
404 const Fl_Tree_Item *find_clicked() const;
405 Fl_Tree_Item *find_clicked();
406#endif
407 Fl_Tree_Item *item_clicked();
408 Fl_Tree_Item *first();
409 Fl_Tree_Item *first_visible(); // deprecated in ABI 10303
410 Fl_Tree_Item *first_visible_item();
411 Fl_Tree_Item *next(Fl_Tree_Item *item=0);
412 Fl_Tree_Item *prev(Fl_Tree_Item *item=0);
413 Fl_Tree_Item *last();
414 Fl_Tree_Item *last_visible(); // deprecated in ABI 10303
415 Fl_Tree_Item *last_visible_item();
416#if FLTK_ABI_VERSION >= 10303
417 Fl_Tree_Item *next_visible_item(Fl_Tree_Item *start, int dir); // made public in 1.3.3 ABI
418#endif
419 Fl_Tree_Item *first_selected_item();
420 Fl_Tree_Item *last_selected_item();
421 Fl_Tree_Item *next_item(Fl_Tree_Item *item, int dir=FL_Down, bool visible=false);
422#if FLTK_ABI_VERSION >= 10303
423 Fl_Tree_Item *next_selected_item(Fl_Tree_Item *item=0, int dir=FL_Down);
424 int get_selected_items(Fl_Tree_Item_Array &ret_items);
425#else
426 Fl_Tree_Item *next_selected_item(Fl_Tree_Item *item=0);
427 Fl_Tree_Item *next_selected_item(Fl_Tree_Item *item, int dir);
428#endif
429
431 // Item open/close methods
433 int open(Fl_Tree_Item *item, int docallback=1);
434 int open(const char *path, int docallback=1);
435 void open_toggle(Fl_Tree_Item *item, int docallback=1);
436 int close(Fl_Tree_Item *item, int docallback=1);
437 int close(const char *path, int docallback=1);
438 int is_open(Fl_Tree_Item *item) const;
439 int is_open(const char *path) const;
440 int is_close(Fl_Tree_Item *item) const;
441 int is_close(const char *path) const;
442
444 // Item selection methods
446 int select(Fl_Tree_Item *item, int docallback=1);
447 int select(const char *path, int docallback=1);
448 void select_toggle(Fl_Tree_Item *item, int docallback=1);
449 int deselect(Fl_Tree_Item *item, int docallback=1);
450 int deselect(const char *path, int docallback=1);
451 int deselect_all(Fl_Tree_Item *item=0, int docallback=1);
452 int select_only(Fl_Tree_Item *selitem, int docallback=1);
453 int select_all(Fl_Tree_Item *item=0, int docallback=1);
454 int extend_selection_dir(Fl_Tree_Item *from,
455 Fl_Tree_Item *to,
456 int dir,
457 int val,
458 bool visible);
459#if FLTK_ABI_VERSION >= 10303
460 int extend_selection(Fl_Tree_Item *from,
461 Fl_Tree_Item *to,
462 int val=1,
463 bool visible=false);
464#else
465 private:
466 // Adding overload if not at least one overload breaks ABI, so avoid
467 // by keeping private until we can break ABI. ref: http://www.ros.org/reps/rep-0009.html
468 int extend_selection__(Fl_Tree_Item *from,
469 Fl_Tree_Item *to,
470 int val,
471 bool visible);
472 public:
473#endif
474 void set_item_focus(Fl_Tree_Item *item);
475 Fl_Tree_Item *get_item_focus() const;
476 int is_selected(Fl_Tree_Item *item) const;
477 int is_selected(const char *path);
478
480 // Item attribute related methods
482 Fl_Font item_labelfont() const;
483 void item_labelfont(Fl_Font val);
484 Fl_Fontsize item_labelsize() const;
485 void item_labelsize(Fl_Fontsize val);
486 Fl_Color item_labelfgcolor(void) const;
487 void item_labelfgcolor(Fl_Color val);
488 Fl_Color item_labelbgcolor(void) const;
489 void item_labelbgcolor(Fl_Color val);
490 Fl_Color connectorcolor() const;
491 void connectorcolor(Fl_Color val);
492 int marginleft() const;
493 void marginleft(int val);
494 int margintop() const;
495 void margintop(int val);
496#if FLTK_ABI_VERSION >= 10301
497 int marginbottom() const;
498 void marginbottom(int val);
499#endif /*FLTK_ABI_VERSION*/
500 int linespacing() const;
501 void linespacing(int val);
502 int openchild_marginbottom() const;
503 void openchild_marginbottom(int val);
504 int usericonmarginleft() const;
505 void usericonmarginleft(int val);
506 int labelmarginleft() const;
507 void labelmarginleft(int val);
508#if FLTK_ABI_VERSION >= 10301
509 int widgetmarginleft() const;
510 void widgetmarginleft(int val);
511#endif /*FLTK_ABI_VERSION*/
512 int connectorwidth() const;
513 void connectorwidth(int val);
514 Fl_Image* usericon() const;
515 void usericon(Fl_Image *val);
516 Fl_Image* openicon() const;
517 void openicon(Fl_Image *val);
518 Fl_Image* closeicon() const;
519 void closeicon(Fl_Image *val);
520 int showcollapse() const;
521 void showcollapse(int val);
522 int showroot() const;
523 void showroot(int val);
524 Fl_Tree_Connector connectorstyle() const;
525 void connectorstyle(Fl_Tree_Connector val);
526 Fl_Tree_Sort sortorder() const;
527 void sortorder(Fl_Tree_Sort val);
528 Fl_Boxtype selectbox() const;
529 void selectbox(Fl_Boxtype val);
530 Fl_Tree_Select selectmode() const;
531 void selectmode(Fl_Tree_Select val);
532#if FLTK_ABI_VERSION >= 10301
533 Fl_Tree_Item_Reselect_Mode item_reselect_mode() const;
534 void item_reselect_mode(Fl_Tree_Item_Reselect_Mode mode);
535 Fl_Tree_Item_Draw_Mode item_draw_mode() const;
536 void item_draw_mode(Fl_Tree_Item_Draw_Mode mode);
537 void item_draw_mode(int mode);
538#endif
539#if FLTK_ABI_VERSION >= 10303
540 void calc_dimensions();
541 void calc_tree();
542#endif
543 void recalc_tree();
544 int displayed(Fl_Tree_Item *item);
545 void show_item(Fl_Tree_Item *item, int yoff);
546 void show_item(Fl_Tree_Item *item);
547 void show_item_top(Fl_Tree_Item *item);
548 void show_item_middle(Fl_Tree_Item *item);
549 void show_item_bottom(Fl_Tree_Item *item);
550 void display(Fl_Tree_Item *item);
551 int vposition() const;
552 void vposition(int pos);
553 int hposition() const;
554 void hposition(int pos);
555
556 int is_scrollbar(Fl_Widget *w);
557 int scrollbar_size() const;
558 void scrollbar_size(int size);
559 int is_vscroll_visible() const;
560 int is_hscroll_visible() const;
561
563 // callback related
565 void callback_item(Fl_Tree_Item* item);
566 Fl_Tree_Item* callback_item();
567 void callback_reason(Fl_Tree_Reason reason);
568 Fl_Tree_Reason callback_reason() const;
569
571 void load(class Fl_Preferences&);
572};
573
574#endif /*FL_TREE_H*/
575
576//
577// End of "$Id$".
578//
Fl_Font
int Fl_Font
A font number is an index into the internal font table.
Definition: Enumerations.H:875
FL_Down
#define FL_Down
The down arrow key.
Definition: Enumerations.H:481
Fl_Color
unsigned int Fl_Color
An FLTK color value; see also Colors
Definition: Enumerations.H:932
Fl_Fontsize
int Fl_Fontsize
Size of a font in pixels.
Definition: Enumerations.H:904
Fl_Boxtype
Fl_Boxtype
Definition: Enumerations.H:601
Fl.H
Fl static class.
Fl_Tree_Reason
Fl_Tree_Reason
The reason the callback was invoked.
Definition: Fl_Tree.H:311
FL_TREE_REASON_RESELECTED
@ FL_TREE_REASON_RESELECTED
an item was re-selected (e.g. double-clicked)
Definition: Fl_Tree.H:316
FL_TREE_REASON_CLOSED
@ FL_TREE_REASON_CLOSED
an item was closed
Definition: Fl_Tree.H:319
FL_TREE_REASON_NONE
@ FL_TREE_REASON_NONE
unknown reason
Definition: Fl_Tree.H:312
FL_TREE_REASON_OPENED
@ FL_TREE_REASON_OPENED
an item was opened
Definition: Fl_Tree.H:318
FL_TREE_REASON_SELECTED
@ FL_TREE_REASON_SELECTED
an item was selected
Definition: Fl_Tree.H:313
FL_TREE_REASON_DRAGGED
@ FL_TREE_REASON_DRAGGED
an item was dragged into a new place
Definition: Fl_Tree.H:320
FL_TREE_REASON_DESELECTED
@ FL_TREE_REASON_DESELECTED
an item was de-selected
Definition: Fl_Tree.H:314
Fl_Tree_Item.H
This file contains the definitions for Fl_Tree_Item.
Fl_Tree_Prefs.H
This file contains the definitions for Fl_Tree's preferences.
Fl_Tree_Connector
Fl_Tree_Connector
Defines the style of connection lines between items.
Definition: Fl_Tree_Prefs.H:58
Fl_Tree_Sort
Fl_Tree_Sort
Sort order options for items added to the tree.
Definition: Fl_Tree_Prefs.H:49
Fl_Tree_Item_Reselect_Mode
Fl_Tree_Item_Reselect_Mode
Defines the ways an item can be (re) selected via item_reselect_mode().
Definition: Fl_Tree_Prefs.H:81
Fl_Tree_Item_Draw_Mode
Fl_Tree_Item_Draw_Mode
Bit flags that control how item's labels and widget()s are drawn in the tree via item_draw_mode().
Definition: Fl_Tree_Prefs.H:90
Fl_Tree_Select
Fl_Tree_Select
Tree selection style.
Definition: Fl_Tree_Prefs.H:67
Fl_Group
The Fl_Group class is the FLTK container widget.
Definition: Fl_Group.H:41
Fl_Group::add
void add(Fl_Widget &)
The widget is removed from its current group (if any) and then added to the end of this group.
Definition: Fl_Group.cxx:491
Fl_Group::handle
int handle(int)
Handles the specified event.
Definition: Fl_Group.cxx:147
Fl_Group::insert
void insert(Fl_Widget &, int i)
The widget is removed from its current group (if any) and then inserted into this group.
Definition: Fl_Group.cxx:458
Fl_Group::draw
void draw()
Draws the widget.
Definition: Fl_Group.cxx:738
Fl_Group::resize
void resize(int, int, int, int)
Resizes the Fl_Group widget and all of its children.
Definition: Fl_Group.cxx:634
Fl_Group::clear
void clear()
Deletes all child widgets from memory recursively.
Definition: Fl_Group.cxx:383
Fl_Group::remove
void remove(int index)
Removes the widget at index from the group but does not delete it.
Definition: Fl_Group.cxx:503
Fl_Image
Base class for image caching and drawing.
Definition: Fl_Image.H:55
Fl_Preferences
Fl_Preferences provides methods to store user settings between application starts.
Definition: Fl_Preferences.H:60
Fl_Scrollbar
The Fl_Scrollbar widget displays a slider with arrow buttons at the ends of the scrollbar.
Definition: Fl_Scrollbar.H:43
Fl_Tree_Item_Array
Manages an array of Fl_Tree_Item pointers.
Definition: Fl_Tree_Item_Array.H:47
Fl_Tree_Item
Tree widget item.
Definition: Fl_Tree_Item.H:67
Fl_Tree_Prefs
Tree widget's preferences.
Definition: Fl_Tree_Prefs.H:111
Fl_Tree
Tree widget.
Definition: Fl_Tree.H:323
Fl_Tree::_toh
int _toh
Tree widget outer xywh dimension: outside scrollbars, inside widget border.
Definition: Fl_Tree.H:343
Fl_Tree::_tree_h
int _tree_h
the calculated height of the entire tree hierarchy. See calc_tree()
Definition: Fl_Tree.H:349
Fl_Tree::_tree_w
int _tree_w
the calculated width of the entire tree hierarchy. See calc_tree()
Definition: Fl_Tree.H:347
Fl_Tree::_hscroll
Fl_Scrollbar * _hscroll
Horizontal scrollbar.
Definition: Fl_Tree.H:342
Fl_Tree::_tih
int _tih
Tree widget inner xywh dimension: inside borders + scrollbars.
Definition: Fl_Tree.H:344
Fl_Tree::_vscroll
Fl_Scrollbar * _vscroll
Vertical scrollbar.
Definition: Fl_Tree.H:340
Fl_Widget
Fl_Widget is the base class for all widgets in FLTK.
Definition: Fl_Widget.H:101
fl_draw.H
utility header to pull drawing functions together
- Copyright © 1998-2021 by Bill Spitzak and others.