! Copyright (C) 2005, 2006 Slava Pestov. ! See http://factorcode.org/license.txt for BSD license. IN: gadgets-panes USING: gadgets gadgets-buttons gadgets-labels gadgets-scrolling gadgets-theme generic hashtables io kernel namespaces sequences ; TUPLE: pane output current prototype scrolls? ; : add-output 2dup set-pane-output add-gadget ; : add-current 2dup set-pane-current add-gadget ; : prepare-line ( pane -- ) dup pane-prototype clone swap add-current ; : pane-clear ( pane -- ) dup pane-output clear-incremental pane-current clear-gadget ; C: pane ( -- pane ) over set-delegate over set-pane-prototype over add-output dup prepare-line ; ! Panes are streams. : scroll-pane ( pane -- ) dup pane-scrolls? [ scroll>bottom ] [ drop ] if ; TUPLE: pane-stream pane ; : prepare-print ( current -- gadget ) #! Optimization: if line has 1 child, add the child. dup gadget-children { { [ dup empty? ] [ 2drop ""