ui/motif/list.c

changeset 36
e4198fc2ead4
parent 34
0ec8a5f17782
child 43
157a21a914ac
equal deleted inserted replaced
35:3e8b5c9b4033 36:e4198fc2ead4
45 } 45 }
46 46
47 UIWIDGET ui_listview_var(UiObject *obj, UiListPtr *list, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { 47 UIWIDGET ui_listview_var(UiObject *obj, UiListPtr *list, ui_model_getvalue_f getvalue, ui_callback f, void *udata) {
48 UiList *ls = list->list; 48 UiList *ls = list->list;
49 49
50 //int count; 50 int count;
51 //XmStringTable items = ui_create_stringlist(list->list, getvalue, &count); 51 XmStringTable items = ui_create_stringlist(list->list, getvalue, &count);
52 int count = list->list->count(list->list);
53 XmStringTable items = (XmStringTable)XtMalloc(count * sizeof(XmString));
54 void *data = list->list->first(list->list);
55 for(int i=0;i<count;i++) {
56 items[i] = XmStringCreateLocalized(getvalue(data, 0));
57 data = list->list->next(list->list);
58 }
59 52
60 Arg args[8]; 53 Arg args[8];
61 int n = 0; 54 int n = 0;
62 XtSetArg(args[n], XmNitemCount, count); 55 XtSetArg(args[n], XmNitemCount, count);
63 n++; 56 n++;
64 XtSetArg(args[n], XmNitems, NULL); 57 XtSetArg(args[n], XmNitems, count == 0 ? NULL : items);
65 n++; 58 n++;
66 59
67 UiContainer *ct = uic_get_current_container(obj); 60 UiContainer *ct = uic_get_current_container(obj);
68 Widget parent = ct->add(ct, args, &n); 61 Widget parent = ct->add(ct, args, &n);
69 Widget widget= XmCreateScrolledList(parent, "listview", args, n); 62 Widget widget= XmCreateScrolledList(parent, "listview", args, n);
140 XmStringTable items = ui_create_stringlist( 133 XmStringTable items = ui_create_stringlist(
141 view->list->list, 134 view->list->list,
142 view->getvalue, 135 view->getvalue,
143 &count); 136 &count);
144 137
145 XtVaSetValues(view->widget, XmNitems, items, XmNitemCount, count, NULL); 138 XtVaSetValues(
139 view->widget,
140 XmNitems, count == 0 ? NULL : items,
141 XmNitemCount,
142 count,
143 NULL);
146 144
147 for (int i=0;i<count;i++) { 145 for (int i=0;i<count;i++) {
148 XmStringFree(items[i]); 146 XmStringFree(items[i]);
149 } 147 }
150 XtFree((char *)items); 148 XtFree((char *)items);

mercurial