GnuCash  5.6-150-g038405b370+
dialog-new-user.c
1 /********************************************************************\
2  * dialog-new-user.c -- new user dialog for GnuCash *
3  * Copyright (C) 2001 Dave Peticolas <dave@krondo.com> *
4  * *
5  * This program is free software; you can redistribute it and/or *
6  * modify it under the terms of the GNU General Public License as *
7  * published by the Free Software Foundation; either version 2 of *
8  * the License, or (at your option) any later version. *
9  * *
10  * This program is distributed in the hope that it will be useful, *
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13  * GNU General Public License for more details. *
14  * *
15  * You should have received a copy of the GNU General Public License*
16  * along with this program; if not, contact: *
17  * *
18  * Free Software Foundation Voice: +1-617-542-5942 *
19  * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
20  * Boston, MA 02110-1301, USA gnu@gnu.org *
21 \********************************************************************/
22 
23 #include <config.h>
24 
25 #include <gtk/gtk.h>
26 #include <glib/gi18n.h>
27 
28 #include "dialog-new-user.h"
29 #include "dialog-utils.h"
30 #include "dialog-file-access.h"
31 #include "assistant-hierarchy.h"
32 #include "gnc-engine.h"
33 #include "gnc-hooks.h"
34 #include "gnc-ui.h"
35 #include "gnc-file.h"
36 #include "gnc-prefs.h"
37 #include "gnc-main-window.h"
39 #include "gnc-session.h"
40 #include "gnc-ui-util.h" // for gnc_get_current_book
41 
42 /* This static indicates the debugging module that this .o belongs to. */
43 static QofLogModule log_module = GNC_MOD_GUI;
44 
45 /* function to open a qif import assistant */
46 static void (*qifImportAssistantFcn)(void) = NULL;
47 
49 {
50  GtkWidget *window;
51 
52  GtkWidget *new_accounts_button;
53  GtkWidget *import_qif_button;
54  GtkWidget *tutorial_button;
55  gboolean ok_pressed;
56 };
57 
58 static void
59 gnc_ui_new_user_cancel_dialog (GtkWindow *parent);
60 
61 void
62 gnc_new_user_dialog_register_qif_assistant (void (*cb_fcn)(void))
63 {
64  g_return_if_fail (qifImportAssistantFcn == NULL);
65  qifImportAssistantFcn = cb_fcn;
66 }
67 
68 void
69 gnc_set_first_startup (gboolean first_startup)
70 {
71  gnc_prefs_set_bool (GNC_PREFS_GROUP_NEW_USER, GNC_PREF_FIRST_STARTUP, first_startup);
72 }
73 
74 static void
75 after_hierarchy_assistant(void)
76 {
77  gncp_new_user_finish ();
78  gnc_set_first_startup (FALSE);
79 
80  qof_book_mark_session_dirty(gnc_get_current_book());
81  gnc_ui_file_access_for_save_as (gnc_ui_get_main_window (NULL));
82 }
83 
84 static void
85 gnc_ui_new_user_cancel_cb (GtkWidget * widget, gpointer data)
86 {
87  GNCNewUserDialog *new_user = data;
88 
89  g_return_if_fail(new_user);
90  gtk_widget_destroy (new_user->window);
91 }
92 
93 static void
94 gnc_ui_new_user_destroy_cb (GtkWidget * widget, gpointer data)
95 {
96  GNCNewUserDialog *new_user = data;
97 
98  g_return_if_fail(new_user);
99  if (new_user->ok_pressed == FALSE)
100  gnc_ui_new_user_cancel_dialog (GTK_WINDOW(new_user->window));
101 
102  g_free (new_user);
103 }
104 
105 static void
106 gnc_ui_new_user_ok_cb (GtkWidget * widget, gpointer data)
107 {
108  GNCNewUserDialog *new_user = data;
109 
110  g_return_if_fail(new_user);
111  new_user->ok_pressed = TRUE;
112 
113  if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (new_user->new_accounts_button)))
114  {
115  gnc_ui_hierarchy_assistant_with_callback(TRUE, after_hierarchy_assistant);
116  }
117  else if ((qifImportAssistantFcn != NULL)
118  && gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (new_user->import_qif_button)))
119  {
120  qifImportAssistantFcn();
121  gncp_new_user_finish ();
122  }
123  else if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (new_user->tutorial_button)))
124  {
125  gnc_gnome_help (GTK_WINDOW(new_user->window), DF_GUIDE, NULL);
126  }
127  gtk_widget_destroy (new_user->window);
128 }
129 
130 static gboolean
131 gnc_ui_new_user_window_present (GtkWindow *window)
132 {
133  gtk_window_present (GTK_WINDOW(window));
134  return FALSE;
135 }
136 
137 static void
138 gnc_ui_new_user_dialog_create (GNCNewUserDialog *new_user)
139 {
140  GtkBuilder *builder;
141  GtkWidget *button;
142 
143  ENTER(" ");
144  builder = gtk_builder_new();
145  gnc_builder_add_from_file (builder, "dialog-new-user.glade", "new_user_window");
146  new_user->window = GTK_WIDGET(gtk_builder_get_object (builder, "new_user_window"));
147 
148  gtk_window_set_keep_above (GTK_WINDOW(new_user->window), TRUE);
149 
150  // Set the name for this dialog so it can be easily manipulated with css
151  gtk_widget_set_name (GTK_WIDGET(new_user->window), "gnc-id-new-user");
152 
153  new_user->new_accounts_button = GTK_WIDGET(gtk_builder_get_object (builder, "new_accounts_button"));
154  new_user->import_qif_button = GTK_WIDGET(gtk_builder_get_object (builder, "import_qif_button"));
155  new_user->tutorial_button = GTK_WIDGET(gtk_builder_get_object (builder, "tutorial_button"));
156 
157  /* Set the sensitivity of the qif-import button based on the availability
158  * of the qif-import assistant.
159  */
160  gtk_widget_set_sensitive (new_user->import_qif_button, (qifImportAssistantFcn != NULL));
161 
162  g_signal_connect(G_OBJECT(new_user->window), "destroy",
163  G_CALLBACK(gnc_ui_new_user_destroy_cb), new_user);
164 
165  button = GTK_WIDGET(gtk_builder_get_object (builder, "ok_but"));
166  g_signal_connect(button, "clicked", G_CALLBACK(gnc_ui_new_user_ok_cb), new_user);
167 
168  button = GTK_WIDGET(gtk_builder_get_object (builder, "cancel_but"));
169  g_signal_connect(button, "clicked", G_CALLBACK(gnc_ui_new_user_cancel_cb), new_user);
170 
171  new_user->ok_pressed = FALSE;
172 
173  g_idle_add ((GSourceFunc)gnc_ui_new_user_window_present, GTK_WINDOW(new_user->window));
174 
175  g_object_unref(G_OBJECT(builder));
176  LEAVE(" ");
177 }
178 
179 static void
180 gnc_ui_new_user_cancel_dialog (GtkWindow *parent)
181 {
182  GtkWidget *dialog;
183  GtkBuilder *builder;
184  gint result;
185  gboolean keepshowing;
186 
187  builder = gtk_builder_new();
188  gnc_builder_add_from_file (builder, "dialog-new-user.glade", "new_user_cancel_dialog");
189 
190  dialog = GTK_WIDGET(gtk_builder_get_object (builder, "new_user_cancel_dialog"));
191 
192  gtk_window_set_transient_for (GTK_WINDOW (dialog), parent);
193 
194  result = gtk_dialog_run (GTK_DIALOG (dialog));
195  keepshowing = (result == GTK_RESPONSE_YES);
196 
197  gnc_set_first_startup (keepshowing);
198 
199  g_object_unref(G_OBJECT(builder));
200  gtk_widget_destroy(dialog);
201 }
202 
203 void
204 gncp_new_user_finish (void)
205 {
206  gnc_hook_run(HOOK_BOOK_OPENED, gnc_get_current_session());
207 }
208 
209 void
210 gnc_ui_new_user_dialog (void)
211 {
212  GNCNewUserDialog *new_user;
213 
214  new_user = g_new0(GNCNewUserDialog, 1);
215  gnc_ui_new_user_dialog_create (new_user);
216  gtk_widget_show (new_user->window);
217 }
218 
GtkWindow * gnc_ui_get_main_window(GtkWidget *widget)
Get a pointer to the final GncMainWindow widget is rooted in.
utility functions for the GnuCash UI
#define ENTER(format, args...)
Print a function entry debugging message.
Definition: qoflog.h:272
Functions for adding content to a window.
void gnc_gnome_help(GtkWindow *parent, const char *file_name, const char *anchor)
Launch the systems default help browser, gnome&#39;s yelp for linux, and open to a given link within a gi...
gboolean gnc_prefs_set_bool(const gchar *group, const gchar *pref_name, gboolean value)
Store a boolean value into the preferences backend.
Definition: gnc-prefs.c:277
All type declarations for the whole Gnucash engine.
void qof_book_mark_session_dirty(QofBook *book)
The qof_book_mark_dirty() routine marks the book as having been modified.
Definition: qofbook.cpp:397
Generic api to store and retrieve preferences.
Functions providing a chart of account page.
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition: qoflog.h:282
This file contains the functions to present a GUI to select a file or a database connection.