[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