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