ui/cocoa/text.m

changeset 1164
3c037b84e6eb
parent 1116
677f7f68f5aa
child 1173
ce0e443174d7
equal deleted inserted replaced
1163:a32411b88442 1164:3c037b84e6eb
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) {

mercurial