@@ -11,7 +11,6 @@ typedef struct _sel_data_t SelData;
11
11
struct _sel_data_t
12
12
{
13
13
Window * window ;
14
- Edit * edit ;
15
14
Edit * edit_range ;
16
15
Button * caps ;
17
16
TextView * text ;
@@ -33,10 +32,10 @@ static void i_OnCopy(SelData *data, Event *e)
33
32
cassert_no_null (data );
34
33
unref (e );
35
34
control = window_get_focus (data -> window );
36
- if (guicontrol_edit (control ) == data -> edit )
37
- edit_copy (data -> edit );
38
- else if (guicontrol_textview (control ) == data -> text )
39
- textview_copy (data -> text );
35
+ if (guicontrol_edit (control ) != NULL )
36
+ edit_copy (guicontrol_edit ( control ) );
37
+ else if (guicontrol_textview (control ) != NULL )
38
+ textview_copy (guicontrol_textview ( control ) );
40
39
}
41
40
42
41
/*---------------------------------------------------------------------------*/
@@ -47,10 +46,10 @@ static void i_OnPaste(SelData *data, Event *e)
47
46
cassert_no_null (data );
48
47
unref (e );
49
48
control = window_get_focus (data -> window );
50
- if (guicontrol_edit (control ) == data -> edit )
51
- edit_paste (data -> edit );
52
- else if (guicontrol_textview (control ) == data -> text )
53
- textview_paste (data -> text );
49
+ if (guicontrol_edit (control ) != NULL )
50
+ edit_paste (guicontrol_edit ( control ) );
51
+ else if (guicontrol_textview (control ) != NULL )
52
+ textview_paste (guicontrol_textview ( control ) );
54
53
}
55
54
56
55
/*---------------------------------------------------------------------------*/
@@ -61,10 +60,10 @@ static void i_OnCut(SelData *data, Event *e)
61
60
cassert_no_null (data );
62
61
unref (e );
63
62
control = window_get_focus (data -> window );
64
- if (guicontrol_edit (control ) == data -> edit )
65
- edit_cut (data -> edit );
66
- else if (guicontrol_textview (control ) == data -> text )
67
- textview_cut (data -> text );
63
+ if (guicontrol_edit (control ) != NULL )
64
+ edit_cut (guicontrol_edit ( control ) );
65
+ else if (guicontrol_textview (control ) != NULL )
66
+ textview_cut (guicontrol_textview ( control ) );
68
67
}
69
68
70
69
/*---------------------------------------------------------------------------*/
@@ -83,10 +82,10 @@ static void i_OnSelect(SelData *data, Event *e)
83
82
start = str_to_i32 (tc (left ), 10 , NULL );
84
83
end = str_to_i32 (tc (right ), 10 , NULL );
85
84
86
- if (guicontrol_edit (control ) == data -> edit )
87
- edit_select (data -> edit , start , end );
88
- else if (guicontrol_textview (control ) == data -> text )
89
- textview_select (data -> text , start , end );
85
+ if (guicontrol_edit (control ) != NULL )
86
+ edit_select (guicontrol_edit ( control ) , start , end );
87
+ else if (guicontrol_textview (control ) != NULL )
88
+ textview_select (guicontrol_textview ( control ) , start , end );
90
89
91
90
str_destroy (& left );
92
91
str_destroy (& right );
@@ -103,7 +102,7 @@ static void i_OnWrap(SelData *data, Event *e)
103
102
104
103
/*---------------------------------------------------------------------------*/
105
104
106
- static void i_OnEditFilter (SelData * data , Event * e )
105
+ static void i_filter_event (SelData * data , Event * e , const char_t * name )
107
106
{
108
107
const EvText * p = event_params (e , EvText );
109
108
cassert_no_null (data );
@@ -144,54 +143,32 @@ static void i_OnEditFilter(SelData *data, Event *e)
144
143
r -> apply = TRUE;
145
144
}
146
145
147
- textview_printf (data -> info_text , "Edit : Pos %d Len %d\n" , p -> cpos , p -> len );
146
+ textview_printf (data -> info_text , "%s : Pos %d Len %d\n" , name , p -> cpos , p -> len );
148
147
textview_scroll_caret (data -> info_text );
149
148
}
150
149
151
150
/*---------------------------------------------------------------------------*/
152
151
153
- static void i_OnTextViewFilter (SelData * data , Event * e )
152
+ static void i_OnEditFilter (SelData * data , Event * e )
154
153
{
155
- const EvText * p = event_params (e , EvText );
156
- cassert_no_null (data );
157
-
158
- /*
159
- * Convert the inserted text in caps.
160
- * p->text the inserted text only (const).
161
- * r->text the new filterd text.
162
- * p->cpos current caret position.
163
- * r->apply = TRUE means the editbox text has to be updated.
164
- * p->len number of chars inserted at left of caret (to caps).
165
- * We are working with UTF8-Strings. Sequential access.
166
- */
167
- if (button_get_state (data -> caps ) == ekGUI_ON && p -> len > 0 )
168
- {
169
- EvTextFilter * r = event_result (e , EvTextFilter );
170
- const char_t * src = p -> text ;
171
- char_t * dest = r -> text ;
172
- uint32_t cp = unicode_to_u32 (src , ekUTF8 );
173
- uint32_t pos = 0 ;
174
- while (cp != 0 )
175
- {
176
- uint32_t offset = 0 ;
154
+ i_filter_event (data , e , "Edit OnFilter" );
155
+ }
177
156
178
- if (cp >= 'a' && cp <= 'z' )
179
- cp -= 32 ;
157
+ /*---------------------------------------------------------------------------*/
180
158
181
- offset = unicode_to_char (cp , dest , ekUTF8 );
182
- dest += offset ;
183
- src = unicode_next (src , ekUTF8 );
184
- cp = unicode_to_u32 (src , ekUTF8 );
185
- pos += 1 ;
186
- }
159
+ static void i_OnEditChange (SelData * data , Event * e )
160
+ {
161
+ const EvText * p = event_params (e , EvText );
162
+ cassert_no_null (data );
163
+ textview_printf (data -> info_text , "Edit OnChange: Pos: %d Len %d\n" , p -> cpos , p -> len );
164
+ textview_scroll_caret (data -> info_text );
165
+ }
187
166
188
- * dest = 0 ;
189
- r -> cpos = p -> cpos ;
190
- r -> apply = TRUE;
191
- }
167
+ /*---------------------------------------------------------------------------*/
192
168
193
- textview_printf (data -> info_text , "TextView: Pos %d Len %d\n" , p -> cpos , p -> len );
194
- textview_scroll_caret (data -> info_text );
169
+ static void i_OnTextViewFilter (SelData * data , Event * e )
170
+ {
171
+ i_filter_event (data , e , "TextView OnFilter" );
195
172
}
196
173
197
174
/*---------------------------------------------------------------------------*/
@@ -245,37 +222,55 @@ static Layout *i_text_controls(SelData *data)
245
222
246
223
static Layout * i_layout (SelData * data )
247
224
{
248
- Layout * layout1 = layout_create (1 , 7 );
225
+ Layout * layout1 = layout_create (1 , 11 );
249
226
Layout * layout2 = i_text_controls (data );
250
227
Label * label1 = label_create ();
251
228
Label * label2 = label_create ();
252
229
Label * label3 = label_create ();
253
- Edit * edit = edit_create ();
230
+ Label * label4 = label_create ();
231
+ Label * label5 = label_create ();
232
+ Edit * edit1 = edit_create ();
233
+ Edit * edit2 = edit_multiline ();
234
+ Edit * edit3 = edit_multiline ();
254
235
TextView * text1 = textview_create ();
255
236
TextView * text2 = textview_create ();
256
237
cassert_no_null (data );
257
238
label_text (label1 , "EditBox" );
258
- label_text (label2 , "TextView" );
259
- label_text (label3 , "Info" );
260
- edit_text (edit , "This is a text in the EditBox control" );
261
- edit_OnFilter (edit , listener (data , i_OnEditFilter , SelData ));
239
+ label_text (label2 , "EditBox (multiline)" );
240
+ label_text (label3 , "EditBox (multiline with user-height)" );
241
+ label_text (label4 , "TextView" );
242
+ label_text (label5 , "Info" );
243
+ edit_text (edit1 , "This is a text in the EditBox control" );
244
+ edit_text (edit2 , "This is a text in the multiline EditBox control" );
245
+ edit_text (edit3 , "This is a text in the multiline EditBox control" );
246
+ edit_min_height (edit3 , 100 );
247
+ edit_OnFilter (edit1 , listener (data , i_OnEditFilter , SelData ));
248
+ edit_OnFilter (edit2 , listener (data , i_OnEditFilter , SelData ));
249
+ edit_OnFilter (edit3 , listener (data , i_OnEditFilter , SelData ));
250
+ edit_OnChange (edit1 , listener (data , i_OnEditChange , SelData ));
251
+ edit_OnChange (edit2 , listener (data , i_OnEditChange , SelData ));
252
+ edit_OnChange (edit3 , listener (data , i_OnEditChange , SelData ));
262
253
textview_writef (text1 , "This is another text in the TextView control, wider than the control." );
263
254
textview_editable (text1 , TRUE);
264
255
textview_OnFilter (text1 , listener (data , i_OnTextViewFilter , SelData ));
265
256
layout_label (layout1 , label1 , 0 , 0 );
266
- layout_edit (layout1 , edit , 0 , 1 );
257
+ layout_edit (layout1 , edit1 , 0 , 1 );
267
258
layout_label (layout1 , label2 , 0 , 2 );
268
- layout_textview (layout1 , text1 , 0 , 3 );
269
- layout_layout (layout1 , layout2 , 0 , 4 );
270
- layout_label (layout1 , label3 , 0 , 5 );
271
- layout_textview (layout1 , text2 , 0 , 6 );
272
- layout_tabstop (layout1 , 0 , 3 , TRUE);
273
- layout_tabstop (layout1 , 0 , 4 , FALSE);
274
- layout_halign (layout1 , 0 , 4 , ekLEFT );
259
+ layout_edit (layout1 , edit2 , 0 , 3 );
260
+ layout_label (layout1 , label3 , 0 , 4 );
261
+ layout_edit (layout1 , edit3 , 0 , 5 );
262
+ layout_label (layout1 , label4 , 0 , 6 );
263
+ layout_textview (layout1 , text1 , 0 , 7 );
264
+ layout_layout (layout1 , layout2 , 0 , 8 );
265
+ layout_label (layout1 , label5 , 0 , 9 );
266
+ layout_textview (layout1 , text2 , 0 , 10 );
267
+ layout_tabstop (layout1 , 0 , 7 , TRUE);
268
+ layout_tabstop (layout1 , 0 , 8 , FALSE);
269
+ layout_halign (layout1 , 0 , 8 , ekLEFT );
275
270
layout_vmargin (layout1 , 1 , 5 );
276
271
layout_vmargin (layout1 , 3 , 5 );
277
- layout_vmargin (layout1 , 4 , 5 );
278
- data -> edit = edit ;
272
+ layout_vmargin (layout1 , 5 , 5 );
273
+ layout_vmargin ( layout1 , 7 , 5 ) ;
279
274
data -> text = text1 ;
280
275
data -> info_text = text2 ;
281
276
return layout1 ;
0 commit comments