2006-03-24 13:19:14 -05:00
|
|
|
! Copyright (C) 2006 Slava Pestov.
|
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
2006-03-24 03:28:46 -05:00
|
|
|
IN: gadgets-browser
|
2006-03-25 01:06:52 -05:00
|
|
|
USING: arrays gadgets gadgets-buttons gadgets-labels
|
2006-03-24 03:28:46 -05:00
|
|
|
gadgets-layouts gadgets-panes gadgets-scrolling gadgets-theme
|
2006-03-24 22:58:03 -05:00
|
|
|
generic hashtables help inspector kernel lists math namespaces
|
2006-03-24 03:28:46 -05:00
|
|
|
prettyprint sequences words ;
|
|
|
|
|
2006-03-25 01:06:52 -05:00
|
|
|
SYMBOL: components
|
|
|
|
|
|
|
|
H{ } clone components set-global
|
|
|
|
|
|
|
|
: get-components ( class -- assoc )
|
|
|
|
components get-global hash [ { } ] unless*
|
|
|
|
{ "Slots" [ describe ] } add ;
|
|
|
|
|
|
|
|
{
|
|
|
|
{ "Definition" [ help ] }
|
|
|
|
{ "Calls in" [ usage. ] }
|
|
|
|
{ "Calls out" [ uses. ] }
|
|
|
|
} \ word components get-global set-hash
|
|
|
|
|
|
|
|
{
|
|
|
|
{ "Documentation" [ help ] }
|
|
|
|
} \ link components get-global set-hash
|
|
|
|
|
2006-03-24 03:28:46 -05:00
|
|
|
TUPLE: book page pages ;
|
|
|
|
|
|
|
|
: show-page ( key book -- )
|
|
|
|
dup book-page unparent
|
2006-03-24 22:02:50 -05:00
|
|
|
[ book-pages assoc ] keep
|
2006-03-24 03:28:46 -05:00
|
|
|
[ set-book-page ] 2keep
|
|
|
|
add-gadget ;
|
|
|
|
|
2006-03-24 22:02:50 -05:00
|
|
|
C: book ( pages -- book )
|
2006-03-24 03:28:46 -05:00
|
|
|
dup delegate>gadget
|
2006-03-24 22:02:50 -05:00
|
|
|
[ set-book-pages ] 2keep
|
2006-03-24 22:58:03 -05:00
|
|
|
[ >r first first r> show-page ] keep ;
|
2006-03-24 03:28:46 -05:00
|
|
|
|
2006-03-25 17:01:39 -05:00
|
|
|
M: book pref-dim* ( book -- dim ) book-page pref-dim ;
|
2006-03-24 03:28:46 -05:00
|
|
|
|
|
|
|
M: book layout* ( book -- )
|
|
|
|
dup rect-dim swap book-page set-gadget-dim ;
|
|
|
|
|
2006-03-24 22:02:50 -05:00
|
|
|
: component-pages ( obj -- assoc )
|
2006-03-24 22:58:03 -05:00
|
|
|
dup class get-components
|
2006-03-24 22:02:50 -05:00
|
|
|
[ first2 swapd make-pane <scroller> 2array ] map-with ;
|
2006-03-24 03:28:46 -05:00
|
|
|
|
|
|
|
: <tab> ( name book -- button )
|
2006-03-25 17:01:39 -05:00
|
|
|
dupd [ show-page drop ] curry curry
|
2006-03-24 03:28:46 -05:00
|
|
|
>r <label> r> <bevel-button> ;
|
|
|
|
|
2006-03-24 22:02:50 -05:00
|
|
|
: tabs ( assoc book gadget -- )
|
|
|
|
>r swap [ first swap <tab> ] map-with r> add-gadgets ;
|
2006-03-24 03:28:46 -05:00
|
|
|
|
2006-03-24 13:39:18 -05:00
|
|
|
TUPLE: browser object history tabs ;
|
|
|
|
|
|
|
|
: save-current ( browser -- )
|
|
|
|
dup browser-object swap browser-history push ;
|
2006-03-24 03:28:46 -05:00
|
|
|
|
|
|
|
: browse ( obj browser -- )
|
2006-03-24 13:39:18 -05:00
|
|
|
[ set-browser-object ] 2keep
|
|
|
|
dup browser-tabs clear-gadget
|
2006-03-24 22:02:50 -05:00
|
|
|
>r component-pages dup <book> r>
|
2006-03-24 13:19:14 -05:00
|
|
|
[ @center frame-add ] 2keep browser-tabs tabs ;
|
|
|
|
|
|
|
|
: find-browser [ browser? ] find-parent ;
|
|
|
|
|
|
|
|
: browse-back ( browser -- )
|
|
|
|
dup browser-history dup empty?
|
|
|
|
[ 2drop ] [ pop swap browse ] if ;
|
2006-03-24 03:28:46 -05:00
|
|
|
|
|
|
|
C: browser ( obj -- browser )
|
2006-03-24 13:19:14 -05:00
|
|
|
V{ } clone over set-browser-history
|
|
|
|
dup delegate>frame [
|
|
|
|
"<" <label> [ find-browser browse-back ] <bevel-button> ,
|
|
|
|
<shelf> dup pick set-browser-tabs ,
|
|
|
|
] { } make make-shelf dup highlight-theme
|
|
|
|
over @top frame-add
|
|
|
|
[ browse ] keep ;
|
2006-03-24 03:28:46 -05:00
|
|
|
|
|
|
|
TUPLE: browser-button object ;
|
|
|
|
|
2006-03-24 22:58:03 -05:00
|
|
|
: browser-window ( obj -- ) <browser> "Browser" open-window ;
|
2006-03-24 13:39:18 -05:00
|
|
|
|
2006-03-25 17:01:39 -05:00
|
|
|
: new-browser? ( gadget -- ? )
|
|
|
|
find-browser not 3 hand-buttons get-global member? or ;
|
|
|
|
|
2006-03-24 13:39:18 -05:00
|
|
|
: browser-button-action ( button -- )
|
2006-03-25 17:01:39 -05:00
|
|
|
[ browser-button-object ] keep dup new-browser? [
|
|
|
|
drop browser-window
|
|
|
|
] [
|
|
|
|
find-browser dup save-current browse
|
|
|
|
] if ;
|
2006-03-24 03:28:46 -05:00
|
|
|
|
|
|
|
C: browser-button ( gadget object -- button )
|
|
|
|
[ set-browser-button-object ] keep
|
|
|
|
[
|
2006-03-24 13:39:18 -05:00
|
|
|
>r [ browser-button-action ] <roll-button> r>
|
2006-03-24 03:28:46 -05:00
|
|
|
set-gadget-delegate
|
|
|
|
] keep ;
|
|
|
|
|
|
|
|
M: browser-button gadget-help ( button -- string )
|
|
|
|
browser-button-object dup word? [ synopsis ] [ summary ] if ;
|