27 #include <glib/gi18n.h> 31 #include "dialog-dup-trans.h" 32 #include "dialog-utils.h" 33 #include "gnc-date-edit.h" 37 G_GNUC_UNUSED
static QofLogModule log_module =
G_LOG_DOMAIN;
45 GtkWidget * date_edit;
47 GtkWidget * tnum_edit;
48 GtkWidget * link_edit;
50 GtkWidget *duplicate_title_label;
51 GtkWidget *duplicate_table;
52 GtkWidget *date_label;
54 GtkWidget *tnum_label;
55 GtkWidget *link_label;
62 parse_num (
const char *
string,
long int *num)
72 number = strtol (
string, NULL, 10);
74 if ((number == LONG_MIN) || (number == LONG_MAX))
84 gnc_dup_inc_dec (GtkWidget *widget,
const gchar *text, gint inc_dec)
88 if (parse_num (text, &num))
97 if (g_str_has_prefix (text,
"0"))
98 format = g_strdup_printf (
"%s%ld%s",
"%0", g_utf8_strlen (text, -1),
"d");
100 format = g_strdup_printf (
"%s",
"%ld");
102 out = g_strdup_printf (format, num);
104 gtk_entry_set_text (GTK_ENTRY(widget), out);
113 gnc_dup_key_press_event_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
115 const gchar *text = gtk_entry_get_text (GTK_ENTRY(widget));
119 GdkModifierType modifiers = gtk_accelerator_get_default_mod_mask ();
122 if ((event->state & modifiers) == GDK_CONTROL_MASK ||
123 (event->state & modifiers) == GDK_MOD1_MASK)
127 if (event->keyval == GDK_KEY_plus || event->keyval == GDK_KEY_KP_Add ||
128 event->keyval == GDK_KEY_semicolon)
130 else if (event->keyval == GDK_KEY_minus || event->keyval == GDK_KEY_KP_Subtract)
135 return gnc_dup_inc_dec (widget, text, increment);
143 gnc_dup_trans_dialog_create (GtkWidget * parent,
DupTransDialog *dt_dialog,
144 gboolean show_date,
time64 date,
145 const char *num_str,
const char *tnum_str)
149 const gchar *tt = _(
"You can type '+' or '-' to increment or decrement the number.");
151 builder = gtk_builder_new ();
152 gnc_builder_add_from_file (builder,
"gnc-plugin-page-register.glade",
"num_adjustment");
153 gnc_builder_add_from_file (builder,
"gnc-plugin-page-register.glade",
"tnum_adjustment");
154 gnc_builder_add_from_file (builder,
"gnc-plugin-page-register.glade",
"duplicate_transaction_dialog");
156 dialog = GTK_WIDGET(gtk_builder_get_object (builder,
"duplicate_transaction_dialog"));
157 dt_dialog->dialog = dialog;
160 gtk_widget_set_name (GTK_WIDGET(dialog),
"gnc-id-duplicate-transaction");
161 gnc_widget_style_context_add_class (GTK_WIDGET(dialog),
"gnc-class-transactions");
165 gtk_window_set_transient_for (GTK_WINDOW(dialog), GTK_WINDOW(parent));
168 dt_dialog->date_label = GTK_WIDGET(gtk_builder_get_object (builder,
"date_label"));
171 GtkWidget *date_edit;
174 date_edit = gnc_date_edit_new (date, FALSE, FALSE);
175 gnc_date_activates_default (GNC_DATE_EDIT(date_edit), TRUE);
176 hbox = GTK_WIDGET(gtk_builder_get_object (builder,
"date_hbox"));
177 gtk_widget_show (date_edit);
179 gnc_date_make_mnemonic_target (GNC_DATE_EDIT(date_edit), dt_dialog->date_label);
181 gtk_box_pack_end (GTK_BOX(hbox), date_edit, TRUE, TRUE, 0);
182 dt_dialog->date_edit = date_edit;
186 GtkWidget *date_edit;
187 date_edit = gnc_date_edit_new (date, FALSE, FALSE);
188 dt_dialog->date_edit = date_edit;
191 dt_dialog->duplicate_title_label = GTK_WIDGET(gtk_builder_get_object (builder,
"duplicate_title_label"));
192 dt_dialog->duplicate_table = GTK_WIDGET(gtk_builder_get_object (builder,
"duplicate_table"));
193 dt_dialog->num_label = GTK_WIDGET(gtk_builder_get_object (builder,
"num_label"));
194 dt_dialog->tnum_label = GTK_WIDGET(gtk_builder_get_object (builder,
"tnum_label"));
196 dt_dialog->num_edit = GTK_WIDGET(gtk_builder_get_object (builder,
"num_entry"));
197 dt_dialog->tnum_edit = GTK_WIDGET(gtk_builder_get_object (builder,
"tnum_entry"));
200 gtk_entry_set_text (GTK_ENTRY(dt_dialog->num_edit), num_str);
202 gtk_entry_set_text (GTK_ENTRY(dt_dialog->tnum_edit), tnum_str);
204 g_signal_connect (dt_dialog->num_edit,
"key-press-event",
205 G_CALLBACK(gnc_dup_key_press_event_cb),
208 g_signal_connect (dt_dialog->tnum_edit,
"key-press-event",
209 G_CALLBACK(gnc_dup_key_press_event_cb),
214 gtk_widget_set_tooltip_text (GTK_WIDGET(dt_dialog->num_edit), tt);
215 gnc_dup_inc_dec (GTK_WIDGET(dt_dialog->num_edit), num_str, 1);
219 gtk_widget_set_tooltip_text (GTK_WIDGET(dt_dialog->tnum_edit), tt);
220 gnc_dup_inc_dec (GTK_WIDGET(dt_dialog->tnum_edit), tnum_str, 1);
225 dt_dialog->link_label = GTK_WIDGET(gtk_builder_get_object (builder,
"link_label"));
226 dt_dialog->link_edit = GTK_WIDGET(gtk_builder_get_object (builder,
"link_check_button"));
229 gtk_builder_connect_signals_full (builder, gnc_builder_connect_full_func, dt_dialog);
231 g_object_unref (G_OBJECT(builder));
235 gnc_dup_trans_dialog_internal (GtkWidget * parent,
236 const char* window_title,
const char* title,
237 gboolean show_date,
time64 *date_p, GDate *gdate_p,
238 const char *num,
char **out_num,
239 const char *tnum,
char **out_tnum,
240 const char *tlink,
char **out_tlink)
249 gnc_dup_trans_dialog_create (parent, dt_dialog, show_date,
255 gtk_widget_set_visible (dt_dialog->date_label, FALSE);
256 if (dt_dialog->date_edit)
257 gtk_widget_set_visible (dt_dialog->date_edit, FALSE);
260 gtk_widget_grab_focus (dt_dialog->num_edit);
266 gde = GNC_DATE_EDIT(dt_dialog->date_edit);
267 entry = gde->date_entry;
268 gtk_widget_grab_focus (entry);
272 gtk_window_set_title (GTK_WINDOW(dt_dialog->dialog), window_title);
276 gchar *full_text = g_strdup_printf (
"<b>%s</b>", title);
277 gtk_label_set_markup (GTK_LABEL(dt_dialog->duplicate_title_label), full_text);
284 gtk_widget_set_visible (dt_dialog->num_label, FALSE);
285 gtk_widget_set_visible (dt_dialog->num_edit, FALSE);
291 gtk_widget_set_visible (dt_dialog->tnum_label, FALSE);
292 gtk_widget_set_visible (dt_dialog->tnum_edit, FALSE);
295 if (!show_date && !tnum)
298 gtk_label_set_markup (GTK_LABEL(dt_dialog->num_label), _(
"Action/Number"));
303 gtk_entry_set_activates_default (GTK_ENTRY(dt_dialog->num_edit), FALSE);
304 gtk_entry_set_activates_default (GTK_ENTRY(dt_dialog->tnum_edit), TRUE);
309 gtk_widget_set_visible (dt_dialog->link_label, TRUE);
310 gtk_widget_set_visible (dt_dialog->link_edit, TRUE);
314 gtk_widget_set_visible (dt_dialog->link_label, FALSE);
315 gtk_widget_set_visible (dt_dialog->link_edit, FALSE);
318 result = gtk_dialog_run (GTK_DIALOG(dt_dialog->dialog));
320 if (result == GTK_RESPONSE_OK)
323 *date_p = gnc_date_edit_get_date (GNC_DATE_EDIT(dt_dialog->date_edit));
325 gnc_date_edit_get_gdate (GNC_DATE_EDIT(dt_dialog->date_edit), gdate_p);
327 *out_num = g_strdup (gtk_entry_get_text (GTK_ENTRY(dt_dialog->num_edit)));
329 *out_tnum = g_strdup (gtk_entry_get_text (GTK_ENTRY(dt_dialog->tnum_edit)));
332 if (gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(dt_dialog->link_edit)))
333 *out_tlink = g_strdup (tlink);
340 gtk_widget_destroy (GTK_WIDGET(dt_dialog->dialog));
347 gnc_dup_trans_dialog (GtkWidget * parent,
const char* title,
348 gboolean show_date,
time64 *date_p,
349 const char *num,
char **out_num,
350 const char *tnum,
char **out_tnum,
351 const char *tlink,
char **out_tlink)
353 return gnc_dup_trans_dialog_internal (parent, NULL, title,
354 show_date, date_p, NULL,
355 num, out_num, tnum, out_tnum,
360 gnc_dup_trans_dialog_gdate (GtkWidget * parent, GDate *gdate_p,
361 const char *num,
char **out_num)
367 return gnc_dup_trans_dialog_internal (parent, NULL, NULL, TRUE,
369 num, out_num, NULL, NULL,
374 gnc_dup_time64_dialog (GtkWidget * parent,
const char *window_title,
375 const char* title,
time64 *date)
377 return gnc_dup_trans_dialog_internal (parent, window_title, title, TRUE,
379 NULL, NULL, NULL, NULL,
384 gnc_dup_date_dialog (GtkWidget * parent,
const char* title, GDate *gdate_p)
390 return gnc_dup_trans_dialog_internal (parent, NULL, title, TRUE,
392 NULL, NULL, NULL, NULL,
#define G_LOG_DOMAIN
Functions providing the SX List as a plugin page.
gboolean gnc_strisnum(const gchar *s)
Returns true if string s is a number, possibly surrounded by whitespace.
time64 gdate_to_time64(GDate d)
Turns a GDate into a time64, returning the first second of the day.
gint64 time64
Most systems that are currently maintained, including Microsoft Windows, BSD-derived Unixes and Linux...