void dialog_workbook_attr (WBCGtk *wbcg) { GtkBuilder *gui; AttrState *state; g_return_if_fail (wbcg != NULL); if (gnm_dialog_raise_if_exists (wbcg, WORKBOOK_ATTRIBUTE_KEY)) return; gui = gnm_gtk_builder_load ("res:ui/workbook-attr.ui", NULL, GO_CMD_CONTEXT (wbcg)); if (gui == NULL) return; /* Initialize */ state = g_new (AttrState, 1); state->gui = gui; state->wbcg = wbcg; state->wbv = wb_control_view (GNM_WBC (wbcg)); state->wb = wb_control_get_workbook (GNM_WBC (wbcg)); attr_dialog_impl (state); /* Select the same page the last invocation used */ attr_dialog_select_page (state, attr_dialog_page); }
/** * dialog_advanced_filter: * @wbcg: * @sheet: * * Show the dialog (guru). * **/ void dialog_advanced_filter (WBCGtk *wbcg) { AdvancedFilterState *state; WorkbookControl *wbc; g_return_if_fail (wbcg != NULL); wbc = GNM_WBC (wbcg); /* Only pop up one copy per workbook */ if (gnm_dialog_raise_if_exists (wbcg, ADVANCED_FILTER_KEY)) return; state = g_new (AdvancedFilterState, 1); if (dialog_tool_init (state, wbcg, wb_control_cur_sheet (wbc), GNUMERIC_HELP_LINK_ADVANCED_FILTER, "advanced-filter.ui", "Filter", _("Could not create the Advanced Filter dialog."), ADVANCED_FILTER_KEY, G_CALLBACK (advanced_filter_ok_clicked_cb), NULL, G_CALLBACK (advanced_filter_update_sensitivity_cb), 0)) return; gnm_dao_set_inplace (GNM_DAO (state->gdao), _("Filter _in-place")); gnm_dao_set_put (GNM_DAO (state->gdao), FALSE, FALSE); advanced_filter_update_sensitivity_cb (NULL, state); tool_load_selection ((GenericToolState *)state, TRUE); return; }
void dialog_goto_cell (WBCGtk *wbcg) { GotoState* state; GtkBuilder *gui; g_return_if_fail (wbcg != NULL); if (gnm_dialog_raise_if_exists (wbcg, GOTO_KEY)) return; gui = gnm_gtk_builder_load ("goto.ui", NULL, GO_CMD_CONTEXT (wbcg)); if (gui == NULL) return; state = g_new (GotoState, 1); state->wbcg = wbcg; state->wb = wb_control_get_workbook (GNM_WBC (wbcg)); state->gui = gui; state->dialog = go_gtk_builder_get_widget (state->gui, "goto_dialog"); if (dialog_goto_init (state)) { go_gtk_notice_dialog (wbcg_toplevel (wbcg), GTK_MESSAGE_ERROR, _("Could not create the goto dialog.")); g_free (state); return; } gnm_keyed_dialog (state->wbcg, GTK_WINDOW (state->dialog), GOTO_KEY); gtk_widget_show_all (state->dialog); }
/** * dialog_solver: * @wbcg: * @sheet: * * Create the dialog (guru). * **/ void dialog_solver (WBCGtk *wbcg, Sheet *sheet) { SolverState *state; GnmSolverParameters *old_params = sheet->solver_parameters; gboolean got_it; int pass; /* Only pop up one copy per workbook */ if (gnm_dialog_raise_if_exists (wbcg, SOLVER_KEY)) return; /* * First time around, pick a functional algorithm preferably one we * can determine is functional without asking the user anything. */ got_it = gnm_solver_factory_functional (old_params->options.algorithm, NULL); for (pass = 1; !got_it && pass <= 2; pass++) { GSList *l; WBCGtk *wbcg2 = pass == 2 ? wbcg : NULL; for (l = gnm_solver_db_get (); l; l = l->next) { GnmSolverFactory *factory = l->data; if (old_params->options.model_type != factory->type) continue; if (gnm_solver_factory_functional (factory, wbcg2)) { got_it = TRUE; gnm_solver_param_set_algorithm (old_params, factory); break; } } } state = g_new0 (SolverState, 1); state->ref_count = 1; state->wbcg = wbcg; state->sheet = sheet; state->warning_dialog = NULL; state->orig_params = gnm_solver_param_dup (sheet->solver_parameters, sheet); if (dialog_init (state)) { go_gtk_notice_dialog (wbcg_toplevel (wbcg), GTK_MESSAGE_ERROR, _("Could not create the Solver dialog.")); unref_state (state); return; } gnm_dialog_setup_destroy_handlers (GTK_DIALOG (state->dialog), wbcg, GNM_DIALOG_DESTROY_SHEET_REMOVED); gnm_keyed_dialog (state->wbcg, GTK_WINDOW (state->dialog), SOLVER_KEY); gtk_widget_show (state->dialog); }
void dialog_about (WBCGtk *wbcg) { GtkWidget *w, *c; GList *children; AboutState *state; if (gnm_dialog_raise_if_exists (wbcg, ABOUT_KEY)) return; state = g_new0 (AboutState, 1); w = g_object_new (GTK_TYPE_ABOUT_DIALOG, "title", _("About Gnumeric"), "version", GNM_VERSION_FULL, "website", "http://www.gnumeric.org/", "website-label", _("Visit the Gnumeric website"), "logo-icon-name", "gnumeric", "copyright", _("Copyright \xc2\xa9 1998-2015"), "comments", _("Free, Fast, Accurate - Pick Any Three!"), NULL); state->dialog = w; g_signal_connect (w, "response", G_CALLBACK (gtk_widget_destroy), NULL); g_signal_connect_swapped (w, "destroy", G_CALLBACK (free_state), state); c = gtk_dialog_get_content_area (GTK_DIALOG (w)); children = gtk_container_get_children (GTK_CONTAINER (c)); if (children && GTK_IS_BOX (children->data)) { GtkWidget *vbox = children->data; int height; PangoLayout *layout; state->anim_area = gtk_drawing_area_new (); layout = gtk_widget_create_pango_layout (state->anim_area, "x"); pango_layout_get_pixel_size (layout, NULL, &height); gtk_widget_set_size_request (state->anim_area, -1, 8 * height); g_object_unref (layout); g_signal_connect (state->anim_area, "draw", G_CALLBACK (about_dialog_anim_draw), state); gtk_box_pack_end (GTK_BOX (vbox), state->anim_area, TRUE, TRUE, 0); create_animation (state); state->timer = g_timeout_add (TIME_SLICE, about_dialog_timer, state); } g_list_free (children); gnm_keyed_dialog (wbcg, GTK_WINDOW (w), ABOUT_KEY); gtk_widget_show_all (w); }
void dialog_data_table (WBCGtk *wbcg) { GnmDialogDataTable *state; GnmRange const *r; GnmRange input_range; SheetView *sv; Sheet *sheet; g_return_if_fail (wbcg != NULL); if (wbc_gtk_get_guru (wbcg) || gnm_dialog_raise_if_exists (wbcg, DIALOG_DATA_TABLE_KEY)) return; sv = wb_control_cur_sheet_view (GNM_WBC (wbcg)); r = selection_first_range (sv, GO_CMD_CONTEXT (wbcg), _("Create Data Table")); if (NULL == r) return; if (range_width (r) <= 1 || range_height (r) <= 1) { GError *msg = g_error_new (go_error_invalid(), 0, _("The selection must have more than 1 column and row to create a Data Table.")); go_cmd_context_error (GO_CMD_CONTEXT (wbcg), msg); g_error_free (msg); return; } input_range = *r; input_range.start.col++; input_range.start.row++; sheet = sv_sheet (sv); if (sheet_range_splits_region (sheet, &input_range, NULL, GO_CMD_CONTEXT (wbcg), _("Data Table"))) return; if (cmd_cell_range_is_locked_effective (sheet, &input_range, GNM_WBC (wbcg), _("Data Table"))) return; state = g_new0 (GnmDialogDataTable, 1); state->wbcg = wbcg; state->sheet = sheet; state->input_range = input_range; if (data_table_init (state, wbcg)) { go_gtk_notice_dialog (wbcg_toplevel (wbcg), GTK_MESSAGE_ERROR, _("Could not create the Data Table definition dialog.")); g_free (state); } }
void dialog_col_row (WBCGtk *wbcg, char const *operation, ColRowCallback_t callback, gpointer data) { GtkBuilder *gui; ColRowState *state; g_return_if_fail (wbcg != NULL); if (gnm_dialog_raise_if_exists (wbcg, COL_ROW_DIALOG_KEY)) return; gui = gnm_gtk_builder_load ("colrow.ui", NULL, GO_CMD_CONTEXT (wbcg)); if (gui == NULL) return; state = g_new (ColRowState, 1); state->wbcg = wbcg; state->callback = callback; state->data = data; state->gui = gui; state->dialog = go_gtk_builder_get_widget (state->gui, "dialog"); state->ok_button = go_gtk_builder_get_widget (state->gui, "ok_button"); g_signal_connect (G_OBJECT (state->ok_button), "clicked", G_CALLBACK (cb_dialog_col_row_ok_clicked), state); state->cancel_button = go_gtk_builder_get_widget (state->gui, "cancel_button"); g_signal_connect (G_OBJECT (state->cancel_button), "clicked", G_CALLBACK (cb_dialog_col_row_cancel_clicked), state); gnm_init_help_button ( go_gtk_builder_get_widget (state->gui, "help_button"), GNUMERIC_HELP_LINK_GROUP_UNGROUP); gtk_window_set_title (GTK_WINDOW (state->dialog), operation); wbc_gtk_attach_guru (state->wbcg, state->dialog); g_object_set_data_full (G_OBJECT (state->dialog), "state", state, (GDestroyNotify) cb_dialog_col_row_destroy); gnm_keyed_dialog (wbcg, GTK_WINDOW (state->dialog), COL_ROW_DIALOG_KEY); gtk_widget_show (state->dialog); }
void dialog_so_list (WBCGtk *wbcg, GObject *so) { GnmDialogSOList *state; g_return_if_fail (wbcg != NULL); if (wbc_gtk_get_guru (wbcg) || gnm_dialog_raise_if_exists (wbcg, DIALOG_SO_LIST_KEY)) return; state = g_new0 (GnmDialogSOList, 1); if (so_list_init (state, wbcg, GNM_SO (so))) { go_gtk_notice_dialog (wbcg_toplevel (wbcg), GTK_MESSAGE_ERROR, _("Could not create the List Property dialog.")); g_free (state); } }
/** * dialog_random_cor_tool: * @wbcg: * @sheet: * * Show the dialog (guru). * **/ int dialog_random_cor_tool (WBCGtk *wbcg, Sheet *sheet) { RandomCorToolState *state; if (wbcg == NULL) { return 1; } /* Only pop up one copy per workbook */ if (gnm_dialog_raise_if_exists (wbcg, RANDOM_COR_KEY)) { return 0; } state = g_new (RandomCorToolState, 1); if (dialog_tool_init ((GnmGenericToolState *)state, wbcg, sheet, GNUMERIC_HELP_LINK_RANDOM_GENERATOR_COR, "res:ui/random-generation-cor.ui", "CorRandom", _("Could not create the Correlated Random Tool dialog."), RANDOM_COR_KEY, G_CALLBACK (random_cor_tool_ok_clicked_cb), NULL, G_CALLBACK (random_cor_tool_update_sensitivity_cb), 0)) return 0; gnm_dao_set_put (GNM_DAO (state->base.gdao), TRUE, TRUE); dialog_random_cor_tool_init (state); tool_load_selection ((GnmGenericToolState *)state, TRUE); gtk_widget_show_all (state->base.dialog); return 0; }
void dialog_new_view (WBCGtk *wbcg) { ViewState *state; GtkBuilder *gui; if (gnm_dialog_raise_if_exists (wbcg, VIEW_DIALOG_KEY)) return; gui = gnm_gtk_builder_load ("view.ui", NULL, GO_CMD_CONTEXT (wbcg)); if (gui == NULL) return; state = g_new (ViewState, 1); state->wbcg = wbcg; state->gui = gui; state->dialog = go_gtk_builder_get_widget (gui, "View"); state->location_elsewhere = GTK_RADIO_BUTTON (go_gtk_builder_get_widget (gui, "location_elsewhere")); state->location_display_name = GTK_ENTRY (go_gtk_builder_get_widget (gui, "location_display_name")); g_return_if_fail (state->dialog != NULL); { GdkScreen *this_screen = gtk_window_get_screen (wbcg_toplevel (wbcg)); GdkDisplay *this_display = gdk_screen_get_display (this_screen); int n_screens = gdk_display_get_n_screens (this_display); GtkBox *box = GTK_BOX (go_gtk_builder_get_widget (gui, "location_screens_vbox")); int i; for (i = 0; i < n_screens; i++) { /* Get this for every screen -- it might change. */ GSList *group = gtk_radio_button_get_group (state->location_elsewhere); GdkScreen *screen = gdk_display_get_screen (this_display, i); char *label = screen == this_screen ? (n_screens == 1 ? g_strdup (_("This screen")) : g_strdup_printf (_("Screen %d [This screen]"), i)) : g_strdup_printf (_("Screen %d"), i); GtkWidget *button = gtk_radio_button_new_with_label (group, label); g_free (label); if (screen == this_screen) gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE); g_object_set_data (G_OBJECT (button), "screen", screen); gtk_box_pack_start (box, button, TRUE, TRUE, 0); } } g_signal_connect (G_OBJECT (go_gtk_builder_get_widget (gui, "ok_button")), "clicked", G_CALLBACK (cb_view_ok_clicked), state); g_signal_connect (G_OBJECT (go_gtk_builder_get_widget (gui, "cancel_button")), "clicked", G_CALLBACK (cb_view_cancel_clicked), state); gnm_link_button_and_entry (GTK_WIDGET (state->location_elsewhere), GTK_WIDGET (state->location_display_name)); gnm_editable_enters (GTK_WINDOW (state->dialog), GTK_WIDGET (state->location_display_name)); gnm_init_help_button ( go_gtk_builder_get_widget (gui, "help_button"), GNUMERIC_HELP_LINK_VIEW); gnm_keyed_dialog (wbcg, GTK_WINDOW (state->dialog), VIEW_DIALOG_KEY); g_object_set_data_full (G_OBJECT (state->dialog), "state", state, (GDestroyNotify) cb_view_destroy); gtk_widget_show_all (state->dialog); }
void dialog_delete_cells (WBCGtk *wbcg) { DeleteCellState *state; WorkbookControl *wbc = GNM_WBC (wbcg); SheetView *sv = wb_control_cur_sheet_view (wbc); Sheet *sheet = sv_sheet (sv); GnmRange const *sel; GtkBuilder *gui; GtkWidget *w; int cols, rows; g_return_if_fail (wbcg != NULL); if (!(sel = selection_first_range (sv, GO_CMD_CONTEXT (wbc), _("Delete")))) return; cols = sel->end.col - sel->start.col + 1; rows = sel->end.row - sel->start.row + 1; if (range_is_full (sel, sheet, FALSE)) { cmd_delete_cols (wbc, sheet, sel->start.col, cols); return; } if (range_is_full (sel, sheet, TRUE)) { cmd_delete_rows (wbc, sheet, sel->start.row, rows); return; } if (gnm_dialog_raise_if_exists (wbcg, DELETE_CELL_DIALOG_KEY)) return; gui = gnm_gtk_builder_load ("res:ui/delete-cells.ui", NULL, GO_CMD_CONTEXT (wbcg)); if (gui == NULL) return; state = g_new (DeleteCellState, 1); state->wbcg = wbcg; state->sel = sel; state->gui = gui; state->sheet = sv_sheet (sv); state->dialog = go_gtk_builder_get_widget (state->gui, "Delete_cells"); if (state->dialog == NULL) { go_gtk_notice_dialog (wbcg_toplevel (wbcg), GTK_MESSAGE_ERROR, _("Could not create the Delete Cell dialog.")); g_free (state); return ; } w = go_gtk_builder_get_widget (state->gui, "okbutton"); g_signal_connect_swapped (G_OBJECT (w), "clicked", G_CALLBACK (cb_delete_cell_ok_clicked), state); w = go_gtk_builder_get_widget (state->gui, "cancelbutton"); g_signal_connect (G_OBJECT (w), "clicked", G_CALLBACK (cb_delete_cell_cancel_clicked), state); gnm_dialog_setup_destroy_handlers (GTK_DIALOG (state->dialog), state->wbcg, GNM_DIALOG_DESTROY_CURRENT_SHEET_REMOVED); gnm_init_help_button ( go_gtk_builder_get_widget (state->gui, "helpbutton"), GNUMERIC_HELP_LINK_DELETE_CELLS); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (go_gtk_builder_get_widget (state->gui, cols < rows ? "radio_0" : "radio_1")), TRUE); wbc_gtk_attach_guru (state->wbcg, state->dialog); g_object_set_data_full (G_OBJECT (state->dialog), "state", state, (GDestroyNotify) cb_delete_cell_destroy); gnm_keyed_dialog (wbcg, GTK_WINDOW (state->dialog), DELETE_CELL_DIALOG_KEY); gtk_widget_show (state->dialog); }
void dialog_so_styled (WBCGtk *wbcg, GObject *so, GOStyle *default_style, char const *title, so_styled_t extent) { DialogSOStyled *state; GtkWidget *dialog, *help, *editor; GOStyle *style; /* Only pop up one copy per workbook */ if (gnm_dialog_raise_if_exists (wbcg, GNM_SO_STYLED_KEY)) { g_object_unref (default_style); return; } state = g_new0 (DialogSOStyled, 1); state->so = G_OBJECT (so); state->wbcg = wbcg; state->orig_props = go_object_properties_collect (so); force_new_style (state->so); dialog = gtk_dialog_new_with_buttons (title, wbcg_toplevel (state->wbcg), GTK_DIALOG_DESTROY_WITH_PARENT, NULL, NULL); state->extent = extent; gnm_dialog_setup_destroy_handlers (GTK_DIALOG (dialog), state->wbcg, GNM_DIALOG_DESTROY_CURRENT_SHEET_REMOVED); help = gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_HELP, GTK_RESPONSE_HELP); gnm_init_help_button (help, "sect-graphics-drawings"); gtk_dialog_add_buttons (GTK_DIALOG (dialog), GNM_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GNM_STOCK_OK, GTK_RESPONSE_OK, NULL); g_object_get (so, "style", &style, NULL); editor = go_style_get_editor (style, default_style, GO_CMD_CONTEXT (wbcg), G_OBJECT (so)); g_object_unref (style); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), editor, TRUE, TRUE, TRUE); g_object_unref (default_style); if (extent & SO_STYLED_TEXT) { GtkWidget *text_w = dialog_so_styled_text_widget (state); gtk_widget_show_all (text_w); if (GTK_IS_NOTEBOOK (editor)) gtk_notebook_append_page (GTK_NOTEBOOK (editor), text_w, gtk_label_new (_("Content"))); else gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), text_w, TRUE, TRUE, TRUE); } if (extent & SO_STYLED_LINE) { GtkWidget *w = dialog_so_styled_line_widget (state, "end-arrow"); gtk_widget_show_all (w); if (GTK_IS_NOTEBOOK (editor)) gtk_notebook_append_page (GTK_NOTEBOOK (editor), w, gtk_label_new (_("Head"))); else gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), w, TRUE, TRUE, TRUE); } if (extent & SO_STYLED_LINE) { GtkWidget *w = dialog_so_styled_line_widget (state, "start-arrow"); gtk_widget_show_all (w); if (GTK_IS_NOTEBOOK (editor)) gtk_notebook_append_page (GTK_NOTEBOOK (editor), w, gtk_label_new (_("Tail"))); else gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), w, TRUE, TRUE, TRUE); } g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (cb_dialog_so_styled_response), state); gnm_keyed_dialog (state->wbcg, GTK_WINDOW (dialog), GNM_SO_STYLED_KEY); g_object_set_data_full (G_OBJECT (dialog), "state", state, (GDestroyNotify) dialog_so_styled_free); go_gtk_nonmodal_dialog (wbcg_toplevel (state->wbcg), GTK_WINDOW (dialog)); wbc_gtk_attach_guru (state->wbcg, dialog); gtk_widget_show (dialog); }
void dialog_tabulate (WBCGtk *wbcg, Sheet *sheet) { GtkBuilder *gui; GtkDialog *dialog; DialogState *dd; int i; g_return_if_fail (wbcg != NULL); /* Only one guru per workbook. */ if (wbc_gtk_get_guru (wbcg)) return; if (gnm_dialog_raise_if_exists (wbcg, TABULATE_KEY)) return; gui = gnm_gtk_builder_load ("tabulate.ui", NULL, GO_CMD_CONTEXT (wbcg)); if (gui == NULL) return; dialog = GTK_DIALOG (go_gtk_builder_get_widget (gui, "tabulate_dialog")); dd = g_new (DialogState, 1); dd->wbcg = wbcg; dd->gui = gui; dd->dialog = dialog; dd->sheet = sheet; dd->grid = GTK_GRID (go_gtk_builder_get_widget (gui, "main-grid")); /* we might get the 4 below from the positon of some of the widgets inside the grid */ for (i = 1; i < 4; i++) { GnmExprEntry *ge = gnm_expr_entry_new (wbcg, TRUE); gnm_expr_entry_set_flags (ge, GNM_EE_SINGLE_RANGE | GNM_EE_SHEET_OPTIONAL, GNM_EE_MASK); gtk_grid_attach (dd->grid, GTK_WIDGET (ge), COL_CELL, i + 1, 1, 1); gtk_widget_set_margin_left (GTK_WIDGET (ge), 18); gtk_widget_show (GTK_WIDGET (ge)); } dd->resultrangetext = gnm_expr_entry_new (wbcg, TRUE); gnm_expr_entry_set_flags (dd->resultrangetext, GNM_EE_SINGLE_RANGE | GNM_EE_SHEET_OPTIONAL, GNM_EE_MASK); gtk_grid_attach (dd->grid, GTK_WIDGET (dd->resultrangetext), 0, 6, 4, 1); gtk_widget_set_margin_left (GTK_WIDGET (dd->resultrangetext), 18); gtk_widget_show (GTK_WIDGET (dd->resultrangetext)); g_signal_connect (G_OBJECT (go_gtk_builder_get_widget (gui, "ok_button")), "clicked", G_CALLBACK (tabulate_ok_clicked), dd); g_signal_connect (G_OBJECT (go_gtk_builder_get_widget (gui, "cancel_button")), "clicked", G_CALLBACK (cancel_clicked), dd); /* FIXME: Add correct helpfile address */ gnm_init_help_button ( go_gtk_builder_get_widget (gui, "help_button"), GNUMERIC_HELP_LINK_TABULATE); g_object_set_data_full (G_OBJECT (dialog), "state", dd, (GDestroyNotify) cb_dialog_destroy); gnm_dialog_setup_destroy_handlers (dialog, wbcg, GNM_DIALOG_DESTROY_SHEET_REMOVED); gtk_widget_show_all (gtk_dialog_get_content_area (dialog)); wbc_gtk_attach_guru (wbcg, GTK_WIDGET (dialog)); non_model_dialog (wbcg, dialog, TABULATE_KEY); }
void dialog_row_height (WBCGtk *wbcg, gboolean use_default) { RowHeightState *state; g_return_if_fail (wbcg != NULL); if (gnm_dialog_raise_if_exists (wbcg, ROW_HEIGHT_DIALOG_KEY)) return; state = g_new (RowHeightState, 1); state->wbcg = wbcg; state->sv = wb_control_cur_sheet_view (GNM_WBC (wbcg)); state->sheet = sv_sheet (state->sv); state->adjusting = FALSE; state->gui = gnm_gtk_builder_load ("row-height.ui", NULL, GO_CMD_CONTEXT (wbcg)); g_return_if_fail (state->gui != NULL); state->dialog = go_gtk_builder_get_widget (state->gui, "dialog"); state->description = GTK_WIDGET (go_gtk_builder_get_widget (state->gui, "description")); state->points = GTK_WIDGET (go_gtk_builder_get_widget (state->gui, "pts-label")); state->spin = GTK_SPIN_BUTTON (go_gtk_builder_get_widget (state->gui, "spin")); gtk_adjustment_set_lower (gtk_spin_button_get_adjustment (state->spin), GNM_ROW_MARGIN + GNM_ROW_MARGIN + 1); g_signal_connect (G_OBJECT (state->spin), "value-changed", G_CALLBACK (cb_dialog_row_height_value_changed), state); state->default_check = GTK_WIDGET (go_gtk_builder_get_widget (state->gui, "default_check")); g_signal_connect (G_OBJECT (state->default_check), "clicked", G_CALLBACK (cb_dialog_row_height_default_check_toggled), state); state->ok_button = go_gtk_builder_get_widget (state->gui, "ok_button"); g_signal_connect (G_OBJECT (state->ok_button), "clicked", G_CALLBACK (cb_dialog_row_height_ok_clicked), state); state->apply_button = go_gtk_builder_get_widget (state->gui, "apply_button"); g_signal_connect (G_OBJECT (state->apply_button), "clicked", G_CALLBACK (cb_dialog_row_height_apply_clicked), state); state->cancel_button = go_gtk_builder_get_widget (state->gui, "cancel_button"); g_signal_connect (G_OBJECT (state->cancel_button), "clicked", G_CALLBACK (cb_dialog_row_height_cancel_clicked), state); gnm_init_help_button ( go_gtk_builder_get_widget (state->gui, "help_button"), GNUMERIC_HELP_LINK_ROW_HEIGHT); g_object_set_data_full (G_OBJECT (state->dialog), "state", state, (GDestroyNotify) cb_dialog_row_height_destroy); gnm_dialog_setup_destroy_handlers (GTK_DIALOG (state->dialog), state->wbcg, GNM_DIALOG_DESTROY_CURRENT_SHEET_REMOVED); dialog_row_height_set_mode (use_default, state); dialog_row_height_load_value (state); wbc_gtk_attach_guru (state->wbcg, state->dialog); gnm_keyed_dialog (wbcg, GTK_WINDOW (state->dialog), ROW_HEIGHT_DIALOG_KEY); gtk_widget_show (state->dialog); }
void dialog_so_size (WBCGtk *wbcg, GObject *so) { GtkBuilder *gui; SOSizeState *state; GtkGrid *grid; int width, height; g_return_if_fail (wbcg != NULL); if (gnm_dialog_raise_if_exists (wbcg, SO_SIZE_DIALOG_KEY)) return; gui = gnm_gtk_builder_load ("res:ui/sheetobject-size.ui", NULL, GO_CMD_CONTEXT (wbcg)); if (gui == NULL) return; state = g_new (SOSizeState, 1); state->wbcg = wbcg; state->sv = wb_control_cur_sheet_view (GNM_WBC (wbcg)); state->sheet = sv_sheet (state->sv); state->scg = wbcg_get_nth_scg (wbcg, state->sheet->index_in_wb); state->gui = gui; state->dialog = go_gtk_builder_get_widget (state->gui, "object-size"); state->so = GNM_SO (so); g_object_ref (so); state->nameentry = GTK_ENTRY (go_gtk_builder_get_widget (state->gui, "name-entry")); state->old_anchor = NULL; state->old_name = NULL; g_object_get (so, "name", &state->old_name, NULL); if (state->old_name == NULL) state->old_name = g_strdup (""); gtk_entry_set_text (state->nameentry, state->old_name); state->so_name_changed = FALSE; g_signal_connect (G_OBJECT (state->nameentry), "focus-out-event", G_CALLBACK (cb_dialog_so_size_name_changed), state); state->so_print_check_changed = FALSE; state->wpoints = GTK_WIDGET (go_gtk_builder_get_widget (state->gui, "w-pts-label")); state->wspin = GTK_SPIN_BUTTON (go_gtk_builder_get_widget (state->gui, "w-spin")); state->hpoints = GTK_WIDGET (go_gtk_builder_get_widget (state->gui, "h-pts-label")); state->hspin = GTK_SPIN_BUTTON (go_gtk_builder_get_widget (state->gui, "h-spin")); state->xpoints = GTK_WIDGET (go_gtk_builder_get_widget (state->gui, "x-pts-label")); state->xspin = GTK_SPIN_BUTTON (go_gtk_builder_get_widget (state->gui, "x-spin")); state->ypoints = GTK_WIDGET (go_gtk_builder_get_widget (state->gui, "y-pts-label")); state->yspin = GTK_SPIN_BUTTON (go_gtk_builder_get_widget (state->gui, "y-spin")); state->print_check = GTK_WIDGET (go_gtk_builder_get_widget (state->gui, "print-check")); state->modecombo = GNM_SO_ANCHOR_MODE_CHOOSER (gnm_so_anchor_mode_chooser_new (sheet_object_can_resize (state->so))); dialog_so_size_load (state); state->active_anchor = sheet_object_anchor_dup (sheet_object_get_anchor (state->so)); width = state->coords[2] - state->coords[0]; height = state->coords[3] - state->coords[1]; gtk_spin_button_set_value (state->wspin, (width < 0) ? - width : width); gtk_spin_button_set_value (state->hspin, (height < 0) ? - height : height); gtk_spin_button_set_value (state->xspin, 0.); gtk_spin_button_set_value (state->yspin, 0.); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (state->print_check), !(state->so->flags & SHEET_OBJECT_PRINT)); gnm_so_anchor_mode_chooser_set_mode (state->modecombo, state->so->anchor.mode); grid = GTK_GRID (gtk_builder_get_object (state->gui, "main-grid")); gtk_grid_insert_row (grid, 7); gtk_grid_attach (grid, GTK_WIDGET (state->modecombo), 0, 7, 2, 1); gtk_widget_set_halign (GTK_WIDGET (state->modecombo), GTK_ALIGN_START); gtk_widget_show (GTK_WIDGET (state->modecombo)); g_signal_connect (G_OBJECT (state->wspin), "value-changed", G_CALLBACK (cb_dialog_so_size_value_changed_update_points), state->wpoints); g_signal_connect (G_OBJECT (state->hspin), "value-changed", G_CALLBACK (cb_dialog_so_size_value_changed_update_points), state->hpoints); g_signal_connect (G_OBJECT (state->xspin), "value-changed", G_CALLBACK (cb_dialog_so_size_value_changed_update_points), state->xpoints); g_signal_connect (G_OBJECT (state->yspin), "value-changed", G_CALLBACK (cb_dialog_so_size_value_changed_update_points), state->ypoints); g_signal_connect (G_OBJECT (state->print_check), "toggled", G_CALLBACK (cb_dialog_so_size_print_check_toggled), state); cb_dialog_so_size_value_changed_update_points (state->wspin, GTK_LABEL (state->wpoints)); cb_dialog_so_size_value_changed_update_points (state->hspin, GTK_LABEL (state->hpoints)); cb_dialog_so_size_value_changed_update_points (state->xspin, GTK_LABEL (state->xpoints)); cb_dialog_so_size_value_changed_update_points (state->yspin, GTK_LABEL (state->ypoints)); g_signal_connect (G_OBJECT (state->wspin), "value-changed", G_CALLBACK (cb_dialog_so_size_value_changed), state); g_signal_connect (G_OBJECT (state->hspin), "value-changed", G_CALLBACK (cb_dialog_so_size_value_changed), state); g_signal_connect (G_OBJECT (state->xspin), "value-changed", G_CALLBACK (cb_dialog_so_size_value_changed), state); g_signal_connect (G_OBJECT (state->yspin), "value-changed", G_CALLBACK (cb_dialog_so_size_value_changed), state); g_signal_connect (G_OBJECT (state->modecombo), "changed", G_CALLBACK (cb_dialog_so_size_mode_changed), state); state->ok_button = go_gtk_builder_get_widget (state->gui, "ok_button"); g_signal_connect (G_OBJECT (state->ok_button), "clicked", G_CALLBACK (cb_dialog_so_size_ok_clicked), state); state->apply_button = go_gtk_builder_get_widget (state->gui, "apply_button"); g_signal_connect (G_OBJECT (state->apply_button), "clicked", G_CALLBACK (cb_dialog_so_size_apply_clicked), state); state->cancel_button = go_gtk_builder_get_widget (state->gui, "cancel_button"); g_signal_connect (G_OBJECT (state->cancel_button), "clicked", G_CALLBACK (cb_dialog_so_size_cancel_clicked), state); gnm_init_help_button ( go_gtk_builder_get_widget (state->gui, "help_button"), GNUMERIC_HELP_LINK_SO_SIZE); gnm_dialog_setup_destroy_handlers (GTK_DIALOG (state->dialog), state->wbcg, GNM_DIALOG_DESTROY_CURRENT_SHEET_REMOVED); wbc_gtk_attach_guru (state->wbcg, state->dialog); g_object_set_data_full (G_OBJECT (state->dialog), "state", state, (GDestroyNotify) cb_dialog_so_size_destroy); gnm_keyed_dialog (wbcg, GTK_WINDOW (state->dialog), SO_SIZE_DIALOG_KEY); dialog_so_size_button_sensitivity (state); gtk_widget_show (state->dialog); }
void dialog_about (WBCGtk *wbcg) { GtkWidget *w, *c; GList *children; AboutState *state; GPtrArray *authors; GPtrArray *documenters; GPtrArray *artists; unsigned ui; if (gnm_dialog_raise_if_exists (wbcg, ABOUT_KEY)) return; state = g_new0 (AboutState, 1); authors = g_ptr_array_new_with_free_func (g_free); documenters = g_ptr_array_new_with_free_func (g_free); artists = g_ptr_array_new_with_free_func (g_free); for (ui = 0; ui < G_N_ELEMENTS (contributors); ui++) { const char *name = contributors[ui].name; const char *details = contributors[ui].details; unsigned flags = contributors[ui].contributions; if (flags & GNM_ART) { g_ptr_array_add (artists, g_strdup (name)); } if (flags & GNM_DOCUMENTATION) { g_ptr_array_add (documenters, g_strdup (name)); } if (flags & ~(GNM_ART | GNM_DOCUMENTATION)) { char *text = details ? g_strdup_printf ("%s (%s)", name, details) : g_strdup (name); g_ptr_array_add (authors, text); } } g_ptr_array_add (authors, NULL); g_ptr_array_add (documenters, NULL); g_ptr_array_add (artists, NULL); w = g_object_new (GTK_TYPE_ABOUT_DIALOG, "title", _("About Gnumeric"), "version", GNM_VERSION_FULL, "website", PACKAGE_URL, "website-label", _("Visit the Gnumeric website"), "logo-icon-name", "gnumeric", "copyright", _("Copyright \xc2\xa9 1998-2018"), "comments", _("Free, Fast, Accurate - Pick Any Three!"), "license", _(LICENSE_TEXT), "wrap-license", TRUE, "authors", authors->pdata, "documenters", documenters->pdata, "artists", artists->pdata, NULL); g_ptr_array_free (authors, TRUE); g_ptr_array_free (documenters, TRUE); g_ptr_array_free (artists, TRUE); state->dialog = w; g_signal_connect (w, "response", G_CALLBACK (gtk_widget_destroy), NULL); g_signal_connect_swapped (w, "destroy", G_CALLBACK (free_state), state); c = gtk_dialog_get_content_area (GTK_DIALOG (w)); children = gtk_container_get_children (GTK_CONTAINER (c)); if (children && GTK_IS_BOX (children->data)) { GtkWidget *vbox = children->data; int width, height; PangoLayout *layout; state->anim_area = gtk_drawing_area_new (); layout = gtk_widget_create_pango_layout (state->anim_area, "x"); pango_layout_get_pixel_size (layout, &width, &height); gtk_widget_set_size_request (state->anim_area, 40 * width, 8 * height); g_object_unref (layout); g_signal_connect (state->anim_area, "draw", G_CALLBACK (about_dialog_anim_draw), state); gtk_box_pack_end (GTK_BOX (vbox), state->anim_area, TRUE, TRUE, 0); create_animation (state); state->timer = g_timeout_add (TIME_SLICE, about_dialog_timer, state); } g_list_free (children); gnm_keyed_dialog (wbcg, GTK_WINDOW (w), ABOUT_KEY); gtk_widget_show_all (w); }
void dialog_autosave (WBCGtk *wbcg) { GtkBuilder *gui; autosave_t *state; int secs; gboolean prompt; g_return_if_fail (wbcg != NULL); if (gnm_dialog_raise_if_exists (wbcg, AUTOSAVE_KEY)) return; gui = gnm_gtk_builder_load ("autosave.ui", NULL, GO_CMD_CONTEXT (wbcg)); if (gui == NULL) return; g_object_get (wbcg, "autosave-time", &secs, "autosave-prompt", &prompt, NULL); state = g_new (autosave_t, 1); state->wbcg = wbcg; state->wb = wb_control_get_workbook (GNM_WBC (wbcg)); state->dialog = go_gtk_builder_get_widget (gui, "AutoSave"); state->minutes_entry = go_gtk_builder_get_widget (gui, "minutes"); state->prompt_cb = go_gtk_builder_get_widget (gui, "prompt_on_off"); state->autosave_on_off = go_gtk_builder_get_widget (gui, "autosave_on_off"); state->ok_button = go_gtk_builder_get_widget (gui, "button1"); state->cancel_button = go_gtk_builder_get_widget (gui, "button2"); if (!state->dialog || !state->minutes_entry || !state->prompt_cb || !state->autosave_on_off) { go_gtk_notice_dialog (wbcg_toplevel (wbcg), GTK_MESSAGE_ERROR, _("Could not create the autosave dialog.")); g_free (state); return; } float_to_entry (GTK_ENTRY (state->minutes_entry), secs / 60); gnm_editable_enters (GTK_WINDOW (state->dialog), state->minutes_entry); g_signal_connect (G_OBJECT (state->autosave_on_off), "toggled", G_CALLBACK (autosave_set_sensitivity), state); g_signal_connect (G_OBJECT (state->minutes_entry), "changed", G_CALLBACK (autosave_set_sensitivity), state); g_signal_connect (G_OBJECT (state->ok_button), "clicked", G_CALLBACK (cb_autosave_ok), state); g_signal_connect (G_OBJECT (state->cancel_button), "clicked", G_CALLBACK (cb_autosave_cancel), state); g_object_set_data_full (G_OBJECT (state->dialog), "state", state, (GDestroyNotify)g_free); gnm_init_help_button ( go_gtk_builder_get_widget (gui, "button3"), GNUMERIC_HELP_LINK_AUTOSAVE); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (state->autosave_on_off), secs > 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (state->prompt_cb), prompt); autosave_set_sensitivity (NULL, state); gnm_keyed_dialog (state->wbcg, GTK_WINDOW (state->dialog), AUTOSAVE_KEY); gtk_widget_show (state->dialog); g_object_unref (gui); }
void dialog_data_slicer (WBCGtk *wbcg, gboolean create) { static GtkTargetEntry row_targets[] = { { (char *)"GTK_TREE_MODEL_ROW", GTK_TARGET_SAME_APP, 0 } }; DialogDataSlicer *state; GtkBuilder *gui; GtkWidget *w; g_return_if_fail (wbcg != NULL); if (gnm_dialog_raise_if_exists (wbcg, DIALOG_KEY)) return; gui = gnm_gtk_builder_load ("data-slicer.ui", NULL, GO_CMD_CONTEXT (wbcg)); if (NULL == gui) return; state = g_new0 (DialogDataSlicer, 1); state->wbcg = wbcg; state->sv = wb_control_cur_sheet_view (GNM_WBC (wbcg)); state->dialog = go_gtk_builder_get_widget (gui, "dialog_data_slicer"); state->notebook = go_gtk_builder_get_widget (gui, "notebook"); state->slicer = create ? NULL : sv_editpos_in_slicer (state->sv); state->cache = NULL; state->source = NULL; if (NULL == state->slicer) { state->slicer = g_object_new (GNM_SHEET_SLICER_TYPE, NULL); } else { g_object_ref (state->slicer); g_object_get (G_OBJECT (state->slicer), "cache", &state->cache, NULL); if (NULL != state->cache && NULL != (state->source = go_data_cache_get_source (state->cache))) g_object_ref (state->source); } state->source_expr = gnm_expr_entry_new (state->wbcg, TRUE); gnm_expr_entry_set_flags (state->source_expr, GNM_EE_SINGLE_RANGE, GNM_EE_MASK); g_signal_connect_swapped (G_OBJECT (state->source_expr), "changed", G_CALLBACK (cb_source_expr_changed), state); w = go_gtk_builder_get_widget (gui, "source_vbox"); gtk_box_pack_start (GTK_BOX (w), GTK_WIDGET (state->source_expr), FALSE, FALSE, 0); gtk_widget_show (GTK_WIDGET (state->source_expr)); w = go_gtk_builder_get_widget (gui, "ok_button"); g_signal_connect (G_OBJECT (w), "clicked", G_CALLBACK (cb_dialog_data_slicer_ok), state); w = go_gtk_builder_get_widget (gui, "cancel_button"); g_signal_connect (G_OBJECT (w), "clicked", G_CALLBACK (cb_dialog_data_slicer_cancel), state); state->treeview = GTK_TREE_VIEW (go_gtk_builder_get_widget (gui, "field_tree")); gtk_tree_view_enable_model_drag_source (GTK_TREE_VIEW (state->treeview), GDK_BUTTON1_MASK, row_targets, G_N_ELEMENTS (row_targets), GDK_ACTION_MOVE); gtk_tree_view_enable_model_drag_dest (GTK_TREE_VIEW (state->treeview), row_targets, G_N_ELEMENTS (row_targets), GDK_ACTION_MOVE); state->selection = gtk_tree_view_get_selection (state->treeview); gtk_tree_selection_set_mode (state->selection, GTK_SELECTION_SINGLE); g_signal_connect (state->selection, "changed", G_CALLBACK (cb_dialog_data_slicer_selection_changed), state); gtk_tree_view_append_column (state->treeview, gtk_tree_view_column_new_with_attributes ("", gtk_cell_renderer_text_new (), "text", FIELD_NAME, NULL)); cb_dialog_data_slicer_create_model (state); g_signal_connect (state->treeview, "realize", G_CALLBACK (gtk_tree_view_expand_all), NULL); gtk_notebook_set_current_page (GTK_NOTEBOOK (state->notebook), create ? 0 : 1); /* a candidate for merging into attach guru */ gnm_init_help_button (go_gtk_builder_get_widget (gui, "help_button"), GNUMERIC_HELP_LINK_DATA_SLICER); g_object_set_data_full (G_OBJECT (state->dialog), "state", state, (GDestroyNotify)cb_dialog_data_slicer_destroy); wbc_gtk_attach_guru (state->wbcg, state->dialog); gnm_keyed_dialog (wbcg, GTK_WINDOW (state->dialog), DIALOG_KEY); gtk_widget_show (state->dialog); g_object_unref (gui); }