2 * dialog-row-height.c: Sets the magnification factor
5 * Andreas J. Guelzow <aguelzow@taliesin.ca>
7 * (c) Copyright 2002 Andreas J. Guelzow <aguelzow@taliesin.ca>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
19 * You should have received a copy of the GNU General Public License
20 * along with this program; if not, see <https://www.gnu.org/licenses/>.
22 #include <gnumeric-config.h>
23 #include <glib/gi18n-lib.h>
30 #include <workbook-control.h>
34 #include <sheet-view.h>
35 #include <application.h>
36 #include <workbook-cmd-format.h>
40 #define ROW_HEIGHT_DIALOG_KEY "row-height-dialog"
49 GtkWidget
*apply_button
;
50 GtkWidget
*cancel_button
;
51 GtkWidget
*default_check
;
52 GtkWidget
*description
;
56 gboolean set_default_value
;
59 gboolean orig_is_default
;
60 gboolean orig_some_default
;
61 gboolean orig_all_equal
;
66 dialog_row_height_update_points (RowHeightState
*state
)
68 gint value
= gtk_spin_button_get_value_as_int (state
->spin
);
69 double size_points
= value
* 72./gnm_app_display_dpi_get (TRUE
);
72 pts
= g_strdup_printf ("%.2f",size_points
);
73 gtk_label_set_text (GTK_LABEL (state
->points
), pts
);
78 dialog_row_height_button_sensitivity (RowHeightState
*state
)
80 gint value
= gtk_spin_button_get_value_as_int (state
->spin
);
81 gboolean use_default
= gtk_toggle_button_get_active
82 (GTK_TOGGLE_BUTTON (state
->default_check
));
83 gboolean changed_info
;
85 if (state
->set_default_value
) {
86 changed_info
= (state
->orig_value
!= value
);
88 changed_info
= (((!state
->orig_all_equal
|| (state
->orig_value
!= value
)
89 || state
->orig_some_default
) && !use_default
)
90 || (use_default
&& !state
->orig_is_default
));
93 gtk_widget_set_sensitive (state
->ok_button
, changed_info
);
94 gtk_widget_set_sensitive (state
->apply_button
, changed_info
);
96 dialog_row_height_update_points (state
);
100 cb_dialog_row_height_destroy (RowHeightState
*state
)
102 if (state
->gui
!= NULL
)
103 g_object_unref (state
->gui
);
108 cb_dialog_row_height_cancel_clicked (G_GNUC_UNUSED GtkWidget
*button
,
109 RowHeightState
*state
)
111 gtk_widget_destroy (state
->dialog
);
116 dialog_row_height_set_value (gint value
, RowHeightState
*state
)
118 gint adj_value
= value
/state
->sheet
->last_zoom_factor_used
+ 0.5;
119 gtk_spin_button_set_value (state
->spin
, adj_value
);
124 dialog_row_height_load_value (RowHeightState
*state
)
128 state
->orig_is_default
= TRUE
;
129 state
->orig_some_default
= FALSE
;
130 state
->orig_all_equal
= TRUE
;
132 state
->adjusting
= TRUE
;
133 if (state
->set_default_value
) {
134 value
= sheet_row_get_default_size_pixels (state
->sheet
);
136 for (l
= state
->sv
->selections
; l
; l
= l
->next
){
137 GnmRange
*ss
= l
->data
;
140 for (row
= ss
->start
.row
; row
<= ss
->end
.row
; row
++){
141 ColRowInfo
const *ri
= sheet_row_get_info (state
->sheet
, row
);
143 state
->orig_is_default
= FALSE
;
145 state
->orig_some_default
= TRUE
;
147 value
= ri
->size_pixels
;
148 else if (value
!= ri
->size_pixels
){
149 /* Values differ, so let the user enter the data */
150 state
->orig_all_equal
= FALSE
;
154 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (state
->default_check
),
155 state
->orig_is_default
);
157 state
->orig_value
= dialog_row_height_set_value (value
, state
);
158 dialog_row_height_button_sensitivity (state
);
159 state
->adjusting
= FALSE
;
163 cb_dialog_row_height_value_changed (G_GNUC_UNUSED GtkSpinButton
*spinbutton
,
164 RowHeightState
*state
)
166 if (!state
->adjusting
) {
167 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (state
->default_check
), FALSE
);
168 dialog_row_height_button_sensitivity (state
);
173 cb_dialog_row_height_default_check_toggled (GtkToggleButton
*togglebutton
, RowHeightState
*state
)
175 if (!state
->adjusting
) {
176 if (gtk_toggle_button_get_active (togglebutton
)) {
177 state
->adjusting
= TRUE
;
178 dialog_row_height_set_value (sheet_row_get_default_size_pixels (state
->sheet
),
180 state
->adjusting
= FALSE
;
182 dialog_row_height_button_sensitivity (state
);
187 cb_dialog_row_height_apply_clicked (G_GNUC_UNUSED GtkWidget
*button
,
188 RowHeightState
*state
)
190 gint value
= gtk_spin_button_get_value_as_int (state
->spin
);
191 int size_pixels
= (int)(value
* state
->sheet
->last_zoom_factor_used
+ 0.5);
192 gboolean use_default
= gtk_toggle_button_get_active
193 (GTK_TOGGLE_BUTTON (state
->default_check
));
195 if (state
->set_default_value
) {
196 double points
= value
* 72./gnm_app_display_dpi_get (TRUE
);
197 cmd_colrow_std_size (GNM_WBC (state
->wbcg
),
198 state
->sheet
, FALSE
, points
);
199 dialog_row_height_load_value (state
);
204 workbook_cmd_resize_selected_colrow (GNM_WBC (state
->wbcg
),
205 state
->sheet
, FALSE
, size_pixels
);
206 dialog_row_height_load_value (state
);
211 cb_dialog_row_height_ok_clicked (GtkWidget
*button
, RowHeightState
*state
)
213 cb_dialog_row_height_apply_clicked (button
, state
);
214 gtk_widget_destroy (state
->dialog
);
219 dialog_row_height_set_mode (gboolean set_default
, RowHeightState
*state
)
221 state
->set_default_value
= set_default
;
224 gtk_widget_hide (state
->default_check
);
225 gtk_label_set_text (GTK_LABEL (state
->description
),
226 _("Set standard/default row height"));
229 char *name
= g_markup_escape_text (state
->sheet
->name_unquoted
, -1);
230 gtk_widget_show (state
->default_check
);
231 text
= g_strdup_printf (_("Set row height of selection on "
232 "<span style='italic' weight='bold'>%s</span>"),
234 gtk_label_set_markup (GTK_LABEL (state
->description
), text
);
242 dialog_row_height (WBCGtk
*wbcg
, gboolean use_default
)
244 RowHeightState
*state
;
246 g_return_if_fail (wbcg
!= NULL
);
248 if (gnm_dialog_raise_if_exists (wbcg
, ROW_HEIGHT_DIALOG_KEY
))
251 state
= g_new (RowHeightState
, 1);
253 state
->sv
= wb_control_cur_sheet_view (GNM_WBC (wbcg
));
254 state
->sheet
= sv_sheet (state
->sv
);
255 state
->adjusting
= FALSE
;
256 state
->gui
= gnm_gtk_builder_load ("res:ui/row-height.ui", NULL
, GO_CMD_CONTEXT (wbcg
));
257 g_return_if_fail (state
->gui
!= NULL
);
259 state
->dialog
= go_gtk_builder_get_widget (state
->gui
, "dialog");
261 state
->description
= GTK_WIDGET (go_gtk_builder_get_widget (state
->gui
, "description"));
262 state
->points
= GTK_WIDGET (go_gtk_builder_get_widget (state
->gui
, "pts-label"));
264 state
->spin
= GTK_SPIN_BUTTON (go_gtk_builder_get_widget (state
->gui
, "spin"));
265 gtk_adjustment_set_lower (gtk_spin_button_get_adjustment (state
->spin
),
266 GNM_ROW_MARGIN
+ GNM_ROW_MARGIN
+ 1);
267 g_signal_connect (G_OBJECT (state
->spin
),
269 G_CALLBACK (cb_dialog_row_height_value_changed
), state
);
271 state
->default_check
= GTK_WIDGET (go_gtk_builder_get_widget (state
->gui
, "default_check"));
272 g_signal_connect (G_OBJECT (state
->default_check
),
274 G_CALLBACK (cb_dialog_row_height_default_check_toggled
), state
);
276 state
->ok_button
= go_gtk_builder_get_widget (state
->gui
, "ok_button");
277 g_signal_connect (G_OBJECT (state
->ok_button
),
279 G_CALLBACK (cb_dialog_row_height_ok_clicked
), state
);
280 state
->apply_button
= go_gtk_builder_get_widget (state
->gui
, "apply_button");
281 g_signal_connect (G_OBJECT (state
->apply_button
),
283 G_CALLBACK (cb_dialog_row_height_apply_clicked
), state
);
285 state
->cancel_button
= go_gtk_builder_get_widget (state
->gui
, "cancel_button");
286 g_signal_connect (G_OBJECT (state
->cancel_button
),
288 G_CALLBACK (cb_dialog_row_height_cancel_clicked
), state
);
290 gnm_init_help_button (
291 go_gtk_builder_get_widget (state
->gui
, "help_button"),
292 GNUMERIC_HELP_LINK_ROW_HEIGHT
);
293 g_object_set_data_full (G_OBJECT (state
->dialog
),
294 "state", state
, (GDestroyNotify
) cb_dialog_row_height_destroy
);
296 gnm_dialog_setup_destroy_handlers (GTK_DIALOG (state
->dialog
),
298 GNM_DIALOG_DESTROY_CURRENT_SHEET_REMOVED
);
300 dialog_row_height_set_mode (use_default
, state
);
301 dialog_row_height_load_value (state
);
303 wbc_gtk_attach_guru (state
->wbcg
, state
->dialog
);
304 gnm_keyed_dialog (wbcg
, GTK_WINDOW (state
->dialog
),
305 ROW_HEIGHT_DIALOG_KEY
);
306 gtk_widget_show (state
->dialog
);