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; |