27 #include <glib/gi18n.h>
31 #include "dialog-dup-trans.h"
32 #include "dialog-utils.h"
33 #include "gnc-date-edit.h"
45 GtkWidget * date_edit;
47 GtkWidget * tnum_edit;
49 GtkWidget *duplicate_title_label;
50 GtkWidget *duplicate_table;
51 GtkWidget *date_label;
53 GtkWidget *tnum_label;
60 parse_num (
const char *
string,
long int *num)
70 number = strtol(
string, NULL, 10);
72 if ((number == LONG_MIN) || (number == LONG_MAX))
82 gnc_dup_trans_output_cb(GtkSpinButton *spinbutton,
87 gchar *txt = gtk_editable_get_chars(GTK_EDITABLE(spinbutton), 0, -1);
88 is_number = parse_num(txt, &num);
91 gtk_entry_set_text(GTK_ENTRY(spinbutton),
"");
96 gnc_dup_trans_dialog_create (GtkWidget * parent,
DupTransDialog *dt_dialog,
97 gboolean show_date,
time64 date,
98 const char *num_str,
const char *tnum_str)
103 builder = gtk_builder_new();
104 gnc_builder_add_from_file (builder,
"gnc-plugin-page-register.glade",
"num_adjustment");
105 gnc_builder_add_from_file (builder,
"gnc-plugin-page-register.glade",
"tnum_adjustment");
106 gnc_builder_add_from_file (builder,
"gnc-plugin-page-register.glade",
"Duplicate Transaction Dialog");
108 dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"Duplicate Transaction Dialog"));
109 dt_dialog->dialog = dialog;
113 gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
116 dt_dialog->date_label = GTK_WIDGET(gtk_builder_get_object (builder,
"date_label"));
119 GtkWidget *date_edit;
123 date_edit = gnc_date_edit_new (date, FALSE, FALSE);
124 gnc_date_activates_default(GNC_DATE_EDIT(date_edit), TRUE);
125 hbox = GTK_WIDGET(gtk_builder_get_object (builder,
"date_hbox"));
126 gtk_widget_show (date_edit);
128 gnc_date_make_mnemonic_target (GNC_DATE_EDIT(date_edit), dt_dialog->date_label);
130 gtk_box_pack_end (GTK_BOX (hbox), date_edit, TRUE, TRUE, 0);
131 dt_dialog->date_edit = date_edit;
135 GtkWidget *date_edit;
136 date_edit = gnc_date_edit_new (date, FALSE, FALSE);
137 dt_dialog->date_edit = date_edit;
140 dt_dialog->duplicate_title_label = GTK_WIDGET(gtk_builder_get_object (builder,
"duplicate_title_label"));
141 dt_dialog->duplicate_table = GTK_WIDGET(gtk_builder_get_object (builder,
"duplicate_table"));
142 dt_dialog->num_label = GTK_WIDGET(gtk_builder_get_object (builder,
"num_label"));
143 dt_dialog->tnum_label = GTK_WIDGET(gtk_builder_get_object (builder,
"tnum_label"));
146 GtkWidget *num_spin, *tnum_spin;
149 num_spin = GTK_WIDGET(gtk_builder_get_object (builder,
"num_spin"));
150 tnum_spin = GTK_WIDGET(gtk_builder_get_object (builder,
"tnum_spin"));
151 dt_dialog->num_edit = num_spin;
152 dt_dialog->tnum_edit = tnum_spin;
154 gtk_entry_set_activates_default(GTK_ENTRY(num_spin), TRUE);
155 g_signal_connect(num_spin,
"output",
156 G_CALLBACK(gnc_dup_trans_output_cb), dt_dialog);
157 g_signal_connect(tnum_spin,
"output",
158 G_CALLBACK(gnc_dup_trans_output_cb), dt_dialog);
160 if (num_str && parse_num (num_str, &num))
161 gtk_spin_button_set_value (GTK_SPIN_BUTTON (num_spin), num + 1);
163 gtk_entry_set_text (GTK_ENTRY (num_spin),
"");
165 if (tnum_str && parse_num (tnum_str, &tnum))
166 gtk_spin_button_set_value (GTK_SPIN_BUTTON (tnum_spin), tnum + 1);
168 gtk_entry_set_text (GTK_ENTRY (tnum_spin),
"");
171 gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, dt_dialog);
173 g_object_unref(G_OBJECT(builder));
177 gnc_dup_trans_dialog_internal (GtkWidget * parent,
const char* title,
178 gboolean show_date,
time64 *date_p,
179 GDate *gdate_p,
const char *num,
char **out_num,
180 const char *tnum,
char **out_tnum)
189 gnc_dup_trans_dialog_create (parent, dt_dialog, show_date,
195 gtk_widget_set_visible(dt_dialog->date_label, FALSE);
196 if (dt_dialog->date_edit)
197 gtk_widget_set_visible(dt_dialog->date_edit, FALSE);
200 gtk_widget_grab_focus (dt_dialog->num_edit);
206 gde = GNC_DATE_EDIT (dt_dialog->date_edit);
207 entry = gde->date_entry;
208 gtk_widget_grab_focus (entry);
213 gchar *full_text = g_strdup_printf(
"<b>%s</b>", title);
214 gtk_label_set_markup(GTK_LABEL (dt_dialog->duplicate_title_label), full_text);
221 gtk_widget_set_visible(dt_dialog->num_label, FALSE);
222 gtk_widget_set_visible(dt_dialog->num_edit, FALSE);
228 gtk_widget_set_visible(dt_dialog->tnum_label, FALSE);
229 gtk_widget_set_visible(dt_dialog->tnum_edit, FALSE);
232 if (!show_date && !tnum)
235 gtk_label_set_markup(GTK_LABEL (dt_dialog->num_label), _(
"Action/Number:"));
240 gtk_entry_set_activates_default(GTK_ENTRY(dt_dialog->num_edit), FALSE);
241 gtk_entry_set_activates_default(GTK_ENTRY(dt_dialog->tnum_edit), TRUE);
244 result = gtk_dialog_run (GTK_DIALOG (dt_dialog->dialog));
246 if (result == GTK_RESPONSE_OK)
249 *date_p = gnc_date_edit_get_date (GNC_DATE_EDIT (dt_dialog->date_edit));
251 gnc_date_edit_get_gdate (GNC_DATE_EDIT (dt_dialog->date_edit), gdate_p);
253 *out_num = g_strdup (gtk_entry_get_text (GTK_ENTRY (dt_dialog->num_edit)));
255 *out_tnum = g_strdup (gtk_entry_get_text (GTK_ENTRY (dt_dialog->tnum_edit)));
261 gtk_widget_destroy(GTK_WIDGET(dt_dialog->dialog));
268 gnc_dup_trans_dialog (GtkWidget * parent,
const char* title, gboolean show_date,
269 time64 *date_p,
const char *num,
char **out_num,
270 const char *tnum,
char **out_tnum)
272 return gnc_dup_trans_dialog_internal(parent, title, show_date, date_p, NULL,
273 num, out_num, tnum, out_tnum);
277 gnc_dup_trans_dialog_gdate (GtkWidget * parent, GDate *gdate_p,
278 const char *num,
char **out_num)
284 return gnc_dup_trans_dialog_internal(parent, NULL, TRUE, &tmp_time, gdate_p,
285 num, out_num, NULL, NULL);
289 gnc_dup_date_dialog (GtkWidget * parent,
const char* title, GDate *gdate_p)
295 return gnc_dup_trans_dialog_internal(parent, title, TRUE, &tmp_time, gdate_p,
296 NULL, NULL, NULL, NULL);
time64 timespecToTime64(Timespec ts)
#define G_LOG_DOMAIN
Functions providing the SX List as a plugin page.
gboolean gnc_strisnum(const gchar *s)
Timespec gdate_to_timespec(GDate d)
const gchar * QofLogModule