44 |
44 |
45 UIWIDGET ui_listview_str(UiObject *obj, UiList *list, ui_callback f, void *udata) { |
45 UIWIDGET ui_listview_str(UiObject *obj, UiList *list, ui_callback f, void *udata) { |
46 return ui_listview(obj, list, ui_strmodel_getvalue, f, udata); |
46 return ui_listview(obj, list, ui_strmodel_getvalue, f, udata); |
47 } |
47 } |
48 |
48 |
49 UIWIDGET ui_listview_var(UiObject *obj, UiVar *var, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { |
49 UIWIDGET ui_listview_var(UiObject *obj, UiVar *var, ui_getvaluefunc getvalue, ui_callback f, void *udata) { |
50 // create treeview |
50 // create treeview |
51 GtkWidget *view = gtk_tree_view_new(); |
51 GtkWidget *view = gtk_tree_view_new(); |
52 GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); |
52 GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); |
53 GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes(NULL, renderer, "text", 0, NULL); |
53 GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes(NULL, renderer, "text", 0, NULL); |
54 gtk_tree_view_append_column(GTK_TREE_VIEW(view), column); |
54 gtk_tree_view_append_column(GTK_TREE_VIEW(view), column); |
62 #endif |
62 #endif |
63 #else |
63 #else |
64 // TODO: implement for gtk2 |
64 // TODO: implement for gtk2 |
65 #endif |
65 #endif |
66 |
66 |
67 UiModelInfo *modelinfo = ui_model_info(obj->ctx, UI_STRING, "", -1); |
67 UiModel *model = ui_model_info(obj->ctx, UI_STRING, "", -1); |
68 modelinfo->getvalue = getvalue; |
68 model->getvalue = getvalue; |
69 UiList *list = var->value; |
69 UiList *list = var->value; |
70 UiListModel *model = ui_list_model_new(var, modelinfo); |
70 UiListModel *listmodel = ui_list_model_new(var, model); |
71 gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(model)); |
71 gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(listmodel)); |
72 |
72 |
73 UiListView *listview = ucx_mempool_malloc(obj->ctx->mempool, sizeof(UiListView)); |
73 UiListView *listview = malloc(sizeof(UiListView)); |
74 listview->ctx = obj->ctx; |
74 listview->ctx = obj->ctx; |
75 listview->widget = view; |
75 listview->widget = view; |
76 listview->var = var; |
76 listview->var = var; |
77 listview->modelinfo = modelinfo; |
77 listview->model = model; |
78 g_signal_connect( |
78 g_signal_connect( |
79 view, |
79 view, |
80 "destroy", |
80 "destroy", |
81 G_CALLBACK(ui_listview_destroy), |
81 G_CALLBACK(ui_listview_destroy), |
82 listview); |
82 listview); |
116 ct->current = view; |
116 ct->current = view; |
117 |
117 |
118 return scroll_area; |
118 return scroll_area; |
119 } |
119 } |
120 |
120 |
121 UIWIDGET ui_listview(UiObject *obj, UiList *list, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { |
121 UIWIDGET ui_listview(UiObject *obj, UiList *list, ui_getvaluefunc getvalue, ui_callback f, void *udata) { |
122 UiVar *var = malloc(sizeof(UiVar)); |
122 UiVar *var = malloc(sizeof(UiVar)); |
123 var->value = list; |
123 var->value = list; |
124 var->type = UI_VAR_SPECIAL; |
124 var->type = UI_VAR_SPECIAL; |
125 return ui_listview_var(obj, var, getvalue, f, udata); |
125 return ui_listview_var(obj, var, getvalue, f, udata); |
126 } |
126 } |
127 |
127 |
128 UIWIDGET ui_listview_nv(UiObject *obj, char *varname, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { |
128 UIWIDGET ui_listview_nv(UiObject *obj, char *varname, ui_getvaluefunc getvalue, ui_callback f, void *udata) { |
129 UiVar *var = uic_create_var(obj->ctx, varname, UI_VAR_LIST); |
129 UiVar *var = uic_create_var(obj->ctx, varname, UI_VAR_LIST); |
130 if(var) { |
130 if(var) { |
131 return ui_listview_var(obj, var, getvalue, f, udata); |
131 return ui_listview_var(obj, var, getvalue, f, udata); |
132 } else { |
132 } else { |
133 // TODO: error |
133 // TODO: error |
134 } |
134 } |
135 return NULL; |
135 return NULL; |
136 } |
136 } |
137 |
137 |
138 |
138 |
139 UIWIDGET ui_table_var(UiObject *obj, UiVar *var, UiModelInfo *modelinfo) { |
139 UIWIDGET ui_table_var(UiObject *obj, UiVar *var, UiModel *model, UiListCallbacks cb) { |
140 // create treeview |
140 // create treeview |
141 GtkWidget *view = gtk_tree_view_new(); |
141 GtkWidget *view = gtk_tree_view_new(); |
142 int addi = 0; |
142 int addi = 0; |
143 for(int i=0;i<modelinfo->columns;i++) { |
143 for(int i=0;i<model->columns;i++) { |
144 GtkTreeViewColumn *column = NULL; |
144 GtkTreeViewColumn *column = NULL; |
145 if(modelinfo->types[i] == UI_ICON_TEXT) { |
145 if(model->types[i] == UI_ICON_TEXT) { |
146 column = gtk_tree_view_column_new(); |
146 column = gtk_tree_view_column_new(); |
147 gtk_tree_view_column_set_title(column, modelinfo->titles[i]); |
147 gtk_tree_view_column_set_title(column, model->titles[i]); |
148 |
148 |
149 GtkCellRenderer *iconrenderer = gtk_cell_renderer_pixbuf_new(); |
149 GtkCellRenderer *iconrenderer = gtk_cell_renderer_pixbuf_new(); |
150 GtkCellRenderer *textrenderer = gtk_cell_renderer_text_new(); |
150 GtkCellRenderer *textrenderer = gtk_cell_renderer_text_new(); |
151 |
151 |
152 gtk_tree_view_column_pack_end(column, textrenderer, TRUE); |
152 gtk_tree_view_column_pack_end(column, textrenderer, TRUE); |
176 #else |
176 #else |
177 |
177 |
178 #endif |
178 #endif |
179 |
179 |
180 UiList *list = var->value; |
180 UiList *list = var->value; |
181 UiListModel *model = ui_list_model_new(var, modelinfo); |
181 UiListModel *listmodel = ui_list_model_new(var, model); |
182 gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(model)); |
182 gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(listmodel)); |
183 |
183 |
184 // add TreeView as observer to the UiList to update the TreeView if the |
184 // add TreeView as observer to the UiList to update the TreeView if the |
185 // data changes |
185 // data changes |
186 UiListView *tableview = ucx_mempool_malloc(obj->ctx->mempool, sizeof(UiListView)); |
186 UiListView *tableview = ucx_mempool_malloc(obj->ctx->mempool, sizeof(UiListView)); |
187 tableview->ctx = obj->ctx; |
187 tableview->ctx = obj->ctx; |
188 tableview->widget = view; |
188 tableview->widget = view; |
189 tableview->var = var; |
189 tableview->var = var; |
190 tableview->modelinfo = modelinfo; |
190 tableview->model = model; |
191 g_signal_connect( |
191 g_signal_connect( |
192 view, |
192 view, |
193 "destroy", |
193 "destroy", |
194 G_CALLBACK(ui_listview_destroy), |
194 G_CALLBACK(ui_listview_destroy), |
195 tableview); |
195 tableview); |
199 list->obj = tableview; |
199 list->obj = tableview; |
200 |
200 |
201 // add callback |
201 // add callback |
202 UiTreeEventData *event = ui_malloc(obj->ctx, sizeof(UiTreeEventData)); |
202 UiTreeEventData *event = ui_malloc(obj->ctx, sizeof(UiTreeEventData)); |
203 event->obj = obj; |
203 event->obj = obj; |
204 event->activate = modelinfo->activate; |
204 event->activate = cb.activate; |
205 event->selection = modelinfo->selection; |
205 event->selection = cb.selection; |
206 event->userdata = modelinfo->userdata; |
206 event->userdata = cb.userdata; |
207 if(modelinfo->activate) { |
207 if(cb.activate) { |
208 g_signal_connect( |
208 g_signal_connect( |
209 view, |
209 view, |
210 "row-activated", |
210 "row-activated", |
211 G_CALLBACK(ui_listview_activate_event), |
211 G_CALLBACK(ui_listview_activate_event), |
212 event); |
212 event); |
213 } |
213 } |
214 if(modelinfo->selection) { |
214 if(cb.selection) { |
215 GtkTreeSelection *selection = gtk_tree_view_get_selection( |
215 GtkTreeSelection *selection = gtk_tree_view_get_selection( |
216 GTK_TREE_VIEW(view)); |
216 GTK_TREE_VIEW(view)); |
217 g_signal_connect( |
217 g_signal_connect( |
218 selection, |
218 selection, |
219 "changed", |
219 "changed", |
241 ct->current = view; |
241 ct->current = view; |
242 |
242 |
243 return scroll_area; |
243 return scroll_area; |
244 } |
244 } |
245 |
245 |
246 UIWIDGET ui_table(UiObject *obj, UiList *list, UiModelInfo *modelinfo) { |
246 UIWIDGET ui_table(UiObject *obj, UiList *list, UiModel *model, UiListCallbacks cb) { |
247 UiVar *var = malloc(sizeof(UiVar)); |
247 UiVar *var = malloc(sizeof(UiVar)); |
248 var->value = list; |
248 var->value = list; |
249 var->type = UI_VAR_SPECIAL; |
249 var->type = UI_VAR_SPECIAL; |
250 return ui_table_var(obj, var, modelinfo); |
250 return ui_table_var(obj, var, model, cb); |
251 } |
251 } |
252 |
252 |
253 UIWIDGET ui_table_nv(UiObject *obj, char *varname, UiModelInfo *modelinfo) { |
253 UIWIDGET ui_table_nv(UiObject *obj, char *varname, UiModel *model, UiListCallbacks cb) { |
254 UiVar *var = uic_create_var(obj->ctx, varname, UI_VAR_LIST); |
254 UiVar *var = uic_create_var(obj->ctx, varname, UI_VAR_LIST); |
255 if(var) { |
255 if(var) { |
256 return ui_table_var(obj, var, modelinfo); |
256 return ui_table_var(obj, var, model, cb); |
257 } else { |
257 } else { |
258 // TODO: error |
258 // TODO: error |
259 } |
259 } |
260 return NULL; |
260 return NULL; |
261 } |
261 } |
262 |
262 |
263 void ui_listview_update(UiList *list, int i) { |
263 void ui_listview_update(UiList *list, int i) { |
264 UiListView *view = list->obj; |
264 UiListView *view = list->obj; |
265 UiListModel *model = ui_list_model_new(view->var, view->modelinfo); |
265 UiListModel *model = ui_list_model_new(view->var, view->model); |
266 gtk_tree_view_set_model(GTK_TREE_VIEW(view->widget), GTK_TREE_MODEL(model)); |
266 gtk_tree_view_set_model(GTK_TREE_VIEW(view->widget), GTK_TREE_MODEL(model)); |
267 // TODO: free old model |
267 // TODO: free old model |
268 } |
268 } |
269 |
269 |
270 void ui_listview_destroy(GtkWidget *w, UiListView *v) { |
270 void ui_listview_destroy(GtkWidget *w, UiListView *v) { |
353 |
353 |
354 UIWIDGET ui_combobox_str(UiObject *obj, UiList *list, ui_callback f, void *udata) { |
354 UIWIDGET ui_combobox_str(UiObject *obj, UiList *list, ui_callback f, void *udata) { |
355 return ui_combobox(obj, list, ui_strmodel_getvalue, f, udata); |
355 return ui_combobox(obj, list, ui_strmodel_getvalue, f, udata); |
356 } |
356 } |
357 |
357 |
358 UIWIDGET ui_combobox(UiObject *obj, UiList *list, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { |
358 UIWIDGET ui_combobox(UiObject *obj, UiList *list, ui_getvaluefunc getvalue, ui_callback f, void *udata) { |
359 UiVar *var = malloc(sizeof(UiVar)); |
359 UiVar *var = malloc(sizeof(UiVar)); |
360 var->value = list; |
360 var->value = list; |
361 var->type = UI_VAR_SPECIAL; |
361 var->type = UI_VAR_SPECIAL; |
362 return ui_combobox_var(obj, var, getvalue, f, udata); |
362 return ui_combobox_var(obj, var, getvalue, f, udata); |
363 } |
363 } |
364 |
364 |
365 UIWIDGET ui_combobox_nv(UiObject *obj, char *varname, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { |
365 UIWIDGET ui_combobox_nv(UiObject *obj, char *varname, ui_getvaluefunc getvalue, ui_callback f, void *udata) { |
366 UiVar *var = uic_create_var(obj->ctx, varname, UI_VAR_LIST); |
366 UiVar *var = uic_create_var(obj->ctx, varname, UI_VAR_LIST); |
367 if(var) { |
367 if(var) { |
368 return ui_combobox_var(obj, var, getvalue, f, udata); |
368 return ui_combobox_var(obj, var, getvalue, f, udata); |
369 } else { |
369 } else { |
370 // TODO: error |
370 // TODO: error |
371 } |
371 } |
372 return NULL; |
372 return NULL; |
373 } |
373 } |
374 |
374 |
375 UIWIDGET ui_combobox_var(UiObject *obj, UiVar *var, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { |
375 UIWIDGET ui_combobox_var(UiObject *obj, UiVar *var, ui_getvaluefunc getvalue, ui_callback f, void *udata) { |
376 UiModelInfo *modelinfo = ui_model_info(obj->ctx, UI_STRING, "", -1); |
376 UiModel *model = ui_model_info(obj->ctx, UI_STRING, "", -1); |
377 modelinfo->getvalue = getvalue; |
377 model->getvalue = getvalue; |
378 UiList *list = var->value; |
378 UiListModel *listmodel = ui_list_model_new(var, model); |
379 UiListModel *model = ui_list_model_new(var, modelinfo); |
379 |
380 |
380 GtkWidget *combobox = ui_create_combobox(obj, listmodel, f, udata); |
381 GtkWidget *combobox = ui_create_combobox(obj, model, f, udata); |
|
382 UiContainer *ct = uic_get_current_container(obj); |
381 UiContainer *ct = uic_get_current_container(obj); |
383 ct->add(ct, combobox, FALSE); |
382 ct->add(ct, combobox, FALSE); |
384 } |
383 } |
385 |
384 |
386 GtkWidget* ui_create_combobox(UiObject *obj, UiListModel *model, ui_callback f, void *udata) { |
385 GtkWidget* ui_create_combobox(UiObject *obj, UiListModel *model, ui_callback f, void *udata) { |