44 |
44 |
45 Widget parent = ct->add(ct, args, &n); |
45 Widget parent = ct->add(ct, args, &n); |
46 Widget text_area = XmCreateScrolledText(parent, "text_area", args, n); |
46 Widget text_area = XmCreateScrolledText(parent, "text_area", args, n); |
47 XtManageChild(text_area); |
47 XtManageChild(text_area); |
48 |
48 |
|
49 UiTextArea *uitext = ucx_mempool_malloc( |
|
50 obj->ctx->mempool, |
|
51 sizeof(UiTextArea)); |
|
52 uitext->ctx = obj->ctx; |
|
53 uitext->last_selection_state = 0; |
|
54 XtAddCallback( |
|
55 text_area, |
|
56 XmNmotionVerifyCallback, |
|
57 (XtCallbackProc)ui_text_selection_callback, |
|
58 uitext); |
|
59 |
49 // bind value |
60 // bind value |
50 if(value) { |
61 if(value) { |
51 value->set = ui_textarea_set; |
62 value->set = ui_textarea_set; |
52 value->get = ui_textarea_get; |
63 value->get = ui_textarea_get; |
53 value->getsubstr = ui_textarea_getsubstr; |
64 value->getsubstr = ui_textarea_getsubstr; |
110 mgr->begin = NULL; |
121 mgr->begin = NULL; |
111 mgr->cur = NULL; |
122 mgr->cur = NULL; |
112 mgr->length = 0; |
123 mgr->length = 0; |
113 mgr->event = 1; |
124 mgr->event = 1; |
114 return mgr; |
125 return mgr; |
|
126 } |
|
127 |
|
128 void ui_text_selection_callback( |
|
129 Widget widget, |
|
130 UiTextArea *textarea, |
|
131 XtPointer data) |
|
132 { |
|
133 long left = 0; |
|
134 long right = 0; |
|
135 XmTextGetSelectionPosition(widget, &left, &right); |
|
136 int sel = left < right ? 1 : 0; |
|
137 if(sel != textarea->last_selection_state) { |
|
138 if(sel) { |
|
139 ui_set_group(textarea->ctx, UI_GROUP_SELECTION); |
|
140 } else { |
|
141 ui_unset_group(textarea->ctx, UI_GROUP_SELECTION); |
|
142 } |
|
143 } |
|
144 textarea->last_selection_state = sel; |
115 } |
145 } |
116 |
146 |
117 void ui_text_modify_callback(Widget widget, UiText *value, XtPointer data) { |
147 void ui_text_modify_callback(Widget widget, UiText *value, XtPointer data) { |
118 XmTextVerifyCallbackStruct *txv = (XmTextVerifyCallbackStruct*)data; |
148 XmTextVerifyCallbackStruct *txv = (XmTextVerifyCallbackStruct*)data; |
119 int type = txv->text->length > 0 ? UI_TEXTBUF_INSERT : UI_TEXTBUF_DELETE; |
149 int type = txv->text->length > 0 ? UI_TEXTBUF_INSERT : UI_TEXTBUF_DELETE; |