From 833d4042b40acf51c184abd10a7e719901d10d96 Mon Sep 17 00:00:00 2001 From: Joshua Sled Date: Sun, 21 Apr 2002 04:29:42 +0000 Subject: [PATCH] 2002-04-20 Joshua Sled * src/gnome/dialog-sxsincelast.c (process_auto_create_list): Added progress-bar support for transaction auto-creation. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@6816 57a11ea4-9604-0410-9ed3-97b8803252fd --- ChangeLog | 14 +++++++ src/doc/TODO-schedxactions | 12 +++++- src/gnome/dialog-sxsincelast.c | 63 ++++++++++++++++++++++++-------- src/gnome/glade/sched-xact.glade | 51 ++++++++++++++++++++++++++ 4 files changed, 123 insertions(+), 17 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8d7384de0d..caa6c1b646 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2002-04-20 Joshua Sled + + * src/gnome/dialog-sxsincelast.c (process_auto_create_list): Added + progress-bar support for transaction auto-creation. + +2002-04-17 Joshua Sled + + * src/gnome/dialog-scheduledxaction.c + (editor_ok_button_clicked): Added checks for ScheduledTransactions + with no name, same name as existing SchedXaction. + (row_select_handler): Resolved "critical" GTK run-time warning + regarding navigating the Scheduled Transaction list with the arrow + keys. + 2002-04-16 Joshua Sled * src/gnome/dialog-scheduledxaction.c diff --git a/src/doc/TODO-schedxactions b/src/doc/TODO-schedxactions index 9862b4e75e..72a624e6ba 100644 --- a/src/doc/TODO-schedxactions +++ b/src/doc/TODO-schedxactions @@ -128,6 +128,12 @@ X create a template register dialogs are open. . creating a SX from trans with the SX list open does not update the SX list + . So since Advanced editing entails "Simple" editing, it should just + replace that window. Then, with some CM hookup between the List and + the Editor, all is well. + . 20020419 - Wilddev manages to create two SXes from one; the first is + okay, but the second is h0rk3d [deleting it causes segfault, though it + can be instantiated correctly]. . tab-order . better frequency guess? [ related... ] @@ -164,8 +170,10 @@ X create a template register . But this is true of manually-created transactions, too ... is this actually correct behavior? . inital "To-Create Transactions" varbinding table doesn't setup table correctly. - . creating/cancelling a bunch [FIXME:define "bunch"] of transactions - takes too long, with no progress indication. + . creating a bunch [FIXME:define "bunch"] of transactions takes too long + X with no progress indication. + . cancelling a bunch [FIXME:define "bunch"] of xactions takes too long + . no progress indication. X twunder reports [2002.01.29] register growing a little bit at a time if tab is hit to switch between register fields -- started with update on 1/21. diff --git a/src/gnome/dialog-sxsincelast.c b/src/gnome/dialog-sxsincelast.c index 2cb6d1e941..9f75839b1e 100644 --- a/src/gnome/dialog-sxsincelast.c +++ b/src/gnome/dialog-sxsincelast.c @@ -77,6 +77,7 @@ #define SXSLD_DRUID_GLADE_NAME "sincelast_druid" #define SINCELAST_DRUID "sincelast_druid" +#define WHAT_TO_DO_PG "what_to_do" #define REMINDERS_PG "reminders_page" #define AUTO_CREATE_NOTIFY_PG "auto_create_notify_page" #define TO_CREATE_PG "to_create_page" @@ -96,6 +97,8 @@ #define VARIABLE_TABLE "variables_table" #define AUTO_CREATE_VBOX "ac_vbox" #define CREATED_VBOX "created_vbox" +#define WHAT_TO_DO_VBOX "what_to_do_vbox" +#define WHAT_TO_DO_PROGRESS "creation_progress" #define TO_CREATE_CLIST_WIDTH 3 #define REMINDER_CLIST_WIDTH 3 @@ -133,6 +136,8 @@ typedef struct _sxSinceLastData { GnomeDruid *sincelast_druid; GladeXML *gxml; + GtkProgressBar *prog; + /* Multi-stage processing-related stuff... */ GList /* */ *autoCreateList; GList /* */ *toCreateList; @@ -406,13 +411,20 @@ theres_no_turning_back_bang( GnomeDruidPage *druid_page, } static void -reminders_page_prep( gpointer ud ) +whattodo_prep( GnomeDruidPage *druid_page, + gpointer arg1, gpointer ud ) +{ + DEBUG( "whattodo_prep" ); +} + +static void +reminders_page_prep( sxSinceLastData *sxsld ) { - sxSinceLastData *sxsld = (sxSinceLastData*)ud; GtkWidget *w; if ( g_list_length( sxsld->reminderList ) == 0 ) { w = glade_xml_get_widget( sxsld->gxml, AUTO_CREATE_NOTIFY_PG ); + DEBUG( "Going to auto_create_notify page" ); gnome_druid_set_page( sxsld->sincelast_druid, GNOME_DRUID_PAGE(w) ); return; @@ -429,7 +441,8 @@ static void reminders_prep( GnomeDruidPage *druid_page, gpointer arg1, gpointer ud ) { - reminders_page_prep( ud ); + sxSinceLastData *sxsld = (sxSinceLastData*)ud; + reminders_page_prep( sxsld ); } static gboolean @@ -468,6 +481,7 @@ auto_create_prep( GnomeDruidPage *druid_page, sxSinceLastData *sxsld = (sxSinceLastData*)ud; if ( ! sxsld->autoCreatedSomething ) { + DEBUG( "Going to to_create page" ); w = glade_xml_get_widget( sxsld->gxml, TO_CREATE_PG ); gnome_druid_set_page( sxsld->sincelast_druid, GNOME_DRUID_PAGE(w) ); @@ -483,6 +497,7 @@ created_prep( GnomeDruidPage *druid_page, sxSinceLastData *sxsld = (sxSinceLastData*)ud; if ( !sxsld->createdSomething ) { + DEBUG( "Going to obsolete page" ); w = glade_xml_get_widget( sxsld->gxml, OBSOLETE_PG ); gnome_druid_set_page( sxsld->sincelast_druid, GNOME_DRUID_PAGE(w) ); @@ -497,6 +512,7 @@ obsolete_prep( GnomeDruidPage *druid_page, GtkWidget *w; sxSinceLastData *sxsld = (sxSinceLastData*)ud; if ( g_list_length( sxsld->toRemoveList ) == 0 ) { + DEBUG( "Going to finish page" ); w = glade_xml_get_widget( sxsld->gxml, FINISH_PG ); gnome_druid_set_page( sxsld->sincelast_druid, GNOME_DRUID_PAGE(w) ); @@ -638,7 +654,8 @@ to_create_next( GnomeDruidPage *druid_page, sxsld->createdTxnGUIDList = g_list_concat( sxsld->createdTxnGUIDList, created ); } - gnc_resume_gui_refresh(); + + DEBUG( "Done with creation; updating created ledger." ); oldQuery = gnc_ledger_display_get_query( sxsld->created_ledger ); newQuery = xaccQueryMerge( oldQuery, q, QUERY_AND ); @@ -646,6 +663,8 @@ to_create_next( GnomeDruidPage *druid_page, gnc_ledger_display_refresh( sxsld->created_ledger ); xaccFreeQuery( q ); + gnc_resume_gui_refresh(); + sxsld->createdSomething = TRUE; return FALSE; @@ -796,6 +815,10 @@ sxsincelast_init( sxSinceLastData *sxsld ) }; static druidSignalHandlerTuple pages[] = { + { WHAT_TO_DO_PG, + whattodo_prep, NULL, NULL, + NULL, cancel_check }, + { REMINDERS_PG, reminders_prep, theres_no_turning_back_bang, reminders_next, reminders_finish, cancel_check }, @@ -849,14 +872,18 @@ sxsincelast_init( sxSinceLastData *sxsld ) w = glade_xml_get_widget( sxsld->gxml, SX_OBSOLETE_CLIST ); clist_set_all_cols_autoresize(GTK_CLIST(w), SX_OBSOLETE_CLIST_WIDTH); + sxsld->prog = glade_xml_get_widget( sxsld->gxml, WHAT_TO_DO_PROGRESS ); + create_autoCreate_ledger( sxsld ); create_created_ledger( sxsld ); + //reminders_page_prep( sxsld ); + gtk_widget_show_all( sxsld->sincelast_window ); + process_auto_create_list( sxsld->autoCreateList, sxsld ); - reminders_page_prep( (gpointer)sxsld ); - - gtk_widget_show_all( sxsld->sincelast_window ); + w = glade_xml_get_widget( sxsld->gxml, REMINDERS_PG ); + gnome_druid_set_page( sxsld->sincelast_druid, GNOME_DRUID_PAGE(w) ); } static void @@ -969,9 +996,12 @@ process_auto_create_list( GList *autoCreateList, sxSinceLastData *sxsld ) autoCreateTuple *act; gboolean autoCreateState, notifyState; Query *q, *dlQuery, *newQuery; + int count; q = xaccMallocQuery(); gnc_suspend_gui_refresh(); + count = 0; + gtk_progress_configure( sxsld->prog, 0, 0, g_list_length( autoCreateList ) ); for ( ; autoCreateList ; autoCreateList = autoCreateList->next ) { thisGUID = createdGUIDs = NULL; act = (autoCreateTuple*)autoCreateList->data; @@ -981,8 +1011,11 @@ process_auto_create_list( GList *autoCreateList, sxSinceLastData *sxsld ) create_transactions_on( act->sx, act->date, NULL, &createdGUIDs ); - DEBUG( "created %d Transaction GUIDs", - g_list_length( createdGUIDs ) ); + + count += g_list_length( createdGUIDs ); + gtk_progress_set_value( sxsld->prog, count ); + while (g_main_iteration(FALSE)); + sxsld->autoCreatedSomething = TRUE; if ( notifyState ) { for ( thisGUID = createdGUIDs; @@ -1000,6 +1033,9 @@ process_auto_create_list( GList *autoCreateList, sxSinceLastData *sxsld ) g_list_concat( sxsld->createdTxnGUIDList, createdGUIDs ); } + + DEBUG( "Finished creating transactions; updating ledger" ); + dlQuery = gnc_ledger_display_get_query( sxsld->ac_ledger ); newQuery = xaccQueryMerge( dlQuery, q, QUERY_AND ); gnc_ledger_display_set_query( sxsld->ac_ledger, newQuery ); @@ -1019,7 +1055,6 @@ add_to_create_list_to_gui( GList *toCreateList, sxSinceLastData *sxsld ) if ( toCreateList == NULL ) return; - DEBUG( "foobar" ); clist = GTK_CLIST( glade_xml_get_widget( sxsld->gxml, TO_CREATE_CLIST ) ); for ( ; toCreateList ; toCreateList = toCreateList->next ) { tct = (toCreateTuple*)toCreateList->data; @@ -1239,7 +1274,7 @@ sxsincelast_populate( sxSinceLastData *sxsld ) xaccSchedXactionGetAutoCreate( sx, &autocreateState, ¬ifyState ); - do { + for ( ; instanceList; instanceList = instanceList->next ) { instDate = (GDate*)instanceList->data; if ( autocreateState ) { act = g_new0( autoCreateTuple, 1 ); @@ -1255,8 +1290,7 @@ sxsincelast_populate( sxSinceLastData *sxsld ) sxsld->toCreateList = g_list_append( sxsld->toCreateList, tct ); } - } while ( (instanceList = instanceList->next) ); - + } /* Report RE:showing the dialog iff there's stuff in it to * show. */ showIt |= (g_list_length( sxsld->autoCreateList ) > 0); @@ -1641,13 +1675,12 @@ create_transactions_on( SchedXaction *sx, GDate *gd, gboolean createdTCT; -#if 0 { + char tmpBuf[GNC_D_WIDTH]; g_date_strftime( tmpBuf, GNC_D_WIDTH, GNC_D_FMT, gd ); DEBUG( "Creating transactions on %s for %s", tmpBuf, xaccSchedXactionGetName( sx ) ); } -#endif /* 0 */ if ( tct != NULL && g_date_compare( gd, tct->date ) != 0 ) { diff --git a/src/gnome/glade/sched-xact.glade b/src/gnome/glade/sched-xact.glade index d187b72907..59d9af53e6 100644 --- a/src/gnome/glade/sched-xact.glade +++ b/src/gnome/glade/sched-xact.glade @@ -4613,6 +4613,57 @@ Anually GnomeDruid sincelast_druid + + GnomeDruidPageStandard + what_to_do + What to do, what to do? + 255,255,255 + 25,25,112 + 255,255,255 + + + GtkVBox + GnomeDruidPageStandard:vbox + what_to_do_vbox + False + 0 + + 0 + True + True + + + + GtkFrame + frame82 + 38 + + 0.05 + GTK_SHADOW_ETCHED_IN + + 0 + True + False + + + + GtkProgressBar + creation_progress + 0 + 0 + 100 + GTK_PROGRESS_CONTINUOUS + GTK_PROGRESS_LEFT_TO_RIGHT + False + True + %v/%u (%p%%) + 0.5 + 0.5 + + + + + GnomeDruidPageStandard reminders_page