ui/motif/text.c

changeset 22
bcf880b29bc3
parent 12
fe94e0fb9ef3
child 27
77b09bb52ca0
equal deleted inserted replaced
21:012418e7dc90 22:bcf880b29bc3
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;

mercurial