]> gitweb.factorcode.org Git - factor.git/blob - basis/ui/gadgets/labels/labels.factor
Change a throw to rethrow so that we don't lose the original stack trace
[factor.git] / basis / ui / gadgets / labels / labels.factor
1 ! Copyright (C) 2005, 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors arrays hashtables io kernel math namespaces
4 make opengl sequences strings splitting ui.gadgets
5 ui.gadgets.tracks ui.gadgets.theme ui.render colors models ;
6 IN: ui.gadgets.labels
7
8 ! A label gadget draws a string.
9 TUPLE: label < gadget text font color ;
10
11 : label-string ( label -- string )
12     text>> dup string? [ "\n" join ] unless ; inline
13
14 : set-label-string ( string label -- )
15     [ CHAR: \n over memq? [ string-lines ] when ] dip (>>text) ; inline
16
17 : label-theme ( gadget -- gadget )
18     sans-serif-font >>font
19     black >>color ; inline
20
21 : new-label ( string class -- label )
22     new-gadget
23     [ set-label-string ] keep
24     label-theme ; inline
25
26 : <label> ( string -- label )
27     label new-label ;
28
29 M: label pref-dim*
30     [ font>> open-font ] [ text>> ] bi text-dim ;
31
32 M: label draw-gadget*
33     [ color>> gl-color ]
34     [ [ font>> ] [ text>> ] bi origin get draw-text ] bi ;
35
36 M: label gadget-text* label-string % ;
37
38 TUPLE: label-control < label ;
39
40 M: label-control model-changed
41     swap value>> over set-label-string relayout ;
42
43 : <label-control> ( model -- gadget )
44     "" label-control new-label
45         swap >>model ;
46
47 : text-theme ( gadget -- gadget )
48     black >>color
49     monospace-font >>font ;
50
51 : reverse-video-theme ( label -- label )
52     white >>color
53     black solid-interior ;
54
55 GENERIC: >label ( obj -- gadget )
56 M: string >label <label> ;
57 M: array >label <label> ;
58 M: object >label ;
59 M: f >label drop <gadget> ;
60
61 : label-on-left ( gadget label -- button )
62     { 1 0 } <track>
63         swap >label f track-add
64         swap 1 track-add ;
65
66 : label-on-right ( label gadget -- button )
67     { 1 0 } <track>
68         swap f track-add
69         swap >label 1 track-add ;