static void route_add_clicked (GtkButton *button, gpointer user_data) { GtkBuilder *builder = GTK_BUILDER (user_data); GtkWidget *widget; GtkListStore *store; GtkTreeIter iter; GtkTreeSelection *selection; GtkTreeViewColumn *column; GtkTreePath *path; GList *cells; widget = GTK_WIDGET (gtk_builder_get_object (builder, "ip4_routes")); store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (widget))); gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, COL_ADDRESS, "", -1); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)); gtk_tree_selection_select_iter (selection, &iter); path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), &iter); column = gtk_tree_view_get_column (GTK_TREE_VIEW (widget), COL_ADDRESS); /* FIXME: using cells->data is pretty fragile but GTK apparently doesn't * have a way to get a cell renderer from a column based on path or iter * or whatever. */ cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column)); gtk_tree_view_set_cursor_on_cell (GTK_TREE_VIEW (widget), path, column, cells->data, TRUE); g_list_free (cells); gtk_tree_path_free (path); validate (GTK_WIDGET (gtk_builder_get_object (builder, "ip4_routes_dialog"))); }
static void cell_edited (GtkCellRendererText *cell, const gchar *path_string, const gchar *new_text, gpointer user_data) { CEPageIP4 *self = CE_PAGE_IP4 (user_data); CEPageIP4Private *priv = CE_PAGE_IP4_GET_PRIVATE (self); GtkListStore *store = GTK_LIST_STORE (gtk_tree_view_get_model (priv->addr_list)); GtkTreePath *path = gtk_tree_path_new_from_string (path_string); GtkTreeIter iter; guint32 column; GtkTreeViewColumn *next_col; column = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (cell), "column")); gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path); gtk_list_store_set (store, &iter, column, new_text, -1); /* Move focus to the next column */ column = (column >= COL_LAST) ? 0 : column + 1; next_col = gtk_tree_view_get_column (priv->addr_list, column); gtk_tree_view_set_cursor_on_cell (priv->addr_list, path, next_col, priv->addr_cells[column], TRUE); gtk_widget_grab_focus (GTK_WIDGET (priv->addr_list)); gtk_tree_path_free (path); ce_page_changed (CE_PAGE (self)); }
void FormAccount_ButtonAddClicked(GtkButton* button, gpointer user_data) { FormAccount* fa = (FormAccount*) user_data; GtkTreeModel* model; GtkTreeIter iter; GtkTreePath* path; double Money; model = gtk_tree_view_get_model(GTK_TREE_VIEW(fa->ListViewAccount)); gtk_list_store_append(GTK_LIST_STORE(model), &iter); Money = 0.0; gtk_list_store_set(GTK_LIST_STORE(model), &iter, COL_ID_RECORD_STATE, REC_STATE_ADD, COL_ID_OPERATION_ID, "", COL_ID_DATE, "", COL_ID_DESCRIPTION, "", COL_ID_MONEY, Money, COL_ID_CATEGORY_ID, 0, COL_ID_CATEGORY_NAME, "", -1); path = gtk_tree_model_get_path(model, &iter); gtk_tree_view_set_cursor_on_cell(GTK_TREE_VIEW(fa->ListViewAccount), path, NULL, NULL, FALSE); gtk_tree_path_free(path); return; }
void FormAccount_SetCursorOnLast(FormAccount* fa) { GtkTreeModel* model; GtkTreeIter iter; uint nlast; GtkTreePath* path; model = gtk_tree_view_get_model(GTK_TREE_VIEW(fa->ListViewAccount)); nlast = gtk_tree_model_iter_n_children(model, NULL); if (nlast == 0) { return ; } --nlast; if (gtk_tree_model_iter_nth_child(model, &iter, NULL, nlast) == FALSE) { return ; } path = gtk_tree_model_get_path(model, &iter); gtk_tree_view_set_cursor_on_cell(GTK_TREE_VIEW(fa->ListViewAccount), path, NULL, NULL, FALSE); gtk_tree_path_free(path); }
/************************************************************** * custom_report_list_view_clicked_cb * * this callback is called whenever a user clicked somewhere in * the treeview widget. If the click was on an edit or delete * pictogram, the corresponding action will be executed on the * selected row. **************************************************************/ void custom_report_list_view_clicked_cb(GtkTreeView *view, GdkEventButton *event, gpointer data) { CustomReportDialog *crd = data; GtkTreePath *path = NULL; GtkTreeViewColumn *column = NULL; gint cellx, celly; g_return_if_fail ( view != NULL ); if (gtk_tree_view_get_path_at_pos (view, event->x, event->y, &path, &column, &cellx, &celly)) { if (column == crd->runcol) { SCM guid = get_custom_report_selection(crd, _("You must select a report configuration to load.")); custom_report_run_report (guid, crd); } else if (column == crd->editcol) { g_object_set(G_OBJECT(crd->namerenderer), "editable", TRUE, NULL); gtk_tree_view_set_cursor_on_cell (view, path, crd->namecol, crd->namerenderer, TRUE); } else if (column == crd->delcol) { SCM guid = get_custom_report_selection(crd, _("You must select a report configuration to delete.")); custom_report_delete (guid, crd); } } }
void template_add_new_entry (GuTemplate* t) { GtkTreeIter iter; GtkTreeModel* model = NULL; GtkTreePath* path = NULL; GtkTreeViewColumn* col = NULL; GList* cells = NULL; gtk_label_set_text (t->template_label, ""); gtk_list_store_append (t->list_templates, &iter); g_object_set (t->template_render, "editable", TRUE, NULL); gtk_widget_set_sensitive (t->template_add, FALSE); gtk_widget_set_sensitive (t->template_remove, FALSE); gtk_widget_set_sensitive (t->template_open, FALSE); col = gtk_tree_view_get_column (t->templateview, 0); model = gtk_tree_view_get_model (t->templateview); path = gtk_tree_model_get_path (model, &iter); cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (col)); gtk_tree_view_set_cursor_on_cell (t->templateview, path, col, cells->data, TRUE); g_list_free (cells); gtk_tree_path_free (path); }
static void addr_add_clicked (GtkButton *button, gpointer user_data) { CEPageIP4Private *priv = CE_PAGE_IP4_GET_PRIVATE (user_data); GtkListStore *store; GtkTreeIter iter; GtkTreeSelection *selection; GtkTreeViewColumn *column; GtkTreePath *path; GList *cells; store = GTK_LIST_STORE (gtk_tree_view_get_model (priv->addr_list)); gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, COL_ADDRESS, "", -1); selection = gtk_tree_view_get_selection (priv->addr_list); gtk_tree_selection_select_iter (selection, &iter); path = gtk_tree_model_get_path (GTK_TREE_MODEL (store), &iter); column = gtk_tree_view_get_column (priv->addr_list, COL_ADDRESS); /* FIXME: using cells->data is pretty fragile but GTK apparently doesn't * have a way to get a cell renderer from a column based on path or iter * or whatever. */ cells = gtk_cell_layout_get_cells (GTK_CELL_LAYOUT (column)); gtk_tree_view_set_cursor_on_cell (priv->addr_list, path, column, cells->data, TRUE); g_list_free (cells); gtk_tree_path_free (path); }
static void on_add( GtkButton* btn, gpointer data ) { GtkWindow* parent = GTK_WINDOW(data); GtkTreeViewColumn* col; GtkTreeIter it, new_it, *pit; GtkTreePath* tree_path; GtkTreeView* view = (GtkTreeView*)g_object_get_data( G_OBJECT(data), "list_view" ); GtkTreeModel* model; GtkTreeSelection* sel = gtk_tree_view_get_selection( view ); GdkPixbuf* icon = gtk_icon_theme_load_icon( gtk_icon_theme_get_default(), "gnome-fs-directory", 20, 0, NULL ); GtkWidget* dlg; char *path = NULL, *basename = NULL; if( gtk_tree_selection_get_selected ( sel, &model, &it ) ) { tree_path = gtk_tree_model_get_path( model, &it ); gtk_tree_path_next( tree_path ); pit = ⁢ } else { tree_path = gtk_tree_path_new_first(); pit = NULL; } dlg = gtk_file_chooser_dialog_new( NULL, parent, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OK, GTK_RESPONSE_OK, NULL ); if( gtk_dialog_run( (GtkDialog*) dlg ) == GTK_RESPONSE_OK ) { path = gtk_file_chooser_get_filename( (GtkFileChooser*)dlg ); basename = g_filename_display_basename( path ); } gtk_widget_destroy( dlg ); col = gtk_tree_view_get_column( view, 1 ); gtk_list_store_insert_after( GTK_LIST_STORE(model), &new_it, pit ); gtk_list_store_set( GTK_LIST_STORE(model), &new_it, COL_ICON, icon, COL_NAME, basename ? basename : _("New Item"), COL_DIRPATH, path, -1); g_free( path ); g_free( basename ); if( tree_path ) { gtk_tree_view_set_cursor_on_cell( view, tree_path, col, NULL, TRUE ); gtk_tree_path_free( tree_path ); } if( icon ) g_object_unref( icon ); }
static VALUE rg_set_cursor_on_cell(VALUE self, VALUE path, VALUE focus_column, VALUE focus_cell, VALUE start_editing) { gtk_tree_view_set_cursor_on_cell(_SELF(self), RVAL2GTKTREEPATH(path), NIL_P(focus_column) ? NULL : TREEVIEW_COL(focus_column), NIL_P(focus_cell) ? NULL : GTK_CELL_RENDERER(RVAL2GOBJ(focus_cell)), RVAL2CBOOL(start_editing)); return self; }
/*********************************************************** * gnc_ui_custom_report_edit_name * * open the custom report dialog and highlight the given * report's name for editing. ***********************************************************/ void gnc_ui_custom_report_edit_name (GncMainWindow * window, SCM scm_guid) { SCM is_custom_report; CustomReportDialog *crd = gnc_ui_custom_report_internal (window); GtkTreeModel *model; GtkTreeIter iter; GncGUID *guid; gchar *guid_str; gboolean valid_iter; is_custom_report = scm_c_eval_string ("gnc:report-template-is-custom/template-guid?"); if (scm_is_false (scm_call_1 (is_custom_report, scm_guid))) return; guid = guid_malloc (); guid_str = scm_to_utf8_string (scm_guid); if (!string_to_guid (guid_str, guid)) goto cleanup; /* Look up the row for the requested guid */ model = gtk_tree_view_get_model (GTK_TREE_VIEW (crd->reportview)); valid_iter = gtk_tree_model_get_iter_first (model, &iter); while (valid_iter) { GValue value = { 0, }; GncGUID *row_guid; gtk_tree_model_get_value (model, &iter, COL_NUM, &value); row_guid = (GncGUID *) g_value_get_pointer (&value); if (guid_equal (guid, row_guid)) { /* We found the row for the requested guid * Now let's set the report's name cell in edit mode * so the user can edit the name. */ GtkTreePath *path; GtkTreeSelection *selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (crd->reportview)); gtk_tree_selection_select_iter (selection, &iter); path = gtk_tree_model_get_path (model, &iter); g_object_set(G_OBJECT(crd->namerenderer), "editable", TRUE, NULL); gtk_tree_view_set_cursor_on_cell (GTK_TREE_VIEW (crd->reportview), path, crd->namecol, crd->namerenderer, TRUE); break; } g_value_unset (&value); valid_iter = gtk_tree_model_iter_next (model, &iter); } cleanup: guid_free (guid); }
static void fm_list_view_start_renaming_file (FMDirectoryView *view, GOFFile *file, gboolean select_all) { FMListView *list_view; GtkTreeIter iter; GtkTreePath *path; gint start_offset, end_offset; list_view = FM_LIST_VIEW (view); /* Select all if we are in renaming mode already */ if (list_view->details->file_name_column && list_view->details->editable_widget) { gtk_editable_select_region (GTK_EDITABLE (list_view->details->editable_widget), 0, -1); return; } if (!fm_list_model_get_first_iter_for_file (list_view->model, file, &iter)) { g_debug ("%s FAILED", G_STRFUNC); return; } /* Freeze updates to the view to prevent losing rename focus when the tree view updates */ fm_list_view_freeze_updates (FM_LIST_VIEW (view)); path = gtk_tree_model_get_path (GTK_TREE_MODEL (list_view->model), &iter); /* Make filename-cells editable. */ g_object_set (G_OBJECT (list_view->details->file_name_cell), "editable", TRUE, NULL); gtk_tree_view_scroll_to_cell (list_view->tree, NULL, list_view->details->file_name_column, TRUE, 0.0, 0.0); /* set cursor also triggers editing-started, where we save the editable widget */ /*gtk_tree_view_set_cursor (list_view->tree, path, list_view->details->file_name_column, TRUE);*/ /* sound like set_cursor is not enought to trigger editing-started, we use cursor_on_cell instead */ gtk_tree_view_set_cursor_on_cell (list_view->tree, path, list_view->details->file_name_column, (GtkCellRenderer *) list_view->details->file_name_cell, TRUE); if (list_view->details->editable_widget != NULL) { eel_filename_get_rename_region (list_view->details->original_name, &start_offset, &end_offset); gtk_editable_select_region (GTK_EDITABLE (list_view->details->editable_widget), start_offset, end_offset); } gtk_tree_path_free (path); }
static void cell_edited (GtkCellRendererText *cell, const gchar *path_string, const gchar *new_text, gpointer user_data) { GtkBuilder *builder = GTK_BUILDER (user_data); GtkWidget *widget, *dialog; GtkListStore *store; GtkTreePath *path; GtkTreeIter iter; guint32 column; GtkTreeViewColumn *next_col; GtkCellRenderer *next_cell; gboolean can_cycle; int direction, tmp; /* Free auxiliary stuff */ g_free (last_edited); last_edited = NULL; g_free (last_path); last_path = NULL; last_column = -1; widget = GTK_WIDGET (gtk_builder_get_object (builder, "ip4_routes")); store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (widget))); path = gtk_tree_path_new_from_string (path_string); column = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (cell), "column")); gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path); gtk_list_store_set (store, &iter, column, new_text, -1); /* Move focus to the next/previous column */ can_cycle = g_object_get_data (G_OBJECT (cell), DO_NOT_CYCLE_TAG) == NULL; direction = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (cell), DIRECTION_TAG)); g_object_set_data (G_OBJECT (cell), DIRECTION_TAG, NULL); g_object_set_data (G_OBJECT (cell), DO_NOT_CYCLE_TAG, NULL); if (direction == 0) /* Move forward by default */ direction = 1; tmp = column + direction; if (can_cycle) column = tmp < 0 ? COL_LAST : tmp > COL_LAST ? 0 : tmp; else column = tmp; next_col = gtk_tree_view_get_column (GTK_TREE_VIEW (widget), column); dialog = GTK_WIDGET (gtk_builder_get_object (builder, "ip4_routes_dialog")); next_cell = g_slist_nth_data (g_object_get_data (G_OBJECT (dialog), "renderers"), column); gtk_tree_view_set_cursor_on_cell (GTK_TREE_VIEW (widget), path, next_col, next_cell, TRUE); gtk_tree_path_free (path); validate (dialog); }
static void row_add (GtkMenuItem *item, GtkTreeView *treeview) { GtkTreeIter iter; GtkTreeModel *model = gtk_tree_view_get_model (treeview); gtk_list_store_append (GTK_LIST_STORE (model), &iter); GtkTreePath *path = gtk_tree_model_get_path (model, &iter); GtkTreeViewColumn *column = gtk_tree_view_get_column (treeview, WORD_WRITING); gtk_tree_view_set_cursor_on_cell (treeview, path, column, NULL, TRUE); }
/* * env tree view name changed hadler */ static void on_name_changed(GtkCellRendererText *renderer, gchar *path, gchar *new_text, gpointer user_data) { GtkTreeIter iter; GtkTreePath *tree_path = gtk_tree_path_new_from_string (path); GtkTreePath *empty_path = gtk_tree_row_reference_get_path(empty_row); gboolean empty = !gtk_tree_path_compare(tree_path, empty_path); gtk_tree_model_get_iter ( model, &iter, tree_path); gchar* oldvalue; gtk_tree_model_get ( model, &iter, NAME, &oldvalue, -1); gchar *striped = g_strstrip(g_strdup(new_text)); if (!strlen(striped)) { /* if name is empty - offer to delete variable */ if (!empty && dialogs_show_question(_("Delete variable?"))) { delete_selected_rows(); config_set_debug_changed(); gtk_widget_grab_focus(tree); } } else if (strcmp(oldvalue, striped)) { gtk_list_store_set(store, &iter, NAME, striped, -1); if (empty) { /* if it was a new row - move cursor to a value cell */ entering_new_var = TRUE; gtk_tree_view_set_cursor_on_cell(GTK_TREE_VIEW(tree), tree_path, column_value, renderer_value, TRUE); } if (!empty) { config_set_debug_changed(); } } gtk_tree_path_free(tree_path); gtk_tree_path_free(empty_path); g_free(oldvalue); g_free(striped); }
static void cell_edited (GtkCellRendererText *cell, const gchar *path_string, const gchar *new_text, gpointer user_data) { GtkBuilder *builder = GTK_BUILDER (user_data); GtkWidget *widget, *dialog; GtkListStore *store; GtkTreePath *path; GtkTreeIter iter; guint32 column; GtkTreeViewColumn *next_col; GtkCellRenderer *next_cell; /* Free auxiliary stuff */ g_free (last_edited); last_edited = NULL; g_free (last_path); last_path = NULL; last_column = -1; widget = GTK_WIDGET (gtk_builder_get_object (builder, "ip6_routes")); store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (widget))); path = gtk_tree_path_new_from_string (path_string); column = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (cell), "column")); gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path); gtk_list_store_set (store, &iter, column, new_text, -1); /* Move focus to the next column */ column = (column >= COL_LAST) ? 0 : column + 1; next_col = gtk_tree_view_get_column (GTK_TREE_VIEW (widget), column); dialog = GTK_WIDGET (gtk_builder_get_object (builder, "ip6_routes_dialog")); next_cell = g_slist_nth_data (g_object_get_data (G_OBJECT (dialog), "renderers"), column); gtk_tree_view_set_cursor_on_cell (GTK_TREE_VIEW (widget), path, next_col, next_cell, TRUE); gtk_tree_path_free (path); validate (dialog); }
static void fm_list_view_set_cursor (FMDirectoryView *view, GtkTreePath *path, gboolean start_editing, gboolean select) { FMListView *list_view = FM_LIST_VIEW (view); GtkTreeSelection *selection = gtk_tree_view_get_selection (list_view->tree); /* the treeview select the path by default */ if (!select) g_signal_handlers_block_by_func (selection, list_selection_changed_callback, list_view); gtk_tree_view_set_cursor_on_cell (list_view->tree, path, list_view->details->file_name_column, (GtkCellRenderer *) list_view->details->file_name_cell, start_editing); if (!select) { gtk_tree_selection_unselect_path (selection, path); g_signal_handlers_unblock_by_func (selection, list_selection_changed_callback, list_view); } }
void FormAccount_UpDown(FormAccount* fa, unsigned int updown) { GtkTreePath* path; GtkTreeModel* model; GtkTreeIter iter; gtk_tree_view_get_cursor(GTK_TREE_VIEW(fa->ListViewAccount), &path, NULL); if (path == NULL) { path = gtk_tree_path_new_first(); } else { switch (updown) { case 2: gtk_tree_path_next(path); model = gtk_tree_view_get_model(GTK_TREE_VIEW(fa->ListViewAccount)); if (gtk_tree_model_get_iter(model, &iter, path) == FALSE) { gtk_tree_path_prev(path); } break; case 1: gtk_tree_path_prev(path); break; } } gtk_tree_view_set_cursor_on_cell(GTK_TREE_VIEW(fa->ListViewAccount), path, NULL, NULL, FALSE); gtk_tree_path_free(path); }
static void cell_edited (GtkCellRendererText *cell, const gchar *path_string, const gchar *new_text, gpointer user_data) { CEPageIP4 *self = CE_PAGE_IP4 (user_data); CEPageIP4Private *priv = CE_PAGE_IP4_GET_PRIVATE (self); GtkListStore *store = GTK_LIST_STORE (gtk_tree_view_get_model (priv->addr_list)); GtkTreePath *path = gtk_tree_path_new_from_string (path_string); GtkTreeIter iter; guint32 column; GtkTreeViewColumn *next_col; GtkCellRenderer *next_cell; gboolean can_cycle; int direction, tmp; /* Free auxiliary stuff */ g_free (priv->last_edited); priv->last_edited = NULL; g_free (priv->last_path); priv->last_path = NULL; priv->last_column = -1; column = GPOINTER_TO_UINT (g_object_get_data (G_OBJECT (cell), "column")); gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path); gtk_list_store_set (store, &iter, column, new_text, -1); /* Try to autodetect the prefix from the given address if we can */ if (column == COL_ADDRESS && new_text && strlen (new_text)) { char *prefix = NULL; const char *guess_prefix = NULL; gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (store), &iter, path_string); gtk_tree_model_get (GTK_TREE_MODEL (store), &iter, COL_PREFIX, &prefix, -1); if (!prefix || !strlen (prefix)) { if (!strncmp ("10.", new_text, 3)) guess_prefix = "8"; else if (!strncmp ("172.16.", new_text, 7)) guess_prefix = "16"; else if (!strncmp ("192.168.", new_text, 8)) guess_prefix = "24"; if (guess_prefix) gtk_list_store_set (store, &iter, COL_PREFIX, guess_prefix, -1); } g_free (prefix); } /* Move focus to the next/previous column */ can_cycle = g_object_get_data (G_OBJECT (cell), DO_NOT_CYCLE_TAG) == NULL; direction = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (cell), DIRECTION_TAG)); g_object_set_data (G_OBJECT (cell), DIRECTION_TAG, NULL); g_object_set_data (G_OBJECT (cell), DO_NOT_CYCLE_TAG, NULL); if (direction == 0) /* Move forward by default */ direction = 1; tmp = column + direction; if (can_cycle) column = tmp < 0 ? COL_LAST : tmp > COL_LAST ? 0 : tmp; else column = tmp; next_col = gtk_tree_view_get_column (priv->addr_list, column); next_cell = column <= COL_LAST ? priv->addr_cells[column] : NULL; gtk_tree_view_set_cursor_on_cell (priv->addr_list, path, next_col, next_cell, TRUE); gtk_tree_path_free (path); ce_page_changed (CE_PAGE (self)); }