/** * wbcg_insert_object: * @wbcg: #WBCGtk * * @so: The object the needs to be placed * * Takes a newly created #SheetObject that has not yet been realized and * prepares to place it on the sheet. * * NOTE : Absorbs a reference to the object. **/ void wbcg_insert_object (WBCGtk *wbcg, SheetObject *so) { int i, npages; SheetControlGUI *scg; g_return_if_fail (GNM_IS_WBC_GTK (wbcg)); g_return_if_fail (GNM_IS_SO (so)); wbcg_insert_object_clear (wbcg); npages = wbcg_get_n_scg (wbcg); for (i = 0; i < npages; i++) { if (NULL != (scg = wbcg_get_nth_scg (wbcg, i))) { scg_object_unselect (scg, NULL); scg_cursor_visible (scg, FALSE); scg_set_display_cursor (scg); sc_unant (GNM_SC (scg)); } } /* we can't set wbcg->new_object before now because if one sheet has a * selected object, the new object will be destroyed by the loop * above. See #669648. */ wbcg->new_object = so; wb_control_update_action_sensitivity (GNM_WBC (wbcg)); }
/** * wbcg_insert_object_clear: * @wbcg: #WBCGtk * * If we are preparing to insert a new object, unref the object, and restore * a normal state to the scgs that was changed in wbcg_insert_object * (e.g. visiblity of cursors) **/ void wbcg_insert_object_clear (WBCGtk *wbcg) { g_return_if_fail (GNM_IS_WBC_GTK (wbcg)); if (NULL != wbcg->new_object) { int i, npages; SheetControlGUI *scg; g_object_unref (wbcg->new_object); wbcg->new_object = NULL; npages = wbcg_get_n_scg (wbcg); for (i = 0; i < npages; i++) if (NULL != (scg = wbcg_get_nth_scg (wbcg, i))) scg_cursor_visible (scg, TRUE); } }
void dialog_so_size (WBCGtk *wbcg, GObject *so) { GtkBuilder *gui; SOSizeState *state; int width, height; g_return_if_fail (wbcg != NULL); if (gnumeric_dialog_raise_if_exists (wbcg, SO_SIZE_DIALOG_KEY)) return; gui = gnm_gtk_builder_load ("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 (WORKBOOK_CONTROL (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 = SHEET_OBJECT (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")); 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)); 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); 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); gnumeric_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); gnumeric_keyed_dialog (wbcg, GTK_WINDOW (state->dialog), SO_SIZE_DIALOG_KEY); dialog_so_size_button_sensitivity (state); gtk_widget_show (state->dialog); }