1 ! Copyright (C) 2006 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
4 USING: arrays gadgets gadgets-frames gadgets-labels
5 gadgets-panes gadgets-scrolling gadgets-text gadgets-theme
6 generic help tools kernel models sequences words
7 gadgets-borders gadgets-lists namespaces parser hashtables io
10 TUPLE: live-search field list producer action presenter ;
12 : find-live-search [ live-search? ] find-parent ;
14 : find-search-list find-live-search live-search-list ;
18 C: search-field ( string -- gadget )
19 <editor> over set-gadget-delegate
20 dup dup set-control-self
21 [ set-editor-text ] keep
25 { T{ key-down f f "UP" } [ find-search-list select-prev ] }
26 { T{ key-down f f "DOWN" } [ find-search-list select-next ] }
27 { T{ key-down f f "RETURN" } [ find-search-list call-action ] }
30 : <search-model> ( -- model )
31 gadget get dup live-search-field control-model
32 swap live-search-producer [ "\n" join ] swap append
37 gadget get live-search-presenter [ make-pane ] curry
38 gadget get live-search-action \ first add*
41 C: live-search ( string action producer presenter -- gadget )
42 [ set-live-search-presenter ] keep
43 [ set-live-search-producer ] keep
44 [ set-live-search-action ] keep
60 M: live-search focusable-child* live-search-field ;
62 : <word-search> ( string action -- gadget )
64 [ word-completions ] curry
66 <live-search> "Word search" <labelled-gadget> ;
68 : <help-search> ( string action -- gadget )
71 <live-search> "Help search" <labelled-gadget> ;
73 : string-completion. ( pair quot -- )
74 >r first2 over completion>string swap r> call write-object ;
77 : <source-files-search> ( string action -- gadget )
78 source-files get hash-keys natural-sort
79 [ string-completions ] curry
80 [ [ <pathname> ] string-completion. ]
81 <live-search> "Source file search" <labelled-gadget> ;
83 : <vocabs-search> ( string action -- gadget )
85 [ string-completions ] curry
86 [ [ <vocab-link> ] string-completion. ]
87 <live-search> "Vocabulary search" <labelled-gadget> ;