27 #include <glib/gi18n.h> 30 #include "dialog-utils.h" 34 #include "gnc-warnings.h" 35 #include "gnc-component-manager.h" 36 #include "dialog-reset-warnings.h" 39 static QofLogModule log_module = GNC_MOD_PREFS;
41 #define GNC_PREFS_GROUP "dialogs.reset-warnings" 42 #define DIALOG_RESET_WARNINGS_CM_CLASS "reset-warnings" 43 #define TIPS_STRING "tips" 48 GtkWidget *perm_vbox_label;
50 GtkWidget *temp_vbox_label;
54 GtkWidget *applybutton;
57 void gnc_reset_warnings_select_all_cb (GtkButton *button, gpointer user_data);
58 void gnc_reset_warnings_unselect_all_cb (GtkButton *button, gpointer user_data);
59 void gnc_reset_warnings_response_cb (GtkDialog *dialog, gint response, gpointer user_data);
60 static void gnc_reset_warnings_add_section (
RWDialog *rw_dialog,
61 const gchar *section, GtkWidget *box);
62 static void gnc_reset_warnings_update_widgets (
RWDialog *rw_dialog);
71 gnc_reset_warnings_update_widgets (
RWDialog *rw_dialog)
74 gboolean any = FALSE, checked = FALSE;
76 ENTER(
"rw_dialog %p", rw_dialog);
78 list = gtk_container_get_children(GTK_CONTAINER(rw_dialog->perm_vbox));
81 gtk_widget_show_all(rw_dialog->perm_vbox_label);
82 for (tmp = list; tmp; tmp = g_list_next(tmp))
84 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tmp->data)))
95 gtk_widget_hide(rw_dialog->perm_vbox_label);
98 list = gtk_container_get_children(GTK_CONTAINER(rw_dialog->temp_vbox));
101 gtk_widget_show_all(rw_dialog->temp_vbox_label);
102 for (tmp = list; tmp; tmp = g_list_next(tmp))
104 if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(tmp->data)))
115 gtk_widget_hide(rw_dialog->temp_vbox_label);
120 gtk_widget_show(rw_dialog->buttonbox);
121 gtk_widget_hide(rw_dialog->nolabel);
122 gtk_widget_set_sensitive(rw_dialog->applybutton, checked);
126 gtk_widget_hide(rw_dialog->buttonbox);
127 gtk_widget_show(rw_dialog->nolabel);
128 gtk_widget_set_sensitive(rw_dialog->applybutton, FALSE);
138 gnc_reset_warnings_apply_one (GtkWidget *widget,
141 const gchar *pref = NULL;
142 const gchar *prefs_group = NULL;
144 ENTER(
"widget %p, dialog %p", widget, dialog);
146 if (!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget)))
152 pref = gtk_widget_get_name(widget);
153 prefs_group = g_object_get_data (G_OBJECT (widget),
"prefs-group");
156 gtk_widget_destroy(widget);
162 gnc_reset_warnings_apply_changes (
RWDialog *rw_dialog)
164 ENTER(
"rw_dialog %p", rw_dialog);
166 gtk_container_foreach(GTK_CONTAINER(rw_dialog->perm_vbox),
167 (GtkCallback)gnc_reset_warnings_apply_one,
170 gtk_container_foreach(GTK_CONTAINER(rw_dialog->temp_vbox),
171 (GtkCallback)gnc_reset_warnings_apply_one,
173 gnc_reset_warnings_update_widgets(rw_dialog);
182 gnc_reset_warnings_response_cb (GtkDialog *dialog,
188 ENTER(
"dialog %p, response %d, user_data %p", dialog, response, user_data);
192 case GTK_RESPONSE_APPLY:
193 gnc_reset_warnings_apply_changes(rw_dialog);
196 case GTK_RESPONSE_OK:
197 gnc_reset_warnings_apply_changes(rw_dialog);
198 gnc_save_window_size(GNC_PREFS_GROUP, GTK_WINDOW(rw_dialog->dialog));
199 gnc_unregister_gui_component_by_data(DIALOG_RESET_WARNINGS_CM_CLASS,
201 gtk_widget_destroy(GTK_WIDGET(rw_dialog->dialog));
205 gnc_unregister_gui_component_by_data(DIALOG_RESET_WARNINGS_CM_CLASS,
207 gtk_widget_destroy(GTK_WIDGET(rw_dialog->dialog));
215 gnc_reset_warnings_select_common (
RWDialog *rw_dialog,
218 ENTER(
"rw_dialog %p, selected %d", rw_dialog, selected);
220 gtk_container_foreach(GTK_CONTAINER(rw_dialog->perm_vbox),
221 (GtkCallback)gtk_toggle_button_set_active,
222 GINT_TO_POINTER(selected));
224 gtk_container_foreach(GTK_CONTAINER(rw_dialog->temp_vbox),
225 (GtkCallback)gtk_toggle_button_set_active,
226 GINT_TO_POINTER(selected));
227 gnc_reset_warnings_update_widgets(rw_dialog);
233 gnc_reset_warnings_select_all_cb (GtkButton *button,
237 gnc_reset_warnings_select_common(rw_dialog, TRUE);
242 gnc_reset_warnings_unselect_all_cb (GtkButton *button,
246 gnc_reset_warnings_select_common(rw_dialog, FALSE);
260 gnc_reset_warnings_add_one (
RWDialog *rw_dialog,
const gchar *prefs_group,
261 const GncWarningSpec *warning, GtkWidget *box)
265 ENTER(
"rw_dialog %p, warning %p, box %p", rw_dialog, warning, box);
267 checkbox = gtk_check_button_new_with_label( _(warning->warn_desc ? warning->warn_desc : warning->warn_name));
268 if (warning->warn_long_desc)
269 gtk_widget_set_tooltip_text(checkbox, _(warning->warn_long_desc));
271 gtk_widget_set_name(checkbox, warning->warn_name);
272 g_object_set_data_full (G_OBJECT (checkbox),
"prefs-group", g_strdup(prefs_group),
273 (GDestroyNotify) g_free);
274 g_signal_connect_swapped(G_OBJECT(checkbox),
"toggled",
275 (GCallback)gnc_reset_warnings_update_widgets, rw_dialog);
276 gtk_box_pack_start(GTK_BOX(box), checkbox, TRUE, TRUE, 0);
291 gnc_reset_warnings_add_section (
RWDialog *rw_dialog,
const gchar *prefs_group, GtkWidget *box)
293 const GncWarningSpec *warning = gnc_get_warnings();
296 ENTER(
"rw_dialog %p, section %s, box %p", rw_dialog, prefs_group, box);
298 for (i = 0; warning[i].warn_name; i++)
302 gnc_reset_warnings_add_one(rw_dialog, prefs_group, &warning[i], box);
322 show_handler (
const char *class_name, gint component_id,
323 gpointer user_data, gpointer iter_data)
330 LEAVE(
"no data structure");
335 gtk_window_present(GTK_WINDOW(rw_dialog->dialog));
348 close_handler (gpointer user_data)
353 gnc_unregister_gui_component_by_data(DIALOG_RESET_WARNINGS_CM_CLASS, rw_dialog);
354 gtk_widget_destroy(rw_dialog->dialog);
363 gnc_reset_warnings_dialog (GtkWindow *parent)
370 if (gnc_forall_gui_components(DIALOG_RESET_WARNINGS_CM_CLASS,
373 LEAVE(
"existing window");
377 DEBUG(
"Opening dialog-reset-warnings.glade:");
378 builder = gtk_builder_new();
379 gnc_builder_add_from_file (builder,
"dialog-reset-warnings.glade",
"reset_warnings_dialog");
380 dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"reset_warnings_dialog"));
383 gtk_widget_set_name (GTK_WIDGET(dialog),
"gnc-id-reset-warnings");
385 gtk_window_set_transient_for(GTK_WINDOW (dialog), parent);
388 rw_dialog->dialog = dialog;
389 PINFO(
"rw_dialog %p, dialog %p", rw_dialog, dialog);
392 gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, rw_dialog);
395 rw_dialog->perm_vbox_label = GTK_WIDGET(gtk_builder_get_object (builder,
"perm_vbox_and_label"));
396 rw_dialog->perm_vbox = GTK_WIDGET(gtk_builder_get_object (builder,
"perm_vbox"));
397 gnc_reset_warnings_add_section(rw_dialog, GNC_PREFS_GROUP_WARNINGS_PERM, rw_dialog->perm_vbox);
400 rw_dialog->temp_vbox_label = GTK_WIDGET(gtk_builder_get_object (builder,
"temp_vbox_and_label"));
401 rw_dialog->temp_vbox = GTK_WIDGET(gtk_builder_get_object (builder,
"temp_vbox"));
402 gnc_reset_warnings_add_section(rw_dialog, GNC_PREFS_GROUP_WARNINGS_TEMP, rw_dialog->temp_vbox);
404 rw_dialog->buttonbox = GTK_WIDGET(gtk_builder_get_object (builder,
"hbuttonbox"));
406 rw_dialog->nolabel = GTK_WIDGET(gtk_builder_get_object (builder,
"no_warnings"));
407 rw_dialog->applybutton = GTK_WIDGET(gtk_builder_get_object (builder,
"applybutton"));
410 gnc_reset_warnings_update_widgets(rw_dialog);
413 g_object_set_data_full(G_OBJECT(rw_dialog->dialog),
"dialog-structure", rw_dialog, g_free);
415 gnc_restore_window_size(GNC_PREFS_GROUP, GTK_WINDOW(rw_dialog->dialog), parent);
417 gnc_register_gui_component (DIALOG_RESET_WARNINGS_CM_CLASS,
418 NULL, close_handler, rw_dialog);
420 gtk_widget_show(GTK_WIDGET(rw_dialog->dialog));
422 g_object_unref(G_OBJECT(builder));
#define PINFO(format, args...)
Print an informational note.
#define DEBUG(format, args...)
Print a debugging message.
void gnc_prefs_reset(const gchar *group, const gchar *pref_name)
Reset a preference to its default value in the preferences backend.
#define ENTER(format, args...)
Print a function entry debugging message.
gint gnc_prefs_get_int(const gchar *group, const gchar *pref_name)
Get an integer value from the preferences backend.
All type declarations for the whole Gnucash engine.
Generic api to store and retrieve preferences.
#define LEAVE(format, args...)
Print a function exit debugging message.