diff --git a/library/ui/outliner.factor b/library/ui/outliner.factor new file mode 100644 index 0000000000..fd90840db8 --- /dev/null +++ b/library/ui/outliner.factor @@ -0,0 +1,45 @@ +! 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 +gadgets-layouts gadgets-panes gadgets-presentations generic io +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 -- ) + dup outliner-pile clear-gadget + dup outliner-gadget over outliner-pile add-gadget + over [ >r make-pane r> outliner-pile add-gadget ] [ 2drop ] if ; + +: 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 ; + +: ( -- gadget ) + "+"