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 math.parser models sequences ui ui.gadgets
5 ui.gadgets.editors ui.gadgets.labeled ui.gadgets.scrollers
9 TUPLE: escape-string-editor < source-editor source-model quot ;
11 : <escape-string-editor> ( source-model quot: ( str -- str' ) -- editor )
12 escape-string-editor new-editor
16 M: escape-string-editor graft*
17 [ dup source-model>> add-connection ] [ call-next-method ] bi ;
19 M: escape-string-editor ungraft*
20 [ dup source-model>> remove-connection ] [ call-next-method ] bi ;
22 M: escape-string-editor model-changed
23 2dup source-model>> eq? [
25 [ quot>> call( str -- str' ) ] [ set-editor-string ] bi
26 ] [ call-next-method ] if ;
28 : containerize ( string tag open-delim close-delim -- string' )
29 overd [ 1surround ] 2bi@ surround ;
31 : checksum-escape-string ( string checksum -- string' )
33 [ checksum-bytes bytes>hex-string ] 2bi
34 "[" "]" containerize ;
36 :: <escape-string-ui> ( -- gadget )
41 <source-editor> dup model>> :> source-model
42 <scroller> "Plain Text" <labeled-gadget>
45 source-model [ number-escape-string ] <escape-string-editor>
46 <scroller> "Number Escape" <labeled-gadget>
49 source-model [ escape-string ] <escape-string-editor>
50 <scroller> "Escape" <labeled-gadget>
53 source-model [ sha-256 checksum-escape-string ] <escape-string-editor>
54 <scroller> "SHA256 Escape" <labeled-gadget>
57 MAIN-WINDOW: escape-string-ui
59 { title "Escape String Editor" }
60 { pref-dim { 600 700 } }
61 } <escape-string-ui> >>gadgets ;