/* * Select the given range and make the it visible. */ static gboolean wb_control_jump (WorkbookControl *wbc, Sheet *sheet, const GnmRangeRef *r) { SheetView *sv; GnmCellPos tmp; if (r->a.sheet) sheet = r->a.sheet; if (!sheet_is_visible (sheet)) { go_cmd_context_error_invalid (GO_CMD_CONTEXT (wbc), _("Cannot jump to an invisible sheet"), sheet->name_unquoted); return FALSE; } sv = sheet_get_view (sheet, wb_control_view (wbc)); tmp.col = r->a.col; tmp.row = r->a.row; sv_selection_set (sv, &tmp, r->a.col, r->a.row, r->b.col, r->b.row); sv_make_cell_visible (sv, r->b.col, r->b.row, FALSE); sv_make_cell_visible (sv, r->a.col, r->a.row, FALSE); sv_update (sv); if (wb_control_cur_sheet (wbc) != sheet) wb_view_sheet_focus (wbc->wb_view, sheet); return TRUE; }
static void cb_dialog_goto_selection_changed (GtkTreeSelection *the_selection, GotoState *state) { GtkTreeIter iter; GtkTreeModel *model; Sheet *sheet; GnmNamedExpr *name; if (gtk_tree_selection_get_selected (the_selection, &model, &iter)) { gtk_tree_model_get (model, &iter, SHEET_POINTER, &sheet, EXPRESSION, &name, -1); if (name && gnm_expr_top_is_rangeref (name->texpr)) { GnmParsePos pp; char *where_to; if (NULL == sheet) sheet = wb_control_cur_sheet ( WORKBOOK_CONTROL (state->wbcg)); parse_pos_init_sheet (&pp, sheet); where_to = expr_name_as_string (name, &pp, gnm_conventions_default); if (wb_control_parse_and_jump (WORKBOOK_CONTROL (state->wbcg), where_to)) gtk_entry_set_text (state->goto_text, where_to); g_free (where_to); return; } if (sheet) wb_view_sheet_focus ( wb_control_view (WORKBOOK_CONTROL (state->wbcg)), sheet); } }
static void cursor_change (GtkTreeView *tree_view, DialogState *dd) { int matchno; int lastmatch = dd->matches->len - 1; GtkTreePath *path; gtk_tree_view_get_cursor (tree_view, &path, NULL); if (path) { matchno = gtk_tree_path_get_indices (path)[0]; gtk_tree_path_free (path); } else { matchno = -1; } gtk_widget_set_sensitive (dd->prev_button, matchno > 0); gtk_widget_set_sensitive (dd->next_button, matchno >= 0 && matchno < lastmatch); if (matchno >= 0 && matchno <= lastmatch) { GnmSearchFilterResult *item = g_ptr_array_index (dd->matches, matchno); int col = item->ep.eval.col; int row = item->ep.eval.row; WorkbookControl *wbc = WORKBOOK_CONTROL (dd->wbcg); WorkbookView *wbv = wb_control_view (wbc); SheetView *sv; if (!sheet_is_visible (item->ep.sheet)) return; if (wb_control_cur_sheet (wbc) != item->ep.sheet) wb_view_sheet_focus (wbv, item->ep.sheet); sv = wb_view_cur_sheet_view (wbv); sv_set_edit_pos (sv, &item->ep.eval); sv_selection_set (sv, &item->ep.eval, col, row, col, row); sv_make_cell_visible (sv, col, row, FALSE); sv_update (sv); } }
/* * Refreshes the buttons on a row (un)selection and selects the chosen sheet * for this view. */ static void cb_selection_changed (G_GNUC_UNUSED GtkTreeSelection *ignored, SheetManager *state) { GtkTreeIter iter; Sheet *sheet; gboolean has_iter; GdkRGBA *fore, *back; GtkTreeSelection *selection = gtk_tree_view_get_selection (state->sheet_list); GList *selected_rows = gtk_tree_selection_get_selected_rows (selection, NULL); gboolean multiple = gtk_tree_model_iter_n_children(GTK_TREE_MODEL (state->model), NULL) > 1; int cnt_sel = g_list_length (selected_rows); gboolean single_sel = (cnt_sel < 2); gtk_widget_set_sensitive (state->sort_asc_btn, multiple); gtk_widget_set_sensitive (state->sort_desc_btn, multiple); if (selected_rows == NULL) { gtk_widget_set_sensitive (state->up_btn, FALSE); gtk_widget_set_sensitive (state->down_btn, FALSE); gtk_widget_set_sensitive (state->delete_btn, FALSE); gtk_widget_set_sensitive (state->ccombo_back, FALSE); gtk_widget_set_sensitive (state->ccombo_fore, FALSE); gtk_widget_set_sensitive (state->add_btn, FALSE); gtk_widget_set_sensitive (state->duplicate_btn, FALSE); return; } gtk_tree_model_get_iter (GTK_TREE_MODEL (state->model), &iter, (GtkTreePath *) selected_rows->data); gtk_tree_model_get (GTK_TREE_MODEL (state->model), &iter, SHEET_POINTER, &sheet, BACKGROUND_COLOUR, &back, FOREGROUND_COLOUR, &fore, -1); if (!state->initial_colors_set) { go_combo_color_set_color_gdk (GO_COMBO_COLOR (state->ccombo_back), back); go_combo_color_set_color_gdk (GO_COMBO_COLOR (state->ccombo_fore), fore); state->initial_colors_set = TRUE; } if (back != NULL) gdk_rgba_free (back); if (fore != NULL) gdk_rgba_free (fore); gtk_widget_set_sensitive (state->ccombo_back, TRUE); gtk_widget_set_sensitive (state->ccombo_fore, TRUE); gtk_widget_set_sensitive (state->delete_btn, sheet_order_cnt_visible (state) > cnt_sel); gtk_widget_set_sensitive (state->add_btn, single_sel); gtk_widget_set_sensitive (state->duplicate_btn, single_sel); has_iter = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (state->model), &iter); g_return_if_fail (has_iter); gtk_widget_set_sensitive (state->up_btn, single_sel && !gtk_tree_selection_iter_is_selected (selection, &iter)); gtk_tree_model_iter_nth_child (GTK_TREE_MODEL (state->model), &iter, NULL, gtk_tree_model_iter_n_children (GTK_TREE_MODEL (state->model), NULL) - 1); gtk_widget_set_sensitive (state->down_btn, single_sel && !gtk_tree_selection_iter_is_selected (selection, &iter)); if (sheet != NULL) wb_view_sheet_focus ( wb_control_view (GNM_WBC (state->wbcg)), sheet); g_list_free_full (selected_rows, (GDestroyNotify) gtk_tree_path_free); }