ui/motif/label.c

changeset 113
dde28a806552
parent 112
c3f2f16fa4b8
equal deleted inserted replaced
112:c3f2f16fa4b8 113:dde28a806552
45 45
46 Widget parent = ui_container_prepare(ctn, &layout, xargs, &n); 46 Widget parent = ui_container_prepare(ctn, &layout, xargs, &n);
47 47
48 XtSetArg(xargs[n], XmNalignment, align); n++; 48 XtSetArg(xargs[n], XmNalignment, align); n++;
49 XmString label = NULL; 49 XmString label = NULL;
50 if(args->label) { 50 char *lbl = (char*)args->label;
51 label = XmStringCreateLocalized((char*)args->label); 51 UiVar* var = uic_widget_var(obj->ctx, obj->ctx, args->value, args->varname, UI_VAR_STRING);
52 XtSetArg(xargs[n], XmNlabelString, label); n++; 52 if(var) {
53 } 53 UiString *s = var->value;
54 54 lbl = s->value.ptr;
55 }
56
57 if(lbl) {
58 label = XmStringCreateLocalized(lbl);
59 } else {
60 label = XmStringCreateLocalized("");
61 }
62
63 XtSetArg(xargs[n], XmNlabelString, label); n++;
55 char *name = args->name ? (char*)args->name : "label"; 64 char *name = args->name ? (char*)args->name : "label";
56 Widget w = XmCreateLabel(parent, name, xargs, n); 65 Widget w = XmCreateLabel(parent, name, xargs, n);
57 XtManageChild(w); 66 XtManageChild(w);
58 ui_container_add(ctn, w); 67 ui_container_add(ctn, w);
59 68
60 XmStringFree(label); 69 XmStringFree(label);
70
71 if(var) {
72 UiString *s = var->value;
73 s->obj = w;
74 s->get = ui_label_get;
75 s->set = ui_label_set;
76 }
77
61 return w; 78 return w;
62 } 79 }
63 80
64 UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs *args) { 81 UIWIDGET ui_label_create(UiObject* obj, UiLabelArgs *args) {
65 return label_create(obj, args, XmALIGNMENT_CENTER); 82 return label_create(obj, args, XmALIGNMENT_CENTER);
71 88
72 UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs *args) { 89 UIWIDGET ui_rlabel_create(UiObject* obj, UiLabelArgs *args) {
73 return label_create(obj, args, XmALIGNMENT_END); 90 return label_create(obj, args, XmALIGNMENT_END);
74 } 91 }
75 92
93 char* ui_label_get(UiString *s) {
94 if(s->value.free) {
95 s->value.free(s->value.ptr);
96 s->value.free = NULL;
97 s->value.ptr = NULL;
98 }
99 Widget w = s->obj;
100 XmString s1 = NULL;
101 XtVaGetValues(w, XmNlabelString, &s1, NULL);
102 if(s1) {
103 char *value;
104 if(XmStringGetLtoR(s1, XmFONTLIST_DEFAULT_TAG, &value)) {
105 s->value.ptr = value;
106 s->value.free = (cx_destructor_func)XtFree;
107 }
108 }
109 return s->value.ptr;
110 }
111
112 void ui_label_set(UiString *s, const char *str) {
113 if(s->value.free) {
114 s->value.free(s->value.ptr);
115 s->value.free = NULL;
116 s->value.ptr = NULL;
117 }
118 Widget w = s->obj;
119 XmString s1 = XmStringCreateLocalized(str ? (char*)str : "");
120 XtVaSetValues(w, XmNlabelString, s1, NULL);
121 XmStringFree(s1);
122 }
76 123
77 /* -------------------------- progressbar/spiner -------------------------- */ 124 /* -------------------------- progressbar/spiner -------------------------- */
78 125
79 static void ui_destroy_progressbar(Widget w, UiProgressBar *pb, XtPointer d) { 126 static void ui_destroy_progressbar(Widget w, UiProgressBar *pb, XtPointer d) {
80 // TODO: free other stuff 127 // TODO: free other stuff

mercurial