1 /* vim: set sw=8: -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
6 * Jukka-Pekka Iivonen (jiivonen@hutcs.cs.hut.fi)
7 * Miguel de Icaza (miguel@kernel.org)
9 * (C) Copyright 2000, 2001 by Jukka-Pekka Iivonen (jiivonen@hutcs.cs.hut.fi)
11 * This program is free software; you can redistribute it and/or modify
12 * it under the terms of the GNU General Public License as published by
13 * the Free Software Foundation; either version 2 of the License, or
14 * (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU General Public License for more details.
21 * You should have received a copy of the GNU General Public License
22 * along with this program; if not, see <https://www.gnu.org/licenses/>.
24 #include <gnumeric-config.h>
29 #include <workbook-control.h>
33 #include <goffice/goffice.h>
34 #include <glib/gi18n-lib.h>
40 GtkWidget
*minutes_entry
;
42 GtkWidget
*autosave_on_off
;
44 GtkWidget
*cancel_button
;
49 #define AUTOSAVE_KEY "autosave-setup-dialog"
52 autosave_set_sensitivity (G_GNUC_UNUSED GtkWidget
*widget
,
55 gboolean active
= gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (state
->autosave_on_off
));
57 gboolean minutes_err
= entry_to_int (GTK_ENTRY (state
->minutes_entry
), &minutes
, FALSE
);
59 gtk_widget_set_sensitive (state
->minutes_entry
, active
);
60 gtk_widget_set_sensitive (state
->prompt_cb
, active
);
62 gtk_widget_set_sensitive (state
->ok_button
,
63 !active
|| (!minutes_err
&& minutes
> 0));
67 dialog_autosave_prompt (WBCGtk
*wbcg
)
69 char const *uri
= go_doc_get_uri (
70 wb_control_get_doc (GNM_WBC (wbcg
)));
71 GtkWidget
*dialog
= gtk_message_dialog_new (wbcg_toplevel (wbcg
),
72 GTK_DIALOG_DESTROY_WITH_PARENT
,
75 _("Do you want to save the workbook %s?"),
77 gint result
= gtk_dialog_run (GTK_DIALOG (dialog
));
79 gtk_widget_destroy (dialog
);
81 return result
== GTK_RESPONSE_YES
;
85 cb_autosave_cancel (G_GNUC_UNUSED GtkWidget
*button
,
88 gtk_widget_destroy (state
->dialog
);
92 cb_autosave_ok (G_GNUC_UNUSED GtkWidget
*button
, autosave_t
*state
)
94 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (state
->autosave_on_off
))) {
95 gboolean prompt
= gtk_toggle_button_get_active
96 (GTK_TOGGLE_BUTTON (state
->prompt_cb
));
98 gboolean minutes_err
= entry_to_int (GTK_ENTRY (state
->minutes_entry
),
101 g_return_if_fail (!minutes_err
); /* Why is ok active? */
103 secs
= 60 * MIN (minutes
, G_MAXINT
/ 60);
104 g_object_set (state
->wbcg
,
105 "autosave-time", secs
,
106 "autosave-prompt", prompt
,
109 g_object_set (state
->wbcg
, "autosave-time", 0, NULL
);
111 gtk_widget_destroy (state
->dialog
);
115 dialog_autosave (WBCGtk
*wbcg
)
122 g_return_if_fail (wbcg
!= NULL
);
124 if (gnm_dialog_raise_if_exists (wbcg
, AUTOSAVE_KEY
))
126 gui
= gnm_gtk_builder_load ("autosave.ui", NULL
, GO_CMD_CONTEXT (wbcg
));
131 "autosave-time", &secs
,
132 "autosave-prompt", &prompt
,
135 state
= g_new (autosave_t
, 1);
137 state
->wb
= wb_control_get_workbook (GNM_WBC (wbcg
));
139 state
->dialog
= go_gtk_builder_get_widget (gui
, "AutoSave");
140 state
->minutes_entry
= go_gtk_builder_get_widget (gui
, "minutes");
141 state
->prompt_cb
= go_gtk_builder_get_widget (gui
, "prompt_on_off");
142 state
->autosave_on_off
= go_gtk_builder_get_widget (gui
, "autosave_on_off");
143 state
->ok_button
= go_gtk_builder_get_widget (gui
, "button1");
144 state
->cancel_button
= go_gtk_builder_get_widget (gui
, "button2");
146 if (!state
->dialog
|| !state
->minutes_entry
|| !state
->prompt_cb
||
147 !state
->autosave_on_off
) {
148 go_gtk_notice_dialog (wbcg_toplevel (wbcg
), GTK_MESSAGE_ERROR
,
149 _("Could not create the autosave dialog."));
154 float_to_entry (GTK_ENTRY (state
->minutes_entry
),
157 gnm_editable_enters (GTK_WINDOW (state
->dialog
),
158 state
->minutes_entry
);
160 g_signal_connect (G_OBJECT (state
->autosave_on_off
),
162 G_CALLBACK (autosave_set_sensitivity
), state
);
163 g_signal_connect (G_OBJECT (state
->minutes_entry
),
165 G_CALLBACK (autosave_set_sensitivity
), state
);
166 g_signal_connect (G_OBJECT (state
->ok_button
),
168 G_CALLBACK (cb_autosave_ok
), state
);
169 g_signal_connect (G_OBJECT (state
->cancel_button
),
171 G_CALLBACK (cb_autosave_cancel
), state
);
173 g_object_set_data_full (G_OBJECT (state
->dialog
),
174 "state", state
, (GDestroyNotify
)g_free
);
175 gnm_init_help_button (
176 go_gtk_builder_get_widget (gui
, "button3"),
177 GNUMERIC_HELP_LINK_AUTOSAVE
);
179 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (state
->autosave_on_off
),
181 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (state
->prompt_cb
),
184 autosave_set_sensitivity (NULL
, state
);
185 gnm_keyed_dialog (state
->wbcg
, GTK_WINDOW (state
->dialog
),
187 gtk_widget_show (state
->dialog
);
189 g_object_unref (gui
);