void workbook_style_test (Workbook *wb) { GSList *sheets; g_return_if_fail (wb != NULL); sheets = workbook_sheets (wb); while (sheets) { Sheet *sheet = sheets->data; fprintf (stderr, "Style lookups on '%s'\n", sheet->name_unquoted); sheet_styles_dump (sheet); #ifdef RUN_THRASH_SCROLL zero_stats (); thrash_scroll (sheet); dump_stats ("Scroll"); #endif zero_stats (); thrash_insert (sheet); dump_stats ("Insert"); sheets = g_slist_remove (sheets, sheet); sheet_flag_recompute_spans (sheet); } workbook_recalc (wb); workbook_calc_spans (wb, GNM_SPANCALC_RENDER); }
void pwhtml_file_save (GOFileSaver const *fs, GOIOContext *io_context, WorkbookView const *wb_view, GsfOutput *output) { GSList *sheets, *ptr; Workbook *wb = wb_view_get_workbook (wb_view); GOFileSaveScope save_scope; g_return_if_fail (fs != NULL); g_return_if_fail (wb != NULL); g_return_if_fail (output != NULL); sheets = workbook_sheets (wb); save_scope = go_file_saver_get_save_scope (fs); for (ptr = sheets ; ptr != NULL ; ptr = ptr->next) { write_sheet (output, (Sheet *) ptr->data, save_scope); } g_slist_free (sheets); }
/** Get a character vector giving the names of the worksheets within the Gnumeric workbook. */ USER_OBJECT_ RGnumeric_getSheetNames(USER_OBJECT_ workbookRef) { Workbook *workbook; GList *sheets; Sheet *sheet; int n, i; USER_OBJECT_ ans; workbook = RGnumeric_resolveWorkbookReference(workbookRef); sheets = workbook_sheets(workbook); n = g_list_length(sheets); PROTECT(ans = NEW_CHARACTER(n)); for(i = 0; i < n ; i++) { sheet = (Sheet*) g_list_nth_data(sheets, i); SET_STRING_ELT(ans, i, COPY_TO_USER_STRING(sheet->name_unquoted)); } UNPROTECT(1); return(ans); }
/* * write every sheet of the workbook to a roff file * * FIXME: Should roff quote sheet name (and everything else) */ void roff_file_save (GOFileSaver const *fs, GOIOContext *io_context, WorkbookView const *wb_view, GsfOutput *output) { GSList *sheets, *ptr; GnmCell *cell; int row, col, fontsize, v_size; Workbook *wb = wb_view_get_workbook (wb_view); g_return_if_fail (wb != NULL); gsf_output_printf (output, ".\\\" TROFF file\n"); gsf_output_printf (output, ".fo ''%%''\n"); sheets = workbook_sheets (wb); for (ptr = sheets ; ptr != NULL ; ptr = ptr->next) { Sheet *sheet = ptr->data; GnmRange r = sheet_get_extent (sheet, FALSE, TRUE); gsf_output_printf (output, "%s\n\n", sheet->name_unquoted); gsf_output_printf (output, ".TS H\n"); gsf_output_printf (output, "allbox;\n"); for (row = r.start.row; row <= r.end.row; row++) { ColRowInfo const * ri; ri = sheet_row_get_info (sheet, row); if (ri->needs_respan) row_calc_spans ((ColRowInfo *) ri, row, sheet); if (row > r.start.row) gsf_output_printf (output, ".T&\n"); /* define alignments, bold etc. per cell */ v_size = DEFSIZE; for (col = r.start.col; col <= r.end.col; col++) { cell = sheet_cell_get (sheet, col, row); if (col > r.start.col) gsf_output_printf (output, " "); if (!cell) { gsf_output_printf (output, "l"); } else { GnmStyle const *style = gnm_cell_get_style (cell); if (!style) break; if (gnm_style_get_align_h (style) & GNM_HALIGN_RIGHT) gsf_output_printf (output, "r"); else if (gnm_style_get_align_h (style) == GNM_HALIGN_CENTER || /* FIXME : center across selection is different */ gnm_style_get_align_h (style) == GNM_HALIGN_CENTER_ACROSS_SELECTION || gnm_style_get_align_h (style) == GNM_HALIGN_DISTRIBUTED) gsf_output_printf (output, "c"); else gsf_output_printf (output, "l"); if (font_is_monospaced (style)) { if (gnm_style_get_font_bold (style) && gnm_style_get_font_italic (style)) gsf_output_printf (output, "fCBI"); else if (gnm_style_get_font_bold (style)) gsf_output_printf (output, "fCB"); else if (gnm_style_get_font_italic (style)) gsf_output_printf (output, "fCI"); else gsf_output_printf (output, "fCR"); } else if (font_is_helvetica (style)) { if (gnm_style_get_font_bold (style) && gnm_style_get_font_italic (style)) gsf_output_printf (output, "fHBI"); else if (gnm_style_get_font_bold (style)) gsf_output_printf (output, "fHB"); else if (gnm_style_get_font_italic (style)) gsf_output_printf (output, "fHI"); else gsf_output_printf (output, "fHR"); } else { /* default is times */ if (gnm_style_get_font_bold (style) && gnm_style_get_font_italic (style)) gsf_output_printf (output, "fTBI"); else if (gnm_style_get_font_bold (style)) gsf_output_printf (output, "fTB"); else if (gnm_style_get_font_italic (style)) gsf_output_printf (output, "fTI"); } fontsize = gnm_style_get_font_size (style); if (fontsize) { gsf_output_printf (output, "p%d", fontsize); v_size = v_size > fontsize ? v_size : fontsize; } } } gsf_output_printf (output, ".\n"); gsf_output_printf (output, ".vs %.2fp\n", 2.5 + v_size); for (col = r.start.col; col <= r.end.col; col++) { if (col > r.start.col) gsf_output_printf (output, "\t"); cell = sheet_cell_get (sheet, col, row); if (!cell) { /* empty cell */ gsf_output_printf (output, " "); } else { roff_fprintf (output, cell); } } gsf_output_printf (output, "\n"); if (row == r.start.row) gsf_output_printf (output, ".TH\n"); } gsf_output_printf (output, ".TE\n\n"); } g_slist_free (sheets); }
void dialog_zoom (WBCGtk *wbcg, Sheet *sheet) { ZoomState *state; GSList *l, *sheets; int i, row, cur_row; gboolean is_custom = TRUE; GtkRadioButton *radio; GtkWidget *focus_target; GladeXML *gui; GtkTreeViewColumn *column; g_return_if_fail (wbcg != NULL); g_return_if_fail (sheet != NULL); if (gnumeric_dialog_raise_if_exists (wbcg, ZOOM_DIALOG_KEY)) return; gui = gnm_glade_xml_new (GO_CMD_CONTEXT (wbcg), "dialog-zoom.glade", NULL, NULL); if (gui == NULL) return; state = g_new (ZoomState, 1); state->wbcg = wbcg; state->gui = gui; state->dialog = glade_xml_get_widget (state->gui, "Zoom"); g_return_if_fail (state->dialog != NULL); /* Get the list of sheets */ state->sheet_list_model = gtk_list_store_new (2, G_TYPE_STRING, G_TYPE_POINTER); state->sheet_list = GTK_TREE_VIEW (glade_xml_get_widget (state->gui, "sheet_list")); gtk_tree_view_set_headers_visible (state->sheet_list, FALSE); gtk_tree_view_set_model (state->sheet_list, GTK_TREE_MODEL (state->sheet_list_model)); state->sheet_list_selection = gtk_tree_view_get_selection (state->sheet_list); gtk_tree_selection_set_mode (state->sheet_list_selection, GTK_SELECTION_MULTIPLE); column = gtk_tree_view_column_new_with_attributes (_("Name"), gtk_cell_renderer_text_new (), "text", 0, NULL); gtk_tree_view_column_set_sort_column_id (column, COL_SHEET_NAME); gtk_tree_view_append_column (GTK_TREE_VIEW (state->sheet_list), column); sheets = workbook_sheets (wb_control_get_workbook (WORKBOOK_CONTROL (wbcg))); cur_row = row = 0; for (l = sheets; l; l = l->next) { GtkTreeIter iter; Sheet *this_sheet = l->data; gtk_list_store_append (state->sheet_list_model, &iter); gtk_list_store_set (state->sheet_list_model, &iter, COL_SHEET_NAME, this_sheet->name_unquoted, COL_SHEET_PTR, this_sheet, -1); if (this_sheet == sheet) cur_row = row; row++; } g_slist_free (sheets); { GtkTreePath *path = gtk_tree_path_new_from_indices (cur_row, -1); gtk_tree_view_set_cursor (state->sheet_list, path, NULL, FALSE); gtk_tree_path_free (path); } state->zoom = GTK_SPIN_BUTTON (glade_xml_get_widget (state->gui, "zoom")); g_return_if_fail (state->zoom != NULL); state->custom = GTK_RADIO_BUTTON (glade_xml_get_widget (state->gui, "radio_custom")); g_return_if_fail (state->custom != NULL); focus_target = GTK_WIDGET (state->custom); g_signal_connect (G_OBJECT (state->custom), "clicked", G_CALLBACK (focus_to_custom), (gpointer) state); g_signal_connect (G_OBJECT (state->zoom), "focus_in_event", G_CALLBACK (custom_selected), state); for (i = 0; buttons[i].name != NULL; i++) { radio = GTK_RADIO_BUTTON (glade_xml_get_widget (state->gui, buttons[i].name)); g_return_if_fail (radio != NULL); g_object_set_data (G_OBJECT (radio), ZOOM_DIALOG_FACTOR_KEY, GINT_TO_POINTER(buttons[i].factor)); g_signal_connect (G_OBJECT (radio), "toggled", G_CALLBACK (radio_toggled), state); if (((int)(sheet->last_zoom_factor_used * 100. + .5)) == buttons[i].factor) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio), TRUE); is_custom = FALSE; focus_target = GTK_WIDGET (radio); } } if (is_custom) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (state->custom), TRUE); gtk_spin_button_set_value (state->zoom, (int)(sheet->last_zoom_factor_used * 100. + .5)); } state->ok_button = glade_xml_get_widget (state->gui, "ok_button"); g_signal_connect (G_OBJECT (state->ok_button), "clicked", G_CALLBACK (cb_zoom_ok_clicked), state); state->cancel_button = glade_xml_get_widget (state->gui, "cancel_button"); g_signal_connect (G_OBJECT (state->cancel_button), "clicked", G_CALLBACK (cb_zoom_cancel_clicked), state); gnumeric_editable_enters (GTK_WINDOW (state->dialog), GTK_WIDGET (&state->zoom->entry)); gnumeric_init_help_button ( glade_xml_get_widget (state->gui, "help_button"), GNUMERIC_HELP_LINK_ZOOM); gnm_dialog_setup_destroy_handlers (GTK_DIALOG (state->dialog), wbcg, GNM_DIALOG_DESTROY_SHEET_REMOVED); gnumeric_keyed_dialog (wbcg, GTK_WINDOW (state->dialog), ZOOM_DIALOG_KEY); g_object_set_data_full (G_OBJECT (state->dialog), "state", state, (GDestroyNotify) cb_zoom_destroy); wbc_gtk_attach_guru (state->wbcg, state->dialog); gtk_widget_show (state->dialog); gtk_widget_grab_focus (focus_target); }