factor/core/ui/tools/browser.factor

82 lines
2.1 KiB
Factor
Raw Normal View History

! Copyright (C) 2006 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: arrays sequences kernel gadgets-panes definitions
2006-08-28 18:14:54 -04:00
prettyprint gadgets-theme gadgets-borders gadgets
generic gadgets-scrolling math io words models styles
2006-10-22 18:46:02 -04:00
namespaces gadgets-tracks gadgets-presentations
2006-11-17 18:11:35 -05:00
gadgets-workspace help gadgets-buttons tools ;
2006-08-28 18:14:54 -04:00
IN: gadgets-browser
2006-11-17 18:11:35 -05:00
TUPLE: browser definitions ;
TUPLE: definitions showing ;
2006-05-20 16:42:33 -04:00
: find-definitions ( gadget -- definitions )
[ definitions? ] find-parent ;
2006-05-20 16:42:33 -04:00
: definition-index ( definition definitions -- n )
definitions-showing index ;
2006-03-25 17:41:40 -05:00
: close-definition ( gadget definition -- )
over find-definitions definitions-showing delete
unparent ;
2006-08-31 21:58:15 -04:00
: close-definitions ( definitions -- )
dup clear-gadget definitions-showing delete-all ;
C: definitions ( -- gadget )
<pile> over set-delegate
2006-08-28 18:14:54 -04:00
{ 2 2 } over set-pack-gap
V{ } clone over set-definitions-showing ;
2006-03-24 03:28:46 -05:00
2006-08-28 18:14:54 -04:00
TUPLE: tile definition gadget ;
: find-tile [ tile? ] find-parent ;
: close-tile ( tile -- )
dup tile-definition over find-definitions
definitions-showing delete
unparent ;
2006-11-21 19:35:26 -05:00
: <tile-content> ( definition -- gadget )
[ [ see ] make-pane <default-border> ] keep
unparse [ find-tile close-tile ] <closable-gadget>
2006-11-21 19:35:26 -05:00
dup faint-boundary ;
2006-08-28 18:14:54 -04:00
C: tile ( definition -- gadget )
2006-11-21 19:35:26 -05:00
over <tile-content> over set-gadget-delegate
[ set-tile-definition ] keep ;
2006-08-28 18:14:54 -04:00
: show-definition ( definition definitions -- )
2dup definition-index dup 0 >= [
over nth-gadget swap scroll>rect drop
] [
drop 2dup definitions-showing push
2006-08-28 18:14:54 -04:00
swap <tile> over add-gadget
scroll>bottom
] if ;
C: browser ( -- gadget )
{
2006-10-05 17:15:41 -04:00
{
[ <definitions> ]
set-browser-definitions
[ <scroller> ]
2006-11-17 18:11:35 -05:00
@center
2006-10-05 17:15:41 -04:00
}
2006-11-17 18:11:35 -05:00
} make-frame* ;
2006-08-31 21:58:15 -04:00
: clear-browser ( browser -- )
browser-definitions close-definitions ;
2006-10-09 23:57:32 -04:00
browser "toolbar" {
{ "Clear" T{ key-down f f "CLEAR" } [ clear-browser ] }
2006-08-31 21:58:15 -04:00
} define-commands
2006-09-14 16:15:39 -04:00
M: browser call-tool*
2006-11-17 18:11:35 -05:00
browser-definitions show-definition ;
M: browser tool-scroller browser-definitions find-scroller ;
M: browser tool-help drop "ui-browser" ;