static gboolean queue_relayout_in_idle (gpointer user_data) { IdeFancyTreeView *self = user_data; IdeFancyTreeViewPrivate *priv = ide_fancy_tree_view_get_instance_private (self); GtkAllocation alloc; guint n_columns; g_assert (IDE_IS_FANCY_TREE_VIEW (self)); gtk_widget_get_allocation (GTK_WIDGET (self), &alloc); if (alloc.width == priv->last_width) goto cleanup; priv->last_width = alloc.width; n_columns = gtk_tree_view_get_n_columns (GTK_TREE_VIEW (self)); for (guint i = 0; i < n_columns; i++) { GtkTreeViewColumn *column; column = gtk_tree_view_get_column (GTK_TREE_VIEW (self), i); gtk_tree_view_column_queue_resize (column); } cleanup: priv->relayout_source = 0; return G_SOURCE_REMOVE; }
void _gui_clean_column() { /* * clean all columns in screen * * */ int columns; GtkTreeViewColumn *column; columns = gtk_tree_view_get_n_columns(treeview); while(columns) { column = gtk_tree_view_get_column(treeview, 0); gtk_tree_view_remove_column(treeview, column); columns--; } }
bool change_restrictions(int vars) { /* Clear model */ clear_liststore(restrictions_view); /* Create the dynamic types array */ int size = vars + 2; GType* types = (GType*) malloc(3 * size * sizeof(GType)); if(types == NULL) { return false; } /* Set type in the dynamic types array */ for(int i = 0; i < size; i++) { types[i] = G_TYPE_INT; /* Coeffs */ types[size + i] = G_TYPE_STRING; /* Text */ types[2 * size + i] = G_TYPE_STRING; /* Signs */ } /* Create the new model */ GtkListStore* restrictions = gtk_list_store_newv(3 * size, types); /* Clear the previous columns */ for(int i = gtk_tree_view_get_n_columns(restrictions_view) - 1; i >= 0; i--) { gtk_tree_view_remove_column( restrictions_view, gtk_tree_view_get_column(restrictions_view, i) ); } /* Create the new columns */ for(int i = 0; i < size; i++) { /* Especial column for type */ if(i == (size - 2)) { GtkCellRenderer* type = gtk_cell_renderer_text_new(); GtkTreeViewColumn* column = gtk_tree_view_column_new_with_attributes( "", type, /* Title, renderer */ "markup", size + i, NULL); gtk_tree_view_append_column(restrictions_view, column); continue; } /* Create sign column */ if((i != 0) && (i != size - 1)) { GtkCellRenderer* sign = gtk_cell_renderer_text_new(); GtkTreeViewColumn* sign_c = gtk_tree_view_column_new_with_attributes( "", sign, /* Title, renderer */ "markup", 2 * size + i, NULL); gtk_tree_view_append_column(restrictions_view, sign_c); } /* Create text column */ /* Create and configure cell */ GtkCellRenderer* cell = gtk_cell_renderer_spin_new(); gtk_cell_renderer_set_alignment(cell, 1.0, 0.5); g_object_set(cell, "editable", true, NULL); /* Configure callbacks */ g_signal_connect(G_OBJECT(cell), "editing-started", G_CALLBACK(restrictions_edit_started_cb), GINT_TO_POINTER(i)); restrictions_edit_started_cb(cell, NULL, NULL, GINT_TO_POINTER(i)); if(i < size - 2) { g_signal_connect(G_OBJECT(cell), "edited", G_CALLBACK(restrictions_edited_cb), GINT_TO_POINTER(i)); } else { g_signal_connect(G_OBJECT(cell), "edited", G_CALLBACK(num_edited_cb), GINT_TO_POINTER(i)); } /* Configure column */ GtkTreeViewColumn* column = gtk_tree_view_column_new_with_attributes( "", cell, /* Title, renderer */ "markup", size + i, NULL); gtk_tree_view_column_set_min_width(column, 100); gtk_tree_view_append_column(restrictions_view, column); } gtk_tree_view_append_column(restrictions_view, gtk_tree_view_column_new()); /* Set the new model */ gtk_tree_view_set_model(restrictions_view, GTK_TREE_MODEL(restrictions)); /* Free resources */ g_object_unref(G_OBJECT(restrictions)); free(types); return true; }
bool change_function(int vars) { /* Clear model */ clear_liststore(function_view); /* Create the dynamic types array */ GType* types = (GType*) malloc(3 * vars * sizeof(GType)); if(types == NULL) { return false; } /* Set type in the dynamic types array */ for(int i = 0; i < vars; i++) { types[i] = G_TYPE_INT; /* Coeffs */ types[vars + i] = G_TYPE_STRING; /* Text */ types[2 * vars + i] = G_TYPE_STRING; /* Signs */ } /* Create and fill the new model */ GtkListStore* function = gtk_list_store_newv(3 * vars, types); GtkTreeIter iter; GValue initi = G_VALUE_INIT; g_value_init(&initi, G_TYPE_INT); GValue inits = G_VALUE_INIT; g_value_init(&inits, G_TYPE_STRING); gtk_list_store_append(function, &iter); for(int i = 0; i < vars; i++) { g_value_set_int(&initi, 1); gtk_list_store_set_value(function, &iter, i, &initi); char* text = var_name(1, i, false); g_value_set_string(&inits, text); gtk_list_store_set_value(function, &iter, vars + i, &inits); free(text); g_value_set_string(&inits, PLUS); gtk_list_store_set_value(function, &iter, 2 * vars + i, &inits); } /* Clear the previous columns */ for(int i = gtk_tree_view_get_n_columns(function_view) - 1; i >= 0; i--) { gtk_tree_view_remove_column( function_view, gtk_tree_view_get_column(function_view, i) ); } /* Create the new columns */ for(int i = 0; i < vars; i++) { /* Create sign column */ if(i > 0) { GtkCellRenderer* sign = gtk_cell_renderer_text_new(); GtkTreeViewColumn* sign_c = gtk_tree_view_column_new_with_attributes( "", sign, /* Title, renderer */ "markup", 2 * vars + i, NULL); gtk_tree_view_append_column(function_view, sign_c); } /* Create text column */ /* Create and configure cell */ GtkCellRenderer* cell = gtk_cell_renderer_spin_new(); gtk_cell_renderer_set_alignment(cell, 1.0, 0.5); g_object_set(cell, "editable", true, NULL); /* Configure callbacks */ g_signal_connect(G_OBJECT(cell), "editing-started", G_CALLBACK(function_edit_started_cb), GINT_TO_POINTER(i)); function_edit_started_cb(cell, NULL, NULL, GINT_TO_POINTER(i)); g_signal_connect(G_OBJECT(cell), "edited", G_CALLBACK(function_edited_cb), GINT_TO_POINTER(i)); /* Configure column */ GtkTreeViewColumn* column = gtk_tree_view_column_new_with_attributes( "", cell, /* Title, renderer */ "markup", vars + i, NULL); gtk_tree_view_column_set_min_width(column, 100); gtk_tree_view_append_column(function_view, column); } gtk_tree_view_append_column(function_view, gtk_tree_view_column_new()); /* Set the new model */ gtk_tree_view_set_model(function_view, GTK_TREE_MODEL(function)); /* Free resources */ g_object_unref(G_OBJECT(function)); free(types); return true; }