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