root/widgets/edit-list.r

Revision 112, 2.7 kB (checked in by ashley, 9 months ago)

Added pill.r
Scroller fixes
Major color / theme management changes (in progress)

Line 
1edit-list: make drop-list [
2        tip:    {
3                USAGE:
4                        edit-list "1" data [1 2 3]
5                        edit-list data ["One" "Two" "Three"]
6                        edit-list data ctx-rebgui/locale*/colors
7
8                DESCRIPTION:
9                        Editable single column modal selection list.
10                        At runtime face/text contains current selection.
11        }
12        edge:   theme-edge
13        feel:   make edit/feel bind [
14                engage: make function! [face action event /local start end total visible fd pf] [
15                        switch action [
16                                key [
17                                        if event/key = #"^M" [
18                                                edit-text face event
19                                                hide-popup
20                                                edit/unfocus
21                                                exit
22                                        ]
23                                        if event/key = 'down [
24                                                either view*/pop-face [set-focus view*/pop-face] [face/pane/action/on-click face/pane]
25                                                exit
26                                        ]
27                                        prev-caret: index? view*/caret
28                                        face/text: any [face/hidden-text head view*/caret]
29                                        view*/caret: any [face/hidden-caret view*/caret]
30                                        all [view*/highlight-start view*/highlight-start: at face/text index? view*/highlight-start]
31                                        all [view*/highlight-end view*/highlight-end: at face/text index? view*/highlight-end]
32                                        edit-text face event
33                                        face/hidden-text: copy face/text
34                                        face/hidden-caret: at face/hidden-text index? view*/caret
35                                        fd: copy []
36                                        if find face/text edit/letter [ ; no auto-complete for numbers
37                                                foreach ln sort face/data [
38                                                        if find/match ln face/text [
39                                                                face/text: copy ln
40                                                                view*/caret: at face/text index? view*/caret
41                                                                unless char? event/key [
42                                                                        view*/caret: at face/text prev-caret
43                                                                        edit-text face event
44                                                                        face/hidden-text: copy face/text
45                                                                        face/hidden-caret: at face/hidden-text index? view*/caret
46                                                                ]
47                                                        ]
48                                                        if find/match ln face/hidden-text [
49                                                                insert tail fd ln
50                                                        ]
51                                                ]
52                                        ]
53                                        either not empty? fd [
54                                                either none? view*/pop-face [
55                                                        face/pane/action/on-click/filter-data face/pane fd
56                                                ][
57                                                        pf: view*/pop-face
58                                                        pf/data: copy fd
59                                                        pf/pane/1/size/y: pf/size/y: sizes/line * (length? fd)
60                                                        pf/lines: to integer! pf/size/y / sizes/line
61                                                        pf/rows: length? fd
62                                                        ;check-editable
63                                                        show pf
64                                                ]
65                                        ][
66                                                hide-popup
67                                        ]
68                                        show face
69                                ]
70                                down [
71                                        either event/double-click [
72                                                all [view*/caret not empty? view*/caret current-word view*/caret]
73                                        ][
74                                                either face <> view*/focal-face [set-focus face] [unlight-text]
75                                                view*/caret: offset-to-caret face event/offset
76                                                show face
77                                        ]
78                                ]
79                                over [
80                                        unless equal? view*/caret offset-to-caret face event/offset [
81                                                unless view*/highlight-start [view*/highlight-start: view*/caret]
82                                                view*/highlight-end: view*/caret: offset-to-caret face event/offset
83                                                show face
84                                        ]
85                                ]
86                        ]
87                ]
88        ] in edit 'self
89        options: []
90        caret: none
91]
Note: See TracBrowser for help on using the browser.