]> gitweb.factorcode.org Git - factor.git/blob - basis/escape-strings/ui/ui.factor
2769ffd99f98296d094b794af26b5069812a3350
[factor.git] / basis / escape-strings / ui / ui.factor
1 ! Copyright (C) 2019 Doug Coleman.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors checksums checksums.sha documents
4 escape-strings kernel locals math.parser models sequences ui
5 ui.gadgets ui.gadgets.editors ui.gadgets.labeled
6 ui.gadgets.scrollers ui.gadgets.tracks ;
7 IN: escape-strings.ui
8
9 TUPLE: escape-string-editor < source-editor source-model quot ;
10
11 : <escape-string-editor> ( source-model quot: ( str -- str' ) -- editor )
12     escape-string-editor new-editor
13         swap >>quot
14         swap >>source-model ;
15
16 M: escape-string-editor graft*
17     [ dup source-model>> add-connection ] [ call-next-method ] bi ;
18
19 M: escape-string-editor ungraft*
20     [ dup source-model>> remove-connection ] [ call-next-method ] bi ;
21
22 M: escape-string-editor model-changed
23     2dup source-model>> eq? [
24         [ doc-string ] dip
25         [ quot>> call( str -- str' ) ] [ set-editor-string ] bi
26     ] [ call-next-method ] if ;
27
28 : containerize ( string tag open-delim close-delim -- string' )
29     overd [ 1surround ] 2bi@ surround ;
30
31 : checksum-escape-string ( string checksum -- string' )
32     [ drop ]
33     [ checksum-bytes bytes>hex-string ] 2bi
34     "[" "]" containerize ;
35
36 :: <escape-string-ui> ( -- gadget )
37     vertical <track>
38         1 >>fill
39         { 10 10 } >>gap
40
41     <source-editor> dup model>> :> source-model
42     <scroller> "Plain Text" <labeled-gadget>
43         1/4 track-add
44
45     source-model [ number-escape-string ] <escape-string-editor>
46     <scroller> "Number Escape" <labeled-gadget>
47         1/4 track-add
48
49     source-model [ escape-string ] <escape-string-editor>
50     <scroller> "Escape" <labeled-gadget>
51         1/4 track-add
52
53     source-model [ sha-256 checksum-escape-string ] <escape-string-editor>
54     <scroller> "SHA256 Escape" <labeled-gadget>
55         1/4 track-add ;
56
57 MAIN-WINDOW: escape-string-ui
58     {
59         { title "Escape String Editor" }
60         { pref-dim { 600 700 } }
61     } <escape-string-ui> >>gadgets ;