factor/library/ui/presentations.factor

111 lines
3.6 KiB
Factor
Raw Normal View History

! Copyright (C) 2005 Slava Pestov.
! See http://factor.sf.net/license.txt for BSD license.
IN: gadgets-presentations
2005-12-16 22:24:39 -05:00
USING: arrays compiler gadgets gadgets-borders gadgets-buttons
gadgets-labels gadgets-layouts gadgets-menus gadgets-outliner
gadgets-panes gadgets-theme generic hashtables inference
inspector io jedit kernel lists memory namespaces parser
prettyprint sequences strings styles words ;
2005-07-06 03:29:42 -04:00
SYMBOL: commands
V{ } clone commands global set-hash
2005-07-06 03:29:42 -04:00
2005-11-29 23:49:59 -05:00
: forget-command ( name -- )
commands [ [ second = not ] subset-with ] change ;
2005-07-06 03:29:42 -04:00
: define-command ( class name quot -- )
2005-11-29 23:49:59 -05:00
over forget-command 3array commands get push ;
2005-07-06 03:29:42 -04:00
: applicable ( object -- seq )
commands get [ first call ] subset-with ;
: command-quot ( presented quot -- quot )
2005-09-25 20:41:49 -04:00
[ \ drop , curry , [ pane get pane-call ] % ] [ ] make ;
2005-10-09 21:27:14 -04:00
TUPLE: command-button object ;
2005-09-01 18:28:46 -04:00
2005-10-09 21:27:14 -04:00
: command-menu ( command-button -- )
command-button-object dup applicable
[ [ third command-quot ] keep second swons ] map-with
<menu> show-hand-menu ;
C: command-button ( gadget object -- button )
2005-10-25 21:52:26 -04:00
[
set-command-button-object
[ command-menu ] <roll-button>
] keep
2005-10-09 21:27:14 -04:00
[ set-gadget-delegate ] keep
dup menu-button-actions ;
M: command-button gadget-help ( button -- string )
2005-10-25 21:52:26 -04:00
command-button-object dup word? [ synopsis ] [ summary ] if ;
2005-09-24 23:21:09 -04:00
: init-commands ( style gadget -- gadget )
2005-11-29 23:49:59 -05:00
presented rot hash [ <command-button> ] when* ;
: style-font ( style -- font )
2005-11-29 23:49:59 -05:00
[ font swap hash [ "Monospaced" ] unless* ] keep
[ font-style swap hash [ plain ] unless* ] keep
font-size swap hash [ 12 ] unless* 3array ;
: <styled-label> ( style text -- label )
2005-11-29 23:49:59 -05:00
<label> foreground pick hash [ over set-label-color ] when*
swap style-font over set-label-font ;
: <presentation> ( style text -- presentation )
2005-11-29 23:49:59 -05:00
gadget pick hash
[ ] [ >r dup dup r> <styled-label> init-commands ] ?if
2005-11-29 23:49:59 -05:00
outline rot hash [ <outliner> ] when* ;
2005-07-13 18:08:54 -04:00
: gadget. ( gadget -- )
2005-11-29 23:49:59 -05:00
gadget associate
"This stream does not support live gadgets"
2005-07-21 23:37:08 -04:00
swap format terpri ;
2005-07-13 18:08:54 -04:00
2005-12-16 21:12:35 -05:00
UNION: gadget-stream pack paragraph ;
M: gadget-stream stream-write ( string stream -- )
over empty? [ 2drop ] [ >r <label> r> add-gadget ] if ;
M: gadget-stream stream-write1 ( char stream -- )
>r ch>string r> stream-write ;
M: gadget-stream stream-format ( string style stream -- )
pick empty? pick hash-empty? and [
3drop
] [
>r swap <presentation> r> add-gadget
] if ;
M: gadget-stream stream-break ( stream -- )
<break> swap add-gadget ;
M: gadget-stream stream-close ( stream -- ) drop ;
2005-12-16 22:24:39 -05:00
: paragraph-style ( pane style -- pane )
border-width over hash [ >r <border> r> ] when
border-color swap hash
[ <solid> over set-gadget-boundary ] when* ;
M: pane with-nested-stream ( quot style stream -- )
>r >r make-pane r> paragraph-style
r> pane-current add-gadget ;
2005-08-21 14:40:12 -04:00
[ drop t ] "Prettyprint" [ . ] define-command
2005-09-27 14:12:17 -04:00
[ drop t ] "Describe" [ describe ] define-command
2005-08-26 00:55:56 -04:00
[ drop t ] "Push on data stack" [ ] define-command
2005-07-06 03:29:42 -04:00
2005-08-26 00:55:56 -04:00
[ word? ] "See word" [ see ] define-command
2005-09-27 14:12:17 -04:00
[ word? ] "Word call hierarchy" [ uses. ] define-command
[ word? ] "Word caller hierarchy" [ usage. ] define-command
2005-08-26 00:55:56 -04:00
[ word? ] "Open in jEdit" [ jedit ] define-command
[ word? ] "Reload original source" [ reload ] define-command
[ compound? ] "Annotate with watchpoint" [ watch ] define-command
[ compound? ] "Annotate with breakpoint" [ break ] define-command
[ compound? ] "Annotate with profiling" [ profile ] define-command
[ word? ] "Compile" [ recompile ] define-command
2005-09-08 22:23:54 -04:00
[ word? ] "Infer stack effect" [ unit infer . ] define-command
2005-07-06 03:29:42 -04:00
2005-08-26 00:55:56 -04:00
[ [ gadget? ] is? ] "Display gadget" [ gadget. ] define-command