[Gnucash-changes] Stephen Evanchik's patch to Update scheduled
transaction dialog.
Derek Atkins
warlord at cvs.gnucash.org
Mon Dec 20 09:56:22 EST 2004
Log Message:
-----------
Stephen Evanchik's patch to Update scheduled transaction dialog.
* src/gnome/dialog-sx-from-trans.c:
- Removed per-button callbacks in favor of a
dialog response callback
- Changed per-button callback functions to
simple 'action' functions that are called
in the response handler.
- Migrated away from gtk_signal_connect
- Removed references to GNOME 1.x dialog
- C Style changes: 'open curly brace on same line'
- Moved 'public' function gnc_sx_create_from_trans
to the bottom of the file
Tags:
----
gnucash-gnome2-dev
Modified Files:
--------------
gnucash:
ChangeLog
gnucash/src/gnome:
dialog-sx-from-trans.c
gnucash/src/gnome/glade:
sched-xact.glade
Revision Data
-------------
Index: ChangeLog
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/ChangeLog,v
retrieving revision 1.1487.2.152
retrieving revision 1.1487.2.153
diff -LChangeLog -LChangeLog -u -r1.1487.2.152 -r1.1487.2.153
--- ChangeLog
+++ ChangeLog
@@ -5,6 +5,19 @@
Remove double calls to gdc_free_all_mark_data
in object cleanup,
+ Stephen Evanchik's patch to Update scheduled transaction dialog:
+ * src/gnome/dialog-sx-from-trans.c:
+ - Removed per-button callbacks in favor of a
+ dialog response callback
+ - Changed per-button callback functions to
+ simple 'action' functions that are called
+ in the response handler.
+ - Migrated away from gtk_signal_connect
+ - Removed references to GNOME 1.x dialog
+ - C Style changes: 'open curly brace on same line'
+ - Moved 'public' function gnc_sx_create_from_trans
+ to the bottom of the file
+
2004-12-19 Derek Atkins <derek at ihtfp.com>
Stephen Evanchik's Minor touch-ups to GNCCurrencyEdit:
Index: dialog-sx-from-trans.c
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/gnome/dialog-sx-from-trans.c,v
retrieving revision 1.26.4.2
retrieving revision 1.26.4.3
diff -Lsrc/gnome/dialog-sx-from-trans.c -Lsrc/gnome/dialog-sx-from-trans.c -u -r1.26.4.2 -r1.26.4.3
--- src/gnome/dialog-sx-from-trans.c
+++ src/gnome/dialog-sx-from-trans.c
@@ -54,7 +54,7 @@
#define SXFTD_NAME_ENTRY "name_entry"
#define SXFTD_N_OCCURRENCES_ENTRY "n_occurrences_entry"
#define SXFTD_FREQ_OPTION_MENU "freq_option_menu"
-//#define SXFTD_END_DATE_EDIT "end_date_edit"
+/* #define SXFTD_END_DATE_EDIT "end_date_edit" */
#define SXFTD_START_DATE_EDIT "start_date_edit"
#define SXFTD_EX_CAL_FRAME "ex_cal_frame"
#define SXFTD_END_DATE_BOX "end_date_hbox"
@@ -67,14 +67,15 @@
#define SXFTD_EXCAL_NUM_MONTHS 4
#define SXFTD_EXCAL_MONTHS_PER_COL 4
+#define SXFTD_RESPONSE_ADVANCED 100 /* 'Advanced' button response code */
+
static short module = MOD_SX;
/** start_date_edit, end_date_edit, param_table, end_date_hbox */
-static void sxftd_ok_clicked(GtkWidget *w, gpointer user_data);
static void sxftd_freq_option_changed( GtkWidget *w, gpointer user_data );
-static void sxftd_advanced_clicked(GtkWidget *w, gpointer user_data);
-static void sxftd_cancel_clicked(GtkWidget *w, gpointer user_data);
+static void gnc_sx_trans_window_response_cb(GtkDialog *dialog, gint response, gpointer data);
+
static void sxftd_destroy( GtkWidget *w, gpointer user_data );
typedef enum { NEVER_END, END_ON_DATE, END_AFTER_N_OCCS, BAD_END } endType;
@@ -114,7 +115,7 @@
} getEndTuple;
static void sxftd_update_example_cal( SXFromTransInfo *sxfti );
-static void sxftd_update_excal_adapt( GtkObject *o, gpointer ud );
+static void sxftd_update_excal_adapt( GObject *o, gpointer ud );
/* Stolen from jsled - nice and neat, actually (if a little light on
* for typechecking, but we'll be careful) . . .
@@ -126,6 +127,11 @@
void (*handlerFn)();
} widgetSignalHandlerTuple;
+
+static void sxftd_ok_clicked(SXFromTransInfo *sxfti);
+static void sxftd_advanced_clicked(SXFromTransInfo *sxfti);
+
+
static void
sxfti_attach_callbacks(SXFromTransInfo *sxfti)
{
@@ -139,10 +145,6 @@
{ SXFTD_N_OCCURRENCES_BUTTON, "clicked", sxftd_update_excal_adapt },
{ SXFTD_N_OCCURRENCES_ENTRY, "changed", sxftd_update_excal_adapt },
- { SXFTD_OK_BUTTON, "clicked", sxftd_ok_clicked },
- { SXFTD_ADVANCED_BUTTON, "clicked", sxftd_advanced_clicked },
- { SXFTD_CANCEL_BUTTON, "clicked", sxftd_cancel_clicked },
-
{ NULL, NULL, NULL }
};
@@ -153,10 +155,14 @@
{
w = glade_xml_get_widget(sxfti->gxml, callbacks[i].name);
- gtk_signal_connect( GTK_OBJECT(w), callbacks[i].signal,
- GTK_SIGNAL_FUNC(callbacks[i].handlerFn),
- sxfti );
+ g_signal_connect (GTK_OBJECT(w), callbacks[i].signal,
+ G_CALLBACK(callbacks[i].handlerFn),
+ sxfti );
}
+
+ g_signal_connect (G_OBJECT(sxfti->dialog), "response",
+ G_CALLBACK (gnc_sx_trans_window_response_cb),
+ sxfti);
}
@@ -169,15 +175,13 @@
retval.type = BAD_END;
w = glade_xml_get_widget(sxfti->gxml, SXFTD_NEVER_END_BUTTON);
- if(gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(w)))
- {
+ if(gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(w))) {
retval.type = NEVER_END;
return retval;
}
w = glade_xml_get_widget(sxfti->gxml, SXFTD_END_ON_DATE_BUTTON);
- if(gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(w)))
- {
+ if(gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(w))) {
time_t end_tt;
retval.type = END_ON_DATE;
g_date_clear( &(retval.end_date), 1 );
@@ -187,8 +191,7 @@
}
w = glade_xml_get_widget(sxfti->gxml, SXFTD_N_OCCURRENCES_BUTTON);
- if(gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(w) ))
- {
+ if(gtk_toggle_button_get_active( GTK_TOGGLE_BUTTON(w) )) {
gchar *text, *endptr;
guint n_occs;
w = glade_xml_get_widget(sxfti->gxml, SXFTD_N_OCCURRENCES_ENTRY);
@@ -198,9 +201,10 @@
if ( !endptr ) {
n_occs = -1;
}
+
g_free(text);
- if(n_occs > 0)
- {
+
+ if(n_occs > 0) {
retval.type = END_AFTER_N_OCCS;
retval.n_occurrences = n_occs;
return retval;
@@ -231,8 +235,7 @@
gnc_ttinfo_set_num(tti, xaccTransGetNum(tr));
gnc_ttinfo_set_currency(tti, xaccTransGetCurrency(tr));
- for(splits = xaccTransGetSplitList(tr); splits; splits = splits->next)
- {
+ for(splits = xaccTransGetSplitList(tr); splits; splits = splits->next) {
sp = splits->data;
ttsi = gnc_ttsplitinfo_malloc();
gnc_ttsplitinfo_set_action(ttsi, xaccSplitGetAction(sp));
@@ -242,14 +245,12 @@
runningBalance = gnc_numeric_add( runningBalance, split_value,
100, (GNC_DENOM_AUTO | GNC_DENOM_LCD) );
- if(gnc_numeric_positive_p(split_value))
- {
+ if(gnc_numeric_positive_p(split_value)) {
tmpStr = xaccPrintAmount( split_value,
gnc_default_print_info(FALSE) );
gnc_ttsplitinfo_set_debit_formula( ttsi, tmpStr );
}
- else
- {
+ else {
/* Negate the numeric so it prints w/o the sign at the front. */
tmpStr = xaccPrintAmount( gnc_numeric_neg( split_value ),
gnc_default_print_info(FALSE) );
@@ -441,12 +442,13 @@
SXFTD_FREQ_OPTION_MENU);
gnc_option_menu_init(w);
w = gtk_option_menu_get_menu( GTK_OPTION_MENU(w) );
- gtk_signal_connect( GTK_OBJECT(w), "selection-done",
- GTK_SIGNAL_FUNC(sxftd_freq_option_changed),
- sxfti );
- gtk_signal_connect( GTK_OBJECT(w), "destroy",
- GTK_SIGNAL_FUNC(sxftd_destroy),
- sxfti );
+ g_signal_connect( GTK_OBJECT(w), "selection-done",
+ G_CALLBACK(sxftd_freq_option_changed),
+ sxfti );
+
+ g_signal_connect( GTK_OBJECT(w), "destroy",
+ G_CALLBACK(sxftd_destroy),
+ sxfti );
sxftd_update_example_cal( sxfti );
@@ -477,8 +479,7 @@
fs = xaccFreqSpecMalloc(gnc_get_current_book ());
sxftd_update_fs( sxfti, &date, fs );
- if (sxftd_errno == 0)
- {
+ if (sxftd_errno == 0) {
xaccSchedXactionSetFreqSpec( sx, fs);
xaccSchedXactionSetStartDate( sx, &date );
}
@@ -536,44 +537,36 @@
xaccSchedXactionSetAdvanceReminder( sx, daysInAdvance );
}
- if ( sxftd_add_template_trans( sxfti ) != 0 )
- {
+ if ( sxftd_add_template_trans( sxfti ) != 0 ) {
sxftd_errno = SXFTD_ERRNO_UNBALANCED_XACTION;
}
return sxftd_errno;
}
-static
-void
+static void
sxftd_close(SXFromTransInfo *sxfti, gboolean delete_sx)
{
- if ( sxfti->sx && delete_sx )
- {
+ if ( sxfti->sx && delete_sx ) {
xaccSchedXactionFree(sxfti->sx);
}
sxfti->sx = NULL;
- gnome_dialog_close( GNOME_DIALOG(sxfti->dialog));
-
- return;
+ gtk_widget_destroy (GTK_WIDGET (sxfti->dialog));
}
static void
-sxftd_ok_clicked(GtkWidget *w, gpointer user_data)
+sxftd_ok_clicked(SXFromTransInfo *sxfti)
{
- SXFromTransInfo *sxfti = user_data;
GNCBook *book;
GList *sx_list;
guint sx_error = sxftd_compute_sx(sxfti);
if (sx_error != 0
- && sx_error != SXFTD_ERRNO_UNBALANCED_XACTION)
- {
+ && sx_error != SXFTD_ERRNO_UNBALANCED_XACTION) {
PERR( "Error in sxftd_compute_sx after ok_clicked [%d]", sx_error );
}
- else
- {
+ else {
SchedXactionDialog *sxd;
if ( sx_error == SXFTD_ERRNO_UNBALANCED_XACTION ) {
@@ -629,16 +622,8 @@
}
static void
-sxftd_cancel_clicked(GtkWidget *w, gpointer user_data)
+sxftd_advanced_clicked(SXFromTransInfo *sxfti)
{
- SXFromTransInfo *sxfti = user_data;
- sxftd_close(sxfti, TRUE);
-}
-
-static void
-sxftd_advanced_clicked(GtkWidget *w, gpointer user_data)
-{
- SXFromTransInfo *sxfti = user_data;
guint sx_error = sxftd_compute_sx(sxfti);
SchedXactionDialog *adv_dlg;
SchedXactionEditorDialog *adv_edit_dlg;
@@ -665,46 +650,7 @@
sxftd_close(sxfti, FALSE);
}
-void
-gnc_sx_create_from_trans( Transaction *trans )
-{
- int errno;
- SXFromTransInfo *sxfti = g_new0( SXFromTransInfo, 1);
-
- sxfti->gxml = gnc_glade_xml_new(SX_GLADE_FILE,
- SXFTD_DIALOG_GLADE_NAME);
-
- sxfti->dialog = glade_xml_get_widget(sxfti->gxml,
- SXFTD_DIALOG_GLADE_NAME);
-
- sxfti->trans = trans;
-
- sxfti->sx = xaccSchedXactionMalloc(gnc_get_current_book ());
-
- if ( (errno = sxftd_init( sxfti )) < 0 ) {
- if ( errno == SXFTD_ERRNO_OPEN_XACTION )
- {
- gnc_error_dialog( gnc_ui_get_toplevel(),
- _( "Cannot create a Scheduled Transaction "
- "from a Transaction currently\n"
- "being edited. Please Enter the "
- "Transaction before Scheduling." ) );
- sxftd_close( sxfti, TRUE );
- return;
- }
- else
- {
- PERR( "Error in sxftd_init: %d", errno );
- }
- }
-
- gtk_widget_show_all(sxfti->dialog);
-
- return;
-}
-
-static
-void
+static void
sxftd_destroy( GtkWidget *w, gpointer user_data )
{
int i;
@@ -725,12 +671,43 @@
g_free(sxfti);
}
+
+/**
+ *
+ **/
+static void
+gnc_sx_trans_window_response_cb (GtkDialog *dialog,
+ gint response,
+ gpointer data)
+{
+ SXFromTransInfo *sxfti = (SXFromTransInfo *)data;
+
+ ENTER(" dialog %p, response %d, sx %p", dialog, response, sxfti);
+ switch (response) {
+ case GTK_RESPONSE_OK:
+ DEBUG(" OK");
+ sxftd_ok_clicked(sxfti);
+ break;
+ case SXFTD_RESPONSE_ADVANCED:
+ DEBUG(" ADVANCED");
+ sxftd_advanced_clicked(sxfti);
+ break;
+ case GTK_RESPONSE_CANCEL:
+ default:
+ DEBUG(" CANCEL");
+ sxftd_close(sxfti, TRUE);
+ break;
+
+ }
+ LEAVE(" ");
+}
+
+
/**
* Update the example calendar; make sure to take into account the end
* specification.
**/
-static
-void
+static void
sxftd_update_example_cal( SXFromTransInfo *sxfti )
{
struct tm *tmpTm;
@@ -800,10 +777,53 @@
}
-static
-void
-sxftd_update_excal_adapt( GtkObject *o, gpointer ud )
+/**
+ * Callback to update the calendar
+ **/
+static void
+sxftd_update_excal_adapt( GObject *o, gpointer ud )
{
SXFromTransInfo *sxfti = (SXFromTransInfo*)ud;
sxftd_update_example_cal( sxfti );
}
+
+
+/**
+ *
+ **/
+void
+gnc_sx_create_from_trans( Transaction *trans )
+{
+ int errno;
+ SXFromTransInfo *sxfti = g_new0( SXFromTransInfo, 1);
+
+ sxfti->gxml = gnc_glade_xml_new(SX_GLADE_FILE,
+ SXFTD_DIALOG_GLADE_NAME);
+
+ sxfti->dialog = glade_xml_get_widget(sxfti->gxml,
+ SXFTD_DIALOG_GLADE_NAME);
+
+ sxfti->trans = trans;
+
+ sxfti->sx = xaccSchedXactionMalloc(gnc_get_current_book ());
+
+ if ( (errno = sxftd_init( sxfti )) < 0 ) {
+ if ( errno == SXFTD_ERRNO_OPEN_XACTION )
+ {
+ gnc_error_dialog( gnc_ui_get_toplevel(),
+ _( "Cannot create a Scheduled Transaction "
+ "from a Transaction currently\n"
+ "being edited. Please Enter the "
+ "Transaction before Scheduling." ) );
+ sxftd_close( sxfti, TRUE );
+ return;
+ }
+ else
+ {
+ PERR( "Error in sxftd_init: %d", errno );
+ }
+ }
+
+ gtk_widget_show_all(GTK_WIDGET(sxfti->dialog));
+}
+
Index: sched-xact.glade
===================================================================
RCS file: /home/cvs/cvsroot/gnucash/src/gnome/glade/sched-xact.glade,v
retrieving revision 1.42.2.9
retrieving revision 1.42.2.10
diff -Lsrc/gnome/glade/sched-xact.glade -Lsrc/gnome/glade/sched-xact.glade -u -r1.42.2.9 -r1.42.2.10
--- src/gnome/glade/sched-xact.glade
+++ src/gnome/glade/sched-xact.glade
@@ -5643,7 +5643,7 @@
<property name="label" translatable="yes">Advanced...</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
- <property name="response_id">0</property>
+ <property name="response_id">100</property>
</widget>
</child>
More information about the gnucash-changes
mailing list