GnuCash c935c2f+
Loading...
Searching...
No Matches
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. */
43static QofLogModule log_module = GNC_MOD_GUI;
44
45/* function to open a qif import assistant */
46static 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
58static void
59gnc_ui_new_user_cancel_dialog (GtkWindow *parent);
60
61void
62gnc_new_user_dialog_register_qif_assistant (void (*cb_fcn)(void))
63{
64 g_return_if_fail (qifImportAssistantFcn == NULL);
65 qifImportAssistantFcn = cb_fcn;
66}
67
68void
69gnc_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
74static void
75after_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
84static void
85gnc_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
93static void
94gnc_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
105static void
106gnc_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
130static gboolean
131gnc_ui_new_user_window_present (GtkWindow *window)
132{
133 gtk_window_present (GTK_WINDOW(window));
134 return FALSE;
135}
136
137static void
138gnc_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
179static void
180gnc_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
203void
204gncp_new_user_finish (void)
205{
206 gnc_hook_run(HOOK_BOOK_OPENED, gnc_get_current_session());
207}
208
209void
210gnc_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
This file contains the functions to present a GUI to select a file or a database connection.
All type declarations for the whole Gnucash engine.
Functions for adding content to a window.
Functions providing a chart of account page.
Generic api to store and retrieve preferences.
utility functions for the GnuCash UI
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
GtkWindow * gnc_ui_get_main_window(GtkWidget *widget)
Get a pointer to the final GncMainWindow widget is rooted in.
void gnc_gnome_help(GtkWindow *parent, const char *file_name, const char *anchor)
Launch the systems default help browser, gnome's yelp for linux, and open to a given link within a gi...
#define LEAVE(format, args...)
Print a function exit debugging message.
Definition qoflog.h:282
#define ENTER(format, args...)
Print a function entry debugging message.
Definition qoflog.h:272
gboolean gnc_prefs_set_bool(const gchar *group, const gchar *pref_name, gboolean value)
Store a boolean value into the preferences backend.