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
|
2005-09-27 14:12:17 -04:00
|
|
|
USING: arrays gadgets gadgets-borders gadgets-buttons
|
2005-09-28 23:29:00 -04:00
|
|
|
gadgets-labels gadgets-layouts gadgets-panes gadgets-theme
|
2005-10-27 16:17:50 -04:00
|
|
|
generic io kernel lists sequences styles ;
|
2005-09-25 01:16:35 -04:00
|
|
|
|
2005-09-27 14:12:17 -04:00
|
|
|
! Outliner gadget.
|
|
|
|
TUPLE: outliner quot ;
|
2005-09-25 01:16:35 -04:00
|
|
|
|
2005-09-27 14:12:17 -04:00
|
|
|
: outliner-expanded? ( outliner -- ? )
|
|
|
|
#! If the outliner is expanded, it has a center gadget.
|
|
|
|
@center frame-child >boolean ;
|
2005-09-25 01:16:35 -04:00
|
|
|
|
2005-09-27 14:12:17 -04:00
|
|
|
DEFER: <expand-button>
|
2005-09-25 01:16:35 -04:00
|
|
|
|
2005-09-27 14:12:17 -04:00
|
|
|
: set-outliner-expanded? ( expanded? outliner -- )
|
|
|
|
#! Call the expander quotation if expanding.
|
|
|
|
over not <expand-button> over @top-left frame-add
|
|
|
|
swap [ dup outliner-quot make-pane ] [ f ] if
|
|
|
|
swap @center frame-add ;
|
2005-09-25 01:16:35 -04:00
|
|
|
|
2005-09-27 14:12:17 -04:00
|
|
|
: find-outliner ( gadget -- outliner )
|
|
|
|
[ outliner? ] find-parent ;
|
2005-09-25 01:16:35 -04:00
|
|
|
|
2005-09-27 14:12:17 -04:00
|
|
|
: <expand-arrow> ( ? -- gadget )
|
2006-01-18 18:50:52 -05:00
|
|
|
arrow-right arrow-down ? { 0.5 0.5 0.5 1.0 } swap
|
2005-12-17 20:03:41 -05:00
|
|
|
<polygon-gadget> <default-border> ;
|
2005-09-25 01:16:35 -04:00
|
|
|
|
2005-09-27 14:12:17 -04:00
|
|
|
: <expand-button> ( ? -- gadget )
|
|
|
|
#! If true, the button expands, otherwise it collapses.
|
|
|
|
dup [ swap find-outliner set-outliner-expanded? ] curry
|
|
|
|
>r <expand-arrow> r>
|
|
|
|
<highlight-button> ;
|
2005-09-25 01:16:35 -04:00
|
|
|
|
|
|
|
C: outliner ( gadget quot -- gadget )
|
|
|
|
#! The quotation generates child gadgets.
|
2005-10-09 21:27:14 -04:00
|
|
|
dup delegate>frame
|
2005-09-25 01:16:35 -04:00
|
|
|
[ set-outliner-quot ] keep
|
2005-09-27 14:35:30 -04:00
|
|
|
[ >r 1array make-shelf r> @top frame-add ] keep
|
2005-09-27 14:12:17 -04:00
|
|
|
f over set-outliner-expanded? ;
|