Prima::Outlines - tree view widgets
|
Prima::Outlines - tree view widgets
The module provides a set of widget classes, designed to display a tree-like
hierarchy of items. Prima::OutlineViewer
presents a generic class that
contains basic functionality and defines the interface for the descendants, which are
Prima::StringOutline
, Prima::Outline
, and Prima::DirectoryOutline
.
my $outline = Prima::StringOutline-> create(
items => [
[ 'Simple item' ],
[[ 'Embedded item ']],
[[ 'More embedded items', [ '#1', '#2' ]]],
],
);
$outline-> expand_all;
Presents a generic interface for browsing the tree-like lists.
A node in a linked list represents each item.
The format of node is predefined, and is an anonymous array
with the following definitions of indexes:
-
Item id with non-defined format. The simplest implementation,
Prima::StringOutline
,
treats the scalar as a text string. The more complex classes store
references to arrays or hashes here. See items
article of a concrete class
for the format of a node record.
-
Reference to a child node.
undef
if there is none.
-
A boolean flag, which selects if the node shown as expanded, e.g.
all its immediate children are visible.
-
Width of an item in pixels.
The indexes above 3 should not be used, because eventual changes to the
implementation of the class may use these. It should be enough item 0 to store
any value.
To support a custom format of node, it is sufficient to overload the following
notifications: DrawItem
, MeasureItem
, Stringify
. Since DrawItem
is
called for every item, a gross method draw_items
can be overloaded instead.
See also the Prima::StringOutline manpage and the Prima::Outline manpage.
The class employs two addressing methods, index-wise and item-wise. The index-wise
counts only the visible ( non-expanded ) items, and is represented by an integer index.
The item-wise addressing cannot be expressed by an integer index, and the full
node structure is used as a reference. It is important to use a valid reference here,
since the class does not always perform the check if the node belongs to internal node list due to
the speed reasons.
Prima::OutlineViewer
is a descendant of Prima::GroupScroller
and Prima::MouseScroller
,
so some properties and methods are not described here. See the Prima::IntUtils manpage for these.
The class is not usable directly.
- autoHeight INTEGER
-
If set to 1, changes
itemHeight
automatically according to the widget font height.
If 0, does not influence anything. When itemHeight
is set explicitly,
changes value to 0.
Default value: 1
- dragable BOOLEAN
-
If 1, allows the items to be dragged interactively by pressing control key
together with left mouse button. If 0, item dragging is disabled.
Default value: 1
- focusedItem INTEGER
-
Selects the focused item index. If -1, no item is focused.
It is mostly a run-time property, however, it can be set
during the widget creation stage given that the item list is
accessible on this stage as well.
- indent INTEGER
-
Width in pixels of the indent between item levels.
Default value: 12
- itemHeight INTEGER
-
Selects the height of the items in pixels. Since the outline classes do
not support items with different vertical dimensions, changes to this property
affect all items.
Default value: default font height
- items ARRAY
-
Provides access to the items as an anonymous array. The format of items is
described in the opening article ( see the Prima::OutlineViewer manpage ).
Default value: []
- offset INTEGER
-
Horizontal offset of an item list in pixels.
- topItem INTEGER
-
Selects the first item drawn.
- showItemHint BOOLEAN
-
If 1, allows activation of a hint label when the mouse pointer is hovered above
an item that does not fit horizontally into the widget inferiors. If 0,
the hint is never shown.
See also: makehint.
Default value: 1
- adjust INDEX, EXPAND
-
Performs expansion ( 1 ) or collapse ( 0 ) of INDEXth item, depending on EXPAND
boolean flag value.
- calibrate
-
Recalculates the node tree and the item dimensions.
Used internally.
- delete_items [ NODE = undef, OFFSET = 0, LENGTH = undef ]
-
Deletes LENGTH children items of NODE at OFFSET.
If NODE is
undef
, the root node is assumed. If LENGTH
is undef
, all items after OFFSET are deleted.
- delete_item NODE
-
Deletes NODE from the item list.
- draw_items CANVAS, PAINT_DATA
-
Called from within
Paint
notification to draw
items. The default behavior is to call DrawItem
notification for every visible item. PAINT_DATA
is an array of arrays, where each array consists
of parameters, passed to DrawItem
notification.
This method is overridden in some descendant classes,
to increase the speed of the drawing routine.
See DrawItem for PAINT_DATA parameters description.
- get_index NODE
-
Traverses all items for NODE and finds if it is visible.
If it is, returns two integers: the first is item index
and the second is item depth level. If it is not visible,
-1, undef
is returned.
- get_index_text INDEX
-
Returns text string assigned to INDEXth item.
Since the class does not assume the item storage organization,
the text is queried via
Stringify
notification.
- get_index_width INDEX
-
Returns width in pixels of INDEXth item, which is a
cached result of
MeasureItem
notification, stored
under index #3 in node.
- get_item INDEX
-
Returns two scalars corresponding to INDEXth item:
node reference and its depth level. If INDEX is outside
the list boundaries, empty array is returned.
- get_item_parent NODE
-
Returns two scalars, corresponding to NODE:
its parent node reference and offset of NODE in the parent's
immediate children list.
- get_item_text NODE
-
Returns text string assigned to NODE.
Since the class does not assume the item storage organization,
the text is queried via
Stringify
notification.
- get_item_width NODE
-
Returns width in pixels of INDEXth item, which is a
cached result of
MeasureItem
notification, stored
under index #3 in node.
- expand_all [ NODE = undef ].
-
Expands all nodes under NODE. If NODE is
undef
, the root node
is assumed. If the tree is large, the execution can take
significant amount of time.
- insert_items NODE, OFFSET, @ITEMS
-
Inserts one or more ITEMS under NODE with OFFSET.
If NODE is
undef
, the root node is assumed.
- iterate ACTION, FULL
-
Traverses the item tree and calls ACTION subroutine
for each node. If FULL boolean flag is 1, all nodes
are traversed. If 0, only the expanded nodes are traversed.
ACTION subroutine is called with the following parameters:
-
Node reference
-
Parent node reference; if
undef
, the node is the root.
-
Node offset in parent item list.
-
Node index.
-
Node depth level. 0 means the root node.
-
A boolean flag, set to 1 if the node is the last child in parent node list,
set to 0 otherwise.
- makehint SHOW, INDEX
-
Controls hint label upon INDEXth item. If a boolean flag SHOW is set to 1,
and
showItemHint
property is 1, and the item index does not fit horizontally
in the widget inferiors then the hint label is shown.
By default the label is removed automatically as the user moves the mouse pointer
away from the item. If SHOW is set to 0, the hint label is hidden immediately.
- point2item Y, [ HEIGHT ]
-
Returns index of an item that contains horizontal axis at Y in the widget coordinates.
If HEIGHT is specified, it must be the widget height; if it is
not, the value is fetched by calling
Prima::Widget::height
.
If the value is known, passing it to point2item
thus achieves
some speed-up.
- validate_items ITEMS
-
Traverses the array of ITEMS and puts every node to
the common format: cuts scalars above index #3, if there are any,
or adds default values to a node if it contains less than 3 scalars.
- Expand NODE, EXPAND
-
Called when NODE is expanded ( 1 ) or collapsed ( 0 ).
The EXPAND boolean flag reflects the action taken.
- DragItem OLD_INDEX, NEW_INDEX
-
Called when the user finishes the drag of an item
from OLD_INDEX to NEW_INDEX position. The default action
rearranges the item list in accord with the dragging action.
- DrawItem CANVAS, NODE, X1, Y1, X2, Y2, INDEX, FOCUSED
-
Called when INDEXth item, contained in NODE is to be drawn on
CANVAS. X1, Y1, X2, Y2 coordinated define the exterior rectangle
of the item in widget coordinates. FOCUSED boolean flag is set to
1 if the item is focused; 0 otherwise.
- MeasureItem NODE, REF
-
Puts width of NODE item in pixels into REF
scalar reference. This notification must be called
from within
begin_paint_info/end_paint_info
block.
- SelectItem INDEX
-
Called when INDEXth item gets focused.
- Stringify NODE, TEXT_REF
-
Puts text string, assigned to NODE item into TEXT_REF
scalar reference.
Descendant of Prima::OutlineViewer
class, provides standard
single-text items widget. The items can be set by merely
supplying a text as the first scalar in node array structure:
$string_outline-> items([ 'String', [ 'Descendant' ]]);
A variant of Prima::StringOutline
, with the only difference
that the text is stored not in the first scalar in a node but
as a first scalar in an anonymous array, which in turn is
the first node scalar. The class does not define neither format nor
the amount of scalars in the array, and as such presents a half-abstract
class.
Provides a standard widget with the item tree mapped to the directory
structure, so each item is mapped to a directory. Depending on the type
of the host OS, there is either single root directory ( unix ), or
one or more disk drive root items ( win32, os2 ).
The format of a node is defined as follows:
-
Directory name, string.
-
Parent path; an empty string for the root items.
-
Icon width in pixels, integer.
-
Drive icon; defined only for the root items under non-unix hosts
in order to reflect the drive type ( hard, floppy, etc ).
- closedGlyphs INTEGER
-
Number of horizontal equal-width images, contained in
closedIcon
property.
Default value: 1
- closedIcon ICON
-
Provides an icon representation for the collapsed items.
- openedGlyphs INTEGER
-
Number of horizontal equal-width images, contained in
openedIcon
property.
Default value: 1
- openedIcon OBJECT
-
Provides an icon representation for the expanded items.
- showDotDirs BOOLEAN
-
Selects if the directories with the first dot character
are shown the tree view. The treatment of the dot-prefixed names
as hidden is traditional to unix, and is of doubtful use under
win32 and os2.
Default value: 0
- files [ FILE_TYPE ]
-
If FILE_TYPE value is not specified, the list of all files in the
current directory is returned. If FILE_TYPE is given, only the files
of the types are returned. The FILE_TYPE is a string, one of those
returned by
Prima::Utils::getdir
( see getdir in the Prima::Utils manpage ).
- get_directory_tree PATH
-
Reads the file structure under PATH and returns a newly created hierarchy
structure in the class node format. If
showDotDirs
property value is 0,
the dot-prefixed names are not included.
Used internally inside Expand
notification.
Dmitry Karasik, <dmitry@karasik.eu.org>.
Prima, the Prima::Widget manpage, the Prima::IntUtils manpage, <examples/outline.pl>.
Prima::Outlines - tree view widgets
|