ui/motif/text.c

changeset 554
28e490aa15e3
parent 488
e4de8ba906f8
child 555
0b1bb5687dca
equal deleted inserted replaced
553:90e38db0c755 554:28e490aa15e3
66 XmTextSetString(widget, value->value.ptr); 66 XmTextSetString(widget, value->value.ptr);
67 value->value.free(value->value.ptr); 67 value->value.free(value->value.ptr);
68 value->value.ptr = NULL; 68 value->value.ptr = NULL;
69 } 69 }
70 70
71 value->save = ui_textarea_save;
72 value->restore = ui_textarea_restore;
73 value->destroy = ui_textarea_text_destroy;
71 value->set = ui_textarea_set; 74 value->set = ui_textarea_set;
72 value->get = ui_textarea_get; 75 value->get = ui_textarea_get;
73 value->getsubstr = ui_textarea_getsubstr; 76 value->getsubstr = ui_textarea_getsubstr;
74 value->insert = ui_textarea_insert; 77 value->insert = ui_textarea_insert;
75 value->setposition = ui_textarea_setposition; 78 value->setposition = ui_textarea_setposition;
77 value->selection = ui_textarea_selection; 80 value->selection = ui_textarea_selection;
78 value->length = ui_textarea_length; 81 value->length = ui_textarea_length;
79 value->value.ptr = NULL; 82 value->value.ptr = NULL;
80 value->obj = widget; 83 value->obj = widget;
81 84
82 if(!value->undomgr) { 85 if(!value->data2) {
83 value->undomgr = ui_create_undomgr(); 86 value->data2 = ui_create_undomgr();
84 } 87 }
85 88
86 XtAddCallback( 89 XtAddCallback(
87 widget, 90 widget,
88 XmNmodifyVerifyCallback, 91 XmNmodifyVerifyCallback,
99 } 102 }
100 char *str = XmTextGetString(text->obj); 103 char *str = XmTextGetString(text->obj);
101 text->value.ptr = str; 104 text->value.ptr = str;
102 text->value.free = (ui_freefunc)XtFree; 105 text->value.free = (ui_freefunc)XtFree;
103 return str; 106 return str;
107 }
108
109 void ui_textarea_save(UiText *text) {
110 (void)ui_textarea_get(text);
111 }
112
113 void ui_textarea_restore(UiText *text) {
114 if(text->value.ptr) {
115 ui_textarea_set(text, text->value.ptr);
116 }
117 }
118
119 void ui_textarea_text_destroy(UiText *text) {
120 if(text->value.free) {
121 text->value.free(text->value.ptr);
122 }
123 if(text->data2) {
124 ui_destroy_undomgr(text->data2);
125 }
104 } 126 }
105 127
106 void ui_textarea_set(UiText *text, const char *str) { 128 void ui_textarea_set(UiText *text, const char *str) {
107 XmTextSetString(text->obj, (char*)str); 129 XmTextSetString(text->obj, (char*)str);
108 if(text->value.ptr) { 130 if(text->value.ptr) {
199 UiText *value = var->value; 221 UiText *value = var->value;
200 if(!value->obj) { 222 if(!value->obj) {
201 // TODO: bug, fix 223 // TODO: bug, fix
202 return; 224 return;
203 } 225 }
204 if(!value->undomgr) { 226 if(!value->data2) {
205 value->undomgr = ui_create_undomgr(); 227 value->data2 = ui_create_undomgr();
206 } 228 }
207 229
208 XmTextVerifyCallbackStruct *txv = (XmTextVerifyCallbackStruct*)data; 230 XmTextVerifyCallbackStruct *txv = (XmTextVerifyCallbackStruct*)data;
209 int type = txv->text->length > 0 ? UI_TEXTBUF_INSERT : UI_TEXTBUF_DELETE; 231 int type = txv->text->length > 0 ? UI_TEXTBUF_INSERT : UI_TEXTBUF_DELETE;
210 UiUndoMgr *mgr = value->undomgr; 232 UiUndoMgr *mgr = value->data2;
211 if(!mgr->event) { 233 if(!mgr->event) {
212 return; 234 return;
213 } 235 }
214 236
215 char *text = txv->text->ptr; 237 char *text = txv->text->ptr;
305 free(op); 327 free(op);
306 } 328 }
307 329
308 330
309 void ui_text_undo(UiText *value) { 331 void ui_text_undo(UiText *value) {
310 UiUndoMgr *mgr = value->undomgr; 332 UiUndoMgr *mgr = value->data2;
311 333
312 if(mgr->cur) { 334 if(mgr->cur) {
313 UiTextBufOp *op = mgr->cur; 335 UiTextBufOp *op = mgr->cur;
314 mgr->event = 0; 336 mgr->event = 0;
315 switch(op->type) { 337 switch(op->type) {
326 mgr->cur = mgr->cur->prev; 348 mgr->cur = mgr->cur->prev;
327 } 349 }
328 } 350 }
329 351
330 void ui_text_redo(UiText *value) { 352 void ui_text_redo(UiText *value) {
331 UiUndoMgr *mgr = value->undomgr; 353 UiUndoMgr *mgr = value->data2;
332 354
333 UiTextBufOp *elm = NULL; 355 UiTextBufOp *elm = NULL;
334 if(mgr->cur) { 356 if(mgr->cur) {
335 if(mgr->cur->next) { 357 if(mgr->cur->next) {
336 elm = mgr->cur->next; 358 elm = mgr->cur->next;

mercurial