1 ! Copyright (C) 2005, 2006 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
4 USING: arrays gadgets gadgets-borders gadgets-buttons
5 gadgets-frames gadgets-grids gadgets-labels gadgets-panes
6 gadgets-theme generic io kernel math opengl sequences styles ;
11 M: guide draw-interior
13 rect-dim dup { 0.5 0 0 } v* swap { 0.5 1 0 } v* gl-line ;
15 : <guide-gadget> ( -- gadget )
17 T{ guide f { 0.5 0.5 0.5 1.0 } } over set-gadget-interior ;
20 TUPLE: outliner quot ;
22 : outliner-expanded? ( outliner -- ? )
23 #! If the outliner is expanded, it has a center gadget.
24 @center grid-child >boolean ;
26 : find-outliner ( gadget -- outliner )
27 [ outliner? ] find-parent ;
29 : <expand-arrow> ( ? -- gadget )
30 arrow-right arrow-down ? { 0.5 0.5 0.5 1.0 } swap
31 <polygon-gadget> <default-border> ;
33 DEFER: set-outliner-expanded?
35 : <expand-button> ( ? -- gadget )
36 #! If true, the button expands, otherwise it collapses.
37 dup [ swap find-outliner set-outliner-expanded? ] curry
38 >r <expand-arrow> r> <highlight-button> ;
40 : setup-expand ( expanded? outliner -- )
41 >r not <expand-button> r> @top-left grid-add ;
43 : setup-center ( expanded? outliner -- )
44 [ swap [ outliner-quot make-pane ] [ drop f ] if ] keep
47 : setup-guide ( expanded? outliner -- )
48 >r [ <guide-gadget> ] [ f ] if r> @left grid-add ;
50 : set-outliner-expanded? ( expanded? outliner -- )
51 #! Call the expander quotation if expanding.
52 2dup setup-expand 2dup setup-center setup-guide ;
54 C: outliner ( gadget quot -- gadget )
55 #! The quotation generates child gadgets.
57 [ set-outliner-quot ] keep
58 [ >r 1array make-shelf r> @top grid-add ] keep
59 f over set-outliner-expanded? ;