factor/library/ui/outliner.factor

48 lines
1.3 KiB
Factor
Raw Normal View History

2005-09-25 01:16:35 -04:00
! Copyright (C) 2005 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license.
IN: gadgets-outliner
USING: arrays gadgets gadgets-buttons gadgets-labels
2005-09-25 20:41:49 -04:00
gadgets-layouts gadgets-panes generic io
2005-09-25 01:16:35 -04:00
kernel sequences ;
! Outliner widget.
TUPLE: outliner gadget quot pile expanded? ;
: add-outliner-node ( outliner -- )
dup outliner-gadget
swap outliner-pile add-gadget ;
: setup-outliner ( quot outliner -- )
2005-09-25 01:35:29 -04:00
dup outliner-gadget >r
outliner-pile dup clear-gadget
r> over add-gadget
over [ >r make-pane r> add-gadget ] [ 2drop ] if ;
2005-09-25 01:16:35 -04:00
: collapse-outliner ( outliner -- )
f over set-outliner-expanded? f swap setup-outliner ;
: expand-outliner ( outliner -- )
t over set-outliner-expanded?
dup outliner-quot swap setup-outliner ;
: toggle-outliner ( outliner -- )
dup outliner-expanded?
[ collapse-outliner ] [ expand-outliner ] if ;
: find-outliner [ outliner? ] find-parent ;
: <expand-button> ( -- gadget )
2005-09-27 00:24:42 -04:00
right <polygon-gadget>
[ find-outliner toggle-outliner ] <roll-button> ;
2005-09-25 01:16:35 -04:00
C: outliner ( gadget quot -- gadget )
#! The quotation generates child gadgets.
[ set-outliner-quot ] keep
[ set-outliner-gadget ] keep
<shelf> over set-delegate
@{ 5 0 0 }@ over set-pack-gap
<expand-button> over add-gadget
<pile> over 2dup set-outliner-pile add-gadget
dup collapse-outliner ;