This source file includes following definitions.
- check_callback
- check_mouse_callback
- check_new
- check_set_text
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 #include <config.h>
36
37 #include <stdlib.h>
38
39 #include "lib/global.h"
40
41 #include "lib/tty/tty.h"
42 #include "lib/widget.h"
43
44
45
46
47
48
49
50
51
52
53
54 static cb_ret_t
55 check_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data)
56 {
57 WCheck *c = CHECK (w);
58
59 switch (msg)
60 {
61 case MSG_HOTKEY:
62 if (c->text.hotkey != NULL)
63 {
64 if (g_ascii_tolower ((gchar) c->text.hotkey[0]) == parm)
65 {
66
67 send_message (w, sender, MSG_KEY, ' ', data);
68 return MSG_HANDLED;
69 }
70 }
71 return MSG_NOT_HANDLED;
72
73 case MSG_KEY:
74 if (parm != ' ')
75 return MSG_NOT_HANDLED;
76 c->state = !c->state;
77 widget_draw (w);
78 send_message (w->owner, w, MSG_NOTIFY, 0, NULL);
79 return MSG_HANDLED;
80
81 case MSG_CURSOR:
82 widget_gotoyx (w, 0, 1);
83 return MSG_HANDLED;
84
85 case MSG_DRAW:
86 {
87 gboolean focused;
88
89 focused = widget_get_state (w, WST_FOCUSED);
90 widget_selectcolor (w, focused, FALSE);
91 widget_gotoyx (w, 0, 0);
92 tty_print_string (c->state ? "[x] " : "[ ] ");
93 hotkey_draw (w, c->text, focused);
94 return MSG_HANDLED;
95 }
96
97 case MSG_DESTROY:
98 hotkey_free (c->text);
99 return MSG_HANDLED;
100
101 default:
102 return widget_default_callback (w, sender, msg, parm, data);
103 }
104 }
105
106
107
108 static void
109 check_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event)
110 {
111 (void) event;
112
113 switch (msg)
114 {
115 case MSG_MOUSE_DOWN:
116 widget_select (w);
117 break;
118
119 case MSG_MOUSE_CLICK:
120 send_message (w, NULL, MSG_KEY, ' ', NULL);
121 send_message (w->owner, w, MSG_POST_KEY, ' ', NULL);
122 break;
123
124 default:
125 break;
126 }
127 }
128
129
130
131
132
133 WCheck *
134 check_new (int y, int x, gboolean state, const char *text)
135 {
136 WCheck *c;
137 Widget *w;
138
139 c = g_new (WCheck, 1);
140 w = WIDGET (c);
141 c->text = hotkey_new (text);
142
143 widget_init (w, y, x, 1, 4 + hotkey_width (c->text), check_callback, check_mouse_callback);
144 w->options |= WOP_SELECTABLE | WOP_WANT_CURSOR | WOP_WANT_HOTKEY;
145 c->state = state;
146
147 return c;
148 }
149
150
151
152 void
153 check_set_text (WCheck * check, const char *text)
154 {
155 Widget *w = WIDGET (check);
156 hotkey_t hk;
157
158 hk = hotkey_new (text);
159 if (hotkey_equal (check->text, hk))
160 {
161 hotkey_free (hk);
162 return;
163 }
164
165 hotkey_free (check->text);
166 check->text = hk;
167
168 if (check->text.start[0] == '\0' && check->text.hotkey == NULL && check->text.end == NULL)
169 w->cols = 3;
170 else
171 w->cols = 4 + hotkey_width (check->text);
172
173 widget_draw (w);
174 }
175
176