void wb_control_sheet_add (WorkbookControl *wbc, SheetView *sv) { WorkbookControlClass *wbc_class; g_return_if_fail (IS_WORKBOOK_CONTROL (wbc)); wbc_class = WBC_CLASS (wbc); if (wbc_class != NULL && wbc_class->sheet.add != NULL) { Sheet *new_sheet = sv_sheet (sv); wbc_class->sheet.add (wbc, sv); /* If this is the current sheet init the display */ if (new_sheet == wb_control_cur_sheet (wbc)) { WorkbookView *wbv = wb_control_view (wbc); wb_control_sheet_focus (wbc, new_sheet); wb_view_selection_desc (wbv, TRUE, wbc); wb_view_edit_line_set (wbv, wbc); wb_control_style_feedback (wbc, NULL); wb_control_menu_state_update (wbc, MS_ALL); wb_control_update_action_sensitivity (wbc); } } }
/** * sv_menu_enable_insert : * @sv : * @col : * @row : * * control whether or not it is ok to insert cols or rows. An internal routine * used by the selection mechanism to avoid erasing the entire sheet when * inserting the wrong dimension. */ static void sv_menu_enable_insert (SheetView *sv, gboolean col, gboolean row) { int flags = 0; g_return_if_fail (IS_SHEET_VIEW (sv)); if (sv->enable_insert_cols != col) { flags |= MS_INSERT_COLS; sv->enable_insert_cols = col; } if (sv->enable_insert_rows != row) { flags |= MS_INSERT_ROWS; sv->enable_insert_rows = row; } if (sv->enable_insert_cells != (col|row)) { flags |= MS_INSERT_CELLS; sv->enable_insert_cells = (col|row); } /* during initialization it does not matter */ if (!flags || sv->sheet == NULL) return; WORKBOOK_VIEW_FOREACH_CONTROL(sv_wbv (sv), wbc, wb_control_menu_state_update (wbc, flags););
static void wbcg_edit_attach_guru_main (WBCGtk *wbcg, GtkWidget *guru) { WorkbookControl *wbc = GNM_WBC (wbcg); g_return_if_fail (guru != NULL); g_return_if_fail (GNM_IS_WBC_GTK (wbcg)); g_return_if_fail (wbcg->edit_line.guru == NULL); /* Make sure we don't have anything anted. * this protects against two anted regions showing up */ gnm_app_clipboard_unant (); /* don't set end 'End' mode when a dialog comes up */ wbcg_set_end_mode (wbcg, FALSE); wbcg->edit_line.guru = guru; gtk_editable_set_editable (GTK_EDITABLE (wbcg_get_entry (wbcg)), FALSE); wb_control_update_action_sensitivity (wbc); wb_control_menu_state_update (wbc, MS_GURU_MENU_ITEMS); g_signal_connect_object (guru, "destroy", G_CALLBACK (wbc_gtk_detach_guru), wbcg, G_CONNECT_SWAPPED); }
/* * Advanced Filter tool. */ gint advanced_filter (WorkbookControl *wbc, data_analysis_output_t *dao, GnmValue *database, GnmValue *criteria, gboolean unique_only_flag) { GSList *crit, *rows; GnmEvalPos ep; GnmRange r, s; SheetView *sv; Sheet *sheet = criteria->v_range.cell.a.sheet; /* I don't like this -- minimal fix for now. 509427. */ if (!VALUE_IS_CELLRANGE (criteria)) return analysis_tools_invalid_field; crit = parse_database_criteria ( eval_pos_init_sheet (&ep, wb_control_cur_sheet (wbc)), database, criteria); if (crit == NULL) return analysis_tools_invalid_field; rows = find_rows_that_match (sheet, database->v_range.cell.a.col, database->v_range.cell.a.row + 1, database->v_range.cell.b.col, database->v_range.cell.b.row, crit, unique_only_flag); free_criterias (crit); if (rows == NULL) return analysis_tools_no_records_found; dao_prepare_output (wbc, dao, _("Filtered")); filter (dao, sheet, rows, database->v_range.cell.a.col, database->v_range.cell.b.col, database->v_range.cell.a.row, database->v_range.cell.b.row); g_slist_free_full (rows, (GDestroyNotify)g_free); sv = sheet_get_view (sheet, wb_control_view (wbc)); s = r = *(selection_first_range (sv, NULL, NULL)); r.end.row = r.start.row; sv_selection_reset (sv); sv_selection_add_range (sv, &r); sv_selection_add_range (sv, &s); wb_control_menu_state_update (wbc, MS_FILTER_STATE_CHANGED); return analysis_tools_noerr; }
void filter_show_all (WorkbookControl *wbc) { Sheet *sheet = wb_control_cur_sheet (wbc); /* FIXME: This is slow. We should probably have a linked list * containing the filtered rows in the sheet structure. */ colrow_foreach (&sheet->rows, 0, gnm_sheet_get_last_row (sheet), (ColRowHandler) cb_show_all, sheet); sheet->has_filtered_rows = FALSE; sheet_redraw_all (sheet, TRUE); wb_control_menu_state_update (wbc, MS_FILTER_STATE_CHANGED); }
void wbc_gtk_detach_guru (WBCGtk *wbcg) { WorkbookControl *wbc = GNM_WBC (wbcg); g_return_if_fail (GNM_IS_WBC_GTK (wbcg)); /* don't sit end 'End' mode when a dialog comes up */ wbcg_set_end_mode (wbcg, FALSE); if (wbcg->edit_line.guru == NULL) return; wbcg_set_entry (wbcg, NULL); wbcg->edit_line.guru = NULL; gtk_editable_set_editable (GTK_EDITABLE (wbcg_get_entry (wbcg)), TRUE); wb_control_update_action_sensitivity (wbc); wb_control_menu_state_update (wbc, MS_GURU_MENU_ITEMS); }
static void cb_wbc_clipboard_modified (GnmApp *app, WorkbookControl *wbc) { wb_control_menu_state_update (wbc, MS_PASTE_SPECIAL); }