| 70 text->selection = ui_textarea_selection; |
70 text->selection = ui_textarea_selection; |
| 71 text->length = ui_textarea_length; |
71 text->length = ui_textarea_length; |
| 72 text->remove = ui_textarea_remove; |
72 text->remove = ui_textarea_remove; |
| 73 } |
73 } |
| 74 |
74 |
| |
75 if(args->onchange || args->ontextchanged || args->onchange_action || args->ontextchanged_action) { |
| |
76 |
| |
77 } |
| |
78 |
| 75 return (__bridge void*)scrollview; |
79 return (__bridge void*)scrollview; |
| 76 } |
80 } |
| 77 |
81 |
| 78 UIWIDGET ui_textarea_gettextwidget(UIWIDGET textarea) { |
82 UIWIDGET ui_textarea_gettextwidget(UIWIDGET textarea) { |
| 79 id view = (__bridge id)textarea; |
83 id view = (__bridge id)textarea; |
| 265 |
269 |
| 266 NSRange range = NSMakeRange(begin, end - begin); |
270 NSRange range = NSMakeRange(begin, end - begin); |
| 267 [[textview textStorage] deleteCharactersInRange:range]; |
271 [[textview textStorage] deleteCharactersInRange:range]; |
| 268 } |
272 } |
| 269 |
273 |
| |
274 |
| |
275 |
| |
276 @implementation TextAreaDelegate |
| |
277 |
| |
278 - (id)init:(UiObject*)obj var:(UiVar*)var args:(UiTextAreaArgs*)args { |
| |
279 self.onchange = args->onchange; |
| |
280 self.onchangedata = args->onchangedata; |
| |
281 if(args->onchange_action) { |
| |
282 self.onchange_action = [[NSString alloc]initWithUTF8String:args->onchange_action]; |
| |
283 } |
| |
284 self.ontextchanged = args->ontextchanged; |
| |
285 self.ontextchangeddata = args->ontextchangeddata; |
| |
286 if(args->ontextchanged_action) { |
| |
287 self.ontextchanged_action = [[NSString alloc]initWithUTF8String:args->ontextchanged_action]; |
| |
288 } |
| |
289 self.obj = obj; |
| |
290 self.var = var; |
| |
291 return self; |
| |
292 } |
| |
293 |
| |
294 - (BOOL) textView:(NSTextView *) textView |
| |
295 shouldChangeTextInRange:(NSRange) affectedCharRange |
| |
296 replacementString:(NSString *) replacementString { |
| |
297 |
| |
298 if(_onchange == nil && _onchange_action == nil) { |
| |
299 return YES; |
| |
300 } |
| |
301 |
| |
302 UiEvent event; |
| |
303 event.obj = _obj; |
| |
304 event.window = event.obj->window; |
| |
305 event.document = event.obj->ctx->document; |
| |
306 event.intval = 0; |
| |
307 event.set = ui_get_setop(); |
| |
308 // event data not set yet |
| |
309 |
| |
310 if(affectedCharRange.length > 0) { |
| |
311 UiTextChangeEventData eventdata; |
| |
312 eventdata.type = UI_TEXT_DELETE; |
| |
313 eventdata.begin = (int)affectedCharRange.location; |
| |
314 eventdata.end = (int)(affectedCharRange.location + affectedCharRange.length); |
| |
315 eventdata.text = NULL; |
| |
316 eventdata.length = 0; |
| |
317 |
| |
318 event.eventdata = &eventdata; |
| |
319 event.eventdatatype = UI_EVENT_DATA_TEXT_CHANGED; |
| |
320 |
| |
321 if(_onchange) { |
| |
322 _onchange(&event, _onchangedata); |
| |
323 } |
| |
324 |
| |
325 if(_onchange_action) { |
| |
326 uic_action_callback(&event, _onchange_action.UTF8String); |
| |
327 } |
| |
328 } |
| |
329 |
| |
330 if(replacementString.length > 0) { |
| |
331 UiTextChangeEventData eventdata; |
| |
332 eventdata.type = UI_TEXT_INSERT; |
| |
333 eventdata.begin = (int)affectedCharRange.location; |
| |
334 eventdata.end = 0; |
| |
335 eventdata.text = replacementString.UTF8String; |
| |
336 eventdata.length = (int)replacementString.length; |
| |
337 |
| |
338 event.eventdata = &eventdata; |
| |
339 event.eventdatatype = UI_EVENT_DATA_TEXT_CHANGED; |
| |
340 |
| |
341 if(_onchange) { |
| |
342 _onchange(&event, _onchangedata); |
| |
343 } |
| |
344 |
| |
345 if(_onchange_action) { |
| |
346 uic_action_callback(&event, _onchange_action.UTF8String); |
| |
347 } |
| |
348 } |
| |
349 |
| |
350 return YES; |
| |
351 } |
| |
352 |
| |
353 - (void) textDidChange:(NSNotification *) notification { |
| |
354 UiEvent event; |
| |
355 event.obj = _obj; |
| |
356 event.window = event.obj->window; |
| |
357 event.document = event.obj->ctx->document; |
| |
358 if(_var) { |
| |
359 event.eventdata = _var->value; |
| |
360 event.eventdatatype = UI_EVENT_DATA_TEXT_VALUE; |
| |
361 } else { |
| |
362 event.eventdata = NULL; |
| |
363 event.eventdatatype = 0; |
| |
364 } |
| |
365 event.intval = 0; |
| |
366 event.set = ui_get_setop(); |
| |
367 |
| |
368 if(_ontextchanged) { |
| |
369 _ontextchanged(&event, _ontextchangeddata); |
| |
370 } |
| |
371 |
| |
372 if(_ontextchanged_action) { |
| |
373 uic_action_callback(&event, _ontextchanged_action.UTF8String); |
| |
374 } |
| |
375 } |
| |
376 |
| |
377 @end |
| 270 |
378 |
| 271 |
379 |
| 272 /* -------------------------- TextField -------------------------- */ |
380 /* -------------------------- TextField -------------------------- */ |
| 273 |
381 |
| 274 static void textfield_geteventdata(id sender, UiVar *var, void **eventdata, int *eventdatatype, int *value) { |
382 static void textfield_geteventdata(id sender, UiVar *var, void **eventdata, int *eventdatatype, int *value) { |