27 #include <glib/gi18n.h>
30 #include "dialog-utils.h"
34 #include "gnome-utils/gnc-warnings.h"
35 #include "gnc-component-manager.h"
36 #include "dialog-reset-warnings.h"
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 strucure");
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)
372 if (gnc_forall_gui_components(DIALOG_RESET_WARNINGS_CM_CLASS,
375 LEAVE(
"existing window");
379 DEBUG(
"Opening dialog-reset-warnings.glade:");
380 builder = gtk_builder_new();
381 gnc_builder_add_from_file (builder,
"dialog-reset-warnings.glade",
"Reset Warnings");
382 dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"Reset Warnings"));
384 gtk_window_set_transient_for(GTK_WINDOW (dialog), parent);
386 rw_dialog->dialog = dialog;
387 PINFO(
"rw_dialog %p, dialog %p", rw_dialog, dialog);
390 gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, rw_dialog);
393 rw_dialog->perm_vbox_label = GTK_WIDGET(gtk_builder_get_object (builder,
"perm_vbox_and_label"));
394 rw_dialog->perm_vbox = GTK_WIDGET(gtk_builder_get_object (builder,
"perm_vbox"));
395 gnc_reset_warnings_add_section(rw_dialog, GNC_PREFS_GROUP_WARNINGS_PERM, rw_dialog->perm_vbox);
398 rw_dialog->temp_vbox_label = GTK_WIDGET(gtk_builder_get_object (builder,
"temp_vbox_and_label"));
399 rw_dialog->temp_vbox = GTK_WIDGET(gtk_builder_get_object (builder,
"temp_vbox"));
400 gnc_reset_warnings_add_section(rw_dialog, GNC_PREFS_GROUP_WARNINGS_TEMP, rw_dialog->temp_vbox);
402 rw_dialog->buttonbox = GTK_WIDGET(gtk_builder_get_object (builder,
"hbuttonbox"));
404 rw_dialog->nolabel = GTK_WIDGET(gtk_builder_get_object (builder,
"no_warnings"));
405 rw_dialog->applybutton = GTK_WIDGET(gtk_builder_get_object (builder,
"applybutton"));
408 gnc_reset_warnings_update_widgets(rw_dialog);
411 g_object_set_data_full(G_OBJECT(rw_dialog->dialog),
"dialog-structure", rw_dialog, g_free);
413 gnc_restore_window_size(GNC_PREFS_GROUP, GTK_WINDOW(rw_dialog->dialog));
415 gnc_register_gui_component (DIALOG_RESET_WARNINGS_CM_CLASS,
416 NULL, close_handler, rw_dialog);
418 gtk_widget_show(GTK_WIDGET(rw_dialog->dialog));
420 g_object_unref(G_OBJECT(builder));
#define PINFO(format, args...)
#define DEBUG(format, args...)
void gnc_prefs_reset(const gchar *group, const gchar *pref_name)
#define ENTER(format, args...)
gint gnc_prefs_get_int(const gchar *group, const gchar *pref_name)
All type declarations for the whole Gnucash engine.
Generic api to store and retrieve preferences.
#define LEAVE(format, args...)
const gchar * QofLogModule