diff -r cc2170ea05ad -r 46448d38885c ui/gtk/tree.c --- a/ui/gtk/tree.c Fri Nov 10 18:04:40 2017 +0100 +++ b/ui/gtk/tree.c Sat Nov 11 08:34:06 2017 +0100 @@ -46,7 +46,7 @@ return ui_listview(obj, list, ui_strmodel_getvalue, f, udata); } -UIWIDGET ui_listview_var(UiObject *obj, UiVar *var, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { +UIWIDGET ui_listview_var(UiObject *obj, UiVar *var, ui_getvaluefunc getvalue, ui_callback f, void *udata) { // create treeview GtkWidget *view = gtk_tree_view_new(); GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); @@ -64,17 +64,17 @@ // TODO: implement for gtk2 #endif - UiModelInfo *modelinfo = ui_model_info(obj->ctx, UI_STRING, "", -1); - modelinfo->getvalue = getvalue; + UiModel *model = ui_model_info(obj->ctx, UI_STRING, "", -1); + model->getvalue = getvalue; UiList *list = var->value; - UiListModel *model = ui_list_model_new(var, modelinfo); - gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(model)); + UiListModel *listmodel = ui_list_model_new(var, model); + gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(listmodel)); - UiListView *listview = ucx_mempool_malloc(obj->ctx->mempool, sizeof(UiListView)); + UiListView *listview = malloc(sizeof(UiListView)); listview->ctx = obj->ctx; listview->widget = view; listview->var = var; - listview->modelinfo = modelinfo; + listview->model = model; g_signal_connect( view, "destroy", @@ -118,14 +118,14 @@ return scroll_area; } -UIWIDGET ui_listview(UiObject *obj, UiList *list, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { +UIWIDGET ui_listview(UiObject *obj, UiList *list, ui_getvaluefunc getvalue, ui_callback f, void *udata) { UiVar *var = malloc(sizeof(UiVar)); var->value = list; var->type = UI_VAR_SPECIAL; return ui_listview_var(obj, var, getvalue, f, udata); } -UIWIDGET ui_listview_nv(UiObject *obj, char *varname, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { +UIWIDGET ui_listview_nv(UiObject *obj, char *varname, ui_getvaluefunc getvalue, ui_callback f, void *udata) { UiVar *var = uic_create_var(obj->ctx, varname, UI_VAR_LIST); if(var) { return ui_listview_var(obj, var, getvalue, f, udata); @@ -136,15 +136,15 @@ } -UIWIDGET ui_table_var(UiObject *obj, UiVar *var, UiModelInfo *modelinfo) { +UIWIDGET ui_table_var(UiObject *obj, UiVar *var, UiModel *model, UiListCallbacks cb) { // create treeview GtkWidget *view = gtk_tree_view_new(); int addi = 0; - for(int i=0;icolumns;i++) { + for(int i=0;icolumns;i++) { GtkTreeViewColumn *column = NULL; - if(modelinfo->types[i] == UI_ICON_TEXT) { + if(model->types[i] == UI_ICON_TEXT) { column = gtk_tree_view_column_new(); - gtk_tree_view_column_set_title(column, modelinfo->titles[i]); + gtk_tree_view_column_set_title(column, model->titles[i]); GtkCellRenderer *iconrenderer = gtk_cell_renderer_pixbuf_new(); GtkCellRenderer *textrenderer = gtk_cell_renderer_text_new(); @@ -160,7 +160,7 @@ } else { GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); column = gtk_tree_view_column_new_with_attributes( - modelinfo->titles[i], + model->titles[i], renderer, "text", i + addi, @@ -178,8 +178,8 @@ #endif UiList *list = var->value; - UiListModel *model = ui_list_model_new(var, modelinfo); - gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(model)); + UiListModel *listmodel = ui_list_model_new(var, model); + gtk_tree_view_set_model(GTK_TREE_VIEW(view), GTK_TREE_MODEL(listmodel)); // add TreeView as observer to the UiList to update the TreeView if the // data changes @@ -187,7 +187,7 @@ tableview->ctx = obj->ctx; tableview->widget = view; tableview->var = var; - tableview->modelinfo = modelinfo; + tableview->model = model; g_signal_connect( view, "destroy", @@ -201,17 +201,17 @@ // add callback UiTreeEventData *event = ui_malloc(obj->ctx, sizeof(UiTreeEventData)); event->obj = obj; - event->activate = modelinfo->activate; - event->selection = modelinfo->selection; - event->userdata = modelinfo->userdata; - if(modelinfo->activate) { + event->activate = cb.activate; + event->selection = cb.selection; + event->userdata = cb.userdata; + if(cb.activate) { g_signal_connect( view, "row-activated", G_CALLBACK(ui_listview_activate_event), event); } - if(modelinfo->selection) { + if(cb.selection) { GtkTreeSelection *selection = gtk_tree_view_get_selection( GTK_TREE_VIEW(view)); g_signal_connect( @@ -243,17 +243,17 @@ return scroll_area; } -UIWIDGET ui_table(UiObject *obj, UiList *list, UiModelInfo *modelinfo) { +UIWIDGET ui_table(UiObject *obj, UiList *list, UiModel *model, UiListCallbacks cb) { UiVar *var = malloc(sizeof(UiVar)); var->value = list; var->type = UI_VAR_SPECIAL; - return ui_table_var(obj, var, modelinfo); + return ui_table_var(obj, var, model, cb); } -UIWIDGET ui_table_nv(UiObject *obj, char *varname, UiModelInfo *modelinfo) { +UIWIDGET ui_table_nv(UiObject *obj, char *varname, UiModel *model, UiListCallbacks cb) { UiVar *var = uic_create_var(obj->ctx, varname, UI_VAR_LIST); if(var) { - return ui_table_var(obj, var, modelinfo); + return ui_table_var(obj, var, model, cb); } else { // TODO: error } @@ -262,7 +262,7 @@ void ui_listview_update(UiList *list, int i) { UiListView *view = list->obj; - UiListModel *model = ui_list_model_new(view->var, view->modelinfo); + UiListModel *model = ui_list_model_new(view->var, view->model); gtk_tree_view_set_model(GTK_TREE_VIEW(view->widget), GTK_TREE_MODEL(model)); // TODO: free old model } @@ -355,14 +355,14 @@ return ui_combobox(obj, list, ui_strmodel_getvalue, f, udata); } -UIWIDGET ui_combobox(UiObject *obj, UiList *list, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { +UIWIDGET ui_combobox(UiObject *obj, UiList *list, ui_getvaluefunc getvalue, ui_callback f, void *udata) { UiVar *var = malloc(sizeof(UiVar)); var->value = list; var->type = UI_VAR_SPECIAL; return ui_combobox_var(obj, var, getvalue, f, udata); } -UIWIDGET ui_combobox_nv(UiObject *obj, char *varname, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { +UIWIDGET ui_combobox_nv(UiObject *obj, char *varname, ui_getvaluefunc getvalue, ui_callback f, void *udata) { UiVar *var = uic_create_var(obj->ctx, varname, UI_VAR_LIST); if(var) { return ui_combobox_var(obj, var, getvalue, f, udata); @@ -372,13 +372,12 @@ return NULL; } -UIWIDGET ui_combobox_var(UiObject *obj, UiVar *var, ui_model_getvalue_f getvalue, ui_callback f, void *udata) { - UiModelInfo *modelinfo = ui_model_info(obj->ctx, UI_STRING, "", -1); - modelinfo->getvalue = getvalue; - UiList *list = var->value; - UiListModel *model = ui_list_model_new(var, modelinfo); +UIWIDGET ui_combobox_var(UiObject *obj, UiVar *var, ui_getvaluefunc getvalue, ui_callback f, void *udata) { + UiModel *model = ui_model_info(obj->ctx, UI_STRING, "", -1); + model->getvalue = getvalue; + UiListModel *listmodel = ui_list_model_new(var, model); - GtkWidget *combobox = ui_create_combobox(obj, model, f, udata); + GtkWidget *combobox = ui_create_combobox(obj, listmodel, f, udata); UiContainer *ct = uic_get_current_container(obj); ct->add(ct, combobox, FALSE); } @@ -390,7 +389,7 @@ uicbox->ctx = obj->ctx; uicbox->widget = combobox; uicbox->var = model->var; - uicbox->modelinfo = model->info; + uicbox->model = model->info; g_signal_connect( combobox, @@ -443,7 +442,7 @@ void ui_combobox_modelupdate(UiList *list, int i) { UiListView *view = list->obj; - UiListModel *model = ui_list_model_new(view->var, view->modelinfo); + UiListModel *model = ui_list_model_new(view->var, view->model); gtk_combo_box_set_model(GTK_COMBO_BOX(view->widget), GTK_TREE_MODEL(model)); }