2008-11-28 01:02:02 -05:00
|
|
|
! Copyright (C) 2006, 2008 Slava Pestov.
|
2007-09-20 18:09:08 -04:00
|
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
|
|
USING: arrays ui.gadgets.buttons ui.gadgets.borders
|
|
|
|
ui.gadgets.labels ui.gadgets.panes ui.gadgets.scrollers
|
|
|
|
ui.gadgets.tracks ui.gadgets.theme ui.gadgets.frames
|
|
|
|
ui.gadgets.grids io kernel math models namespaces prettyprint
|
2008-03-29 04:34:48 -04:00
|
|
|
sequences sequences words classes.tuple ui.gadgets ui.render
|
2008-07-14 19:35:30 -04:00
|
|
|
colors accessors ;
|
2007-09-20 18:09:08 -04:00
|
|
|
IN: ui.gadgets.labelled
|
|
|
|
|
2008-07-11 01:01:22 -04:00
|
|
|
TUPLE: labelled-gadget < track content ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
: <labelled-gadget> ( gadget title -- newgadget )
|
2008-09-27 15:36:04 -04:00
|
|
|
{ 0 1 } labelled-gadget new-track
|
|
|
|
swap <label> reverse-video-theme f track-add
|
|
|
|
swap >>content
|
|
|
|
dup content>> 1 track-add ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-08-30 22:58:13 -04:00
|
|
|
M: labelled-gadget focusable-child* content>> ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
: <labelled-scroller> ( gadget title -- gadget )
|
2008-11-28 01:02:02 -05:00
|
|
|
[ <scroller> ] dip <labelled-gadget> ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-02-21 02:25:59 -05:00
|
|
|
: <labelled-pane> ( model quot scrolls? title -- gadget )
|
2008-11-28 01:02:02 -05:00
|
|
|
[ [ <pane-control> ] dip >>scrolls? ] dip
|
2007-09-20 18:09:08 -04:00
|
|
|
<labelled-scroller> ;
|
|
|
|
|
|
|
|
: <close-box> ( quot -- button/f )
|
|
|
|
gray close-box <polygon-gadget> swap <bevel-button> ;
|
|
|
|
|
2008-09-27 15:36:04 -04:00
|
|
|
: title-theme ( gadget -- gadget )
|
|
|
|
{ 1 0 } >>orientation
|
2008-11-11 01:28:37 -05:00
|
|
|
{
|
2008-07-28 18:01:24 -04:00
|
|
|
T{ rgba f 0.65 0.65 1.0 1.0 }
|
|
|
|
T{ rgba f 0.65 0.45 1.0 1.0 }
|
2008-11-11 01:28:37 -05:00
|
|
|
} <gradient> >>interior ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-09-27 15:36:04 -04:00
|
|
|
: <title-label> ( text -- label ) <label> title-theme ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
: <title-bar> ( title quot -- gadget )
|
2008-09-27 15:36:04 -04:00
|
|
|
<frame>
|
2008-11-10 04:35:21 -05:00
|
|
|
swap [ <close-box> @left grid-add ] when*
|
2008-09-27 15:36:04 -04:00
|
|
|
swap <title-label> @center grid-add ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
2008-07-11 01:01:22 -04:00
|
|
|
TUPLE: closable-gadget < frame content ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
: find-closable-gadget ( parent -- child )
|
2008-08-23 00:20:49 -04:00
|
|
|
[ closable-gadget? ] find-parent ;
|
2007-09-20 18:09:08 -04:00
|
|
|
|
|
|
|
: <closable-gadget> ( gadget title quot -- gadget )
|
2008-11-30 18:47:29 -05:00
|
|
|
[
|
|
|
|
[ closable-gadget new-frame ] dip
|
|
|
|
[ >>content ] [ @center grid-add ] bi
|
|
|
|
] 2dip
|
|
|
|
<title-bar> @top grid-add ;
|
2008-07-14 19:35:30 -04:00
|
|
|
|
2008-08-30 22:58:13 -04:00
|
|
|
M: closable-gadget focusable-child* content>> ;
|