2002-04-20 Joshua Sled <jsled@asynchronous.org>

* 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
This commit is contained in:
Joshua Sled 2002-04-21 04:29:42 +00:00
parent 8d1cb07b21
commit 833d4042b4
4 changed files with 123 additions and 17 deletions

View File

@ -1,3 +1,17 @@
2002-04-20 Joshua Sled <jsled@asynchronous.org>
* src/gnome/dialog-sxsincelast.c (process_auto_create_list): Added
progress-bar support for transaction auto-creation.
2002-04-17 Joshua Sled <jsled@asynchronous.org>
* 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 <jsled@asynchronous.org> 2002-04-16 Joshua Sled <jsled@asynchronous.org>
* src/gnome/dialog-scheduledxaction.c * src/gnome/dialog-scheduledxaction.c

View File

@ -128,6 +128,12 @@ X create a template register
dialogs are open. dialogs are open.
. creating a SX from trans with the SX list open does not update the SX . creating a SX from trans with the SX list open does not update the SX
list 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 . tab-order
. better frequency guess? . better frequency guess?
[ related... ] [ related... ]
@ -164,8 +170,10 @@ X create a template register
. But this is true of manually-created transactions, too ... is this . But this is true of manually-created transactions, too ... is this
actually correct behavior? actually correct behavior?
. inital "To-Create Transactions" varbinding table doesn't setup table correctly. . inital "To-Create Transactions" varbinding table doesn't setup table correctly.
. creating/cancelling a bunch [FIXME:define "bunch"] of transactions . creating a bunch [FIXME:define "bunch"] of transactions takes too long
takes too long, with no progress indication. 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 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 tab is hit to switch between register fields -- started with update on
1/21. 1/21.

View File

@ -77,6 +77,7 @@
#define SXSLD_DRUID_GLADE_NAME "sincelast_druid" #define SXSLD_DRUID_GLADE_NAME "sincelast_druid"
#define SINCELAST_DRUID "sincelast_druid" #define SINCELAST_DRUID "sincelast_druid"
#define WHAT_TO_DO_PG "what_to_do"
#define REMINDERS_PG "reminders_page" #define REMINDERS_PG "reminders_page"
#define AUTO_CREATE_NOTIFY_PG "auto_create_notify_page" #define AUTO_CREATE_NOTIFY_PG "auto_create_notify_page"
#define TO_CREATE_PG "to_create_page" #define TO_CREATE_PG "to_create_page"
@ -96,6 +97,8 @@
#define VARIABLE_TABLE "variables_table" #define VARIABLE_TABLE "variables_table"
#define AUTO_CREATE_VBOX "ac_vbox" #define AUTO_CREATE_VBOX "ac_vbox"
#define CREATED_VBOX "created_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 TO_CREATE_CLIST_WIDTH 3
#define REMINDER_CLIST_WIDTH 3 #define REMINDER_CLIST_WIDTH 3
@ -133,6 +136,8 @@ typedef struct _sxSinceLastData {
GnomeDruid *sincelast_druid; GnomeDruid *sincelast_druid;
GladeXML *gxml; GladeXML *gxml;
GtkProgressBar *prog;
/* Multi-stage processing-related stuff... */ /* Multi-stage processing-related stuff... */
GList /* <autoCreateTuple*> */ *autoCreateList; GList /* <autoCreateTuple*> */ *autoCreateList;
GList /* <toCreateTuple*> */ *toCreateList; GList /* <toCreateTuple*> */ *toCreateList;
@ -406,13 +411,20 @@ theres_no_turning_back_bang( GnomeDruidPage *druid_page,
} }
static void 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; GtkWidget *w;
if ( g_list_length( sxsld->reminderList ) == 0 ) { if ( g_list_length( sxsld->reminderList ) == 0 ) {
w = glade_xml_get_widget( sxsld->gxml, w = glade_xml_get_widget( sxsld->gxml,
AUTO_CREATE_NOTIFY_PG ); AUTO_CREATE_NOTIFY_PG );
DEBUG( "Going to auto_create_notify page" );
gnome_druid_set_page( sxsld->sincelast_druid, gnome_druid_set_page( sxsld->sincelast_druid,
GNOME_DRUID_PAGE(w) ); GNOME_DRUID_PAGE(w) );
return; return;
@ -429,7 +441,8 @@ static void
reminders_prep( GnomeDruidPage *druid_page, reminders_prep( GnomeDruidPage *druid_page,
gpointer arg1, gpointer ud ) gpointer arg1, gpointer ud )
{ {
reminders_page_prep( ud ); sxSinceLastData *sxsld = (sxSinceLastData*)ud;
reminders_page_prep( sxsld );
} }
static gboolean static gboolean
@ -468,6 +481,7 @@ auto_create_prep( GnomeDruidPage *druid_page,
sxSinceLastData *sxsld = (sxSinceLastData*)ud; sxSinceLastData *sxsld = (sxSinceLastData*)ud;
if ( ! sxsld->autoCreatedSomething ) { if ( ! sxsld->autoCreatedSomething ) {
DEBUG( "Going to to_create page" );
w = glade_xml_get_widget( sxsld->gxml, TO_CREATE_PG ); w = glade_xml_get_widget( sxsld->gxml, TO_CREATE_PG );
gnome_druid_set_page( sxsld->sincelast_druid, gnome_druid_set_page( sxsld->sincelast_druid,
GNOME_DRUID_PAGE(w) ); GNOME_DRUID_PAGE(w) );
@ -483,6 +497,7 @@ created_prep( GnomeDruidPage *druid_page,
sxSinceLastData *sxsld = (sxSinceLastData*)ud; sxSinceLastData *sxsld = (sxSinceLastData*)ud;
if ( !sxsld->createdSomething ) { if ( !sxsld->createdSomething ) {
DEBUG( "Going to obsolete page" );
w = glade_xml_get_widget( sxsld->gxml, OBSOLETE_PG ); w = glade_xml_get_widget( sxsld->gxml, OBSOLETE_PG );
gnome_druid_set_page( sxsld->sincelast_druid, gnome_druid_set_page( sxsld->sincelast_druid,
GNOME_DRUID_PAGE(w) ); GNOME_DRUID_PAGE(w) );
@ -497,6 +512,7 @@ obsolete_prep( GnomeDruidPage *druid_page,
GtkWidget *w; GtkWidget *w;
sxSinceLastData *sxsld = (sxSinceLastData*)ud; sxSinceLastData *sxsld = (sxSinceLastData*)ud;
if ( g_list_length( sxsld->toRemoveList ) == 0 ) { if ( g_list_length( sxsld->toRemoveList ) == 0 ) {
DEBUG( "Going to finish page" );
w = glade_xml_get_widget( sxsld->gxml, FINISH_PG ); w = glade_xml_get_widget( sxsld->gxml, FINISH_PG );
gnome_druid_set_page( sxsld->sincelast_druid, gnome_druid_set_page( sxsld->sincelast_druid,
GNOME_DRUID_PAGE(w) ); GNOME_DRUID_PAGE(w) );
@ -638,7 +654,8 @@ to_create_next( GnomeDruidPage *druid_page,
sxsld->createdTxnGUIDList = sxsld->createdTxnGUIDList =
g_list_concat( sxsld->createdTxnGUIDList, created ); 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 ); oldQuery = gnc_ledger_display_get_query( sxsld->created_ledger );
newQuery = xaccQueryMerge( oldQuery, q, QUERY_AND ); newQuery = xaccQueryMerge( oldQuery, q, QUERY_AND );
@ -646,6 +663,8 @@ to_create_next( GnomeDruidPage *druid_page,
gnc_ledger_display_refresh( sxsld->created_ledger ); gnc_ledger_display_refresh( sxsld->created_ledger );
xaccFreeQuery( q ); xaccFreeQuery( q );
gnc_resume_gui_refresh();
sxsld->createdSomething = TRUE; sxsld->createdSomething = TRUE;
return FALSE; return FALSE;
@ -796,6 +815,10 @@ sxsincelast_init( sxSinceLastData *sxsld )
}; };
static druidSignalHandlerTuple pages[] = { static druidSignalHandlerTuple pages[] = {
{ WHAT_TO_DO_PG,
whattodo_prep, NULL, NULL,
NULL, cancel_check },
{ REMINDERS_PG, { REMINDERS_PG,
reminders_prep, theres_no_turning_back_bang, reminders_next, reminders_prep, theres_no_turning_back_bang, reminders_next,
reminders_finish, cancel_check }, reminders_finish, cancel_check },
@ -849,14 +872,18 @@ sxsincelast_init( sxSinceLastData *sxsld )
w = glade_xml_get_widget( sxsld->gxml, SX_OBSOLETE_CLIST ); w = glade_xml_get_widget( sxsld->gxml, SX_OBSOLETE_CLIST );
clist_set_all_cols_autoresize(GTK_CLIST(w), SX_OBSOLETE_CLIST_WIDTH); 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_autoCreate_ledger( sxsld );
create_created_ledger( sxsld ); create_created_ledger( sxsld );
//reminders_page_prep( sxsld );
gtk_widget_show_all( sxsld->sincelast_window );
process_auto_create_list( sxsld->autoCreateList, sxsld ); process_auto_create_list( sxsld->autoCreateList, sxsld );
reminders_page_prep( (gpointer)sxsld ); w = glade_xml_get_widget( sxsld->gxml, REMINDERS_PG );
gnome_druid_set_page( sxsld->sincelast_druid, GNOME_DRUID_PAGE(w) );
gtk_widget_show_all( sxsld->sincelast_window );
} }
static void static void
@ -969,9 +996,12 @@ process_auto_create_list( GList *autoCreateList, sxSinceLastData *sxsld )
autoCreateTuple *act; autoCreateTuple *act;
gboolean autoCreateState, notifyState; gboolean autoCreateState, notifyState;
Query *q, *dlQuery, *newQuery; Query *q, *dlQuery, *newQuery;
int count;
q = xaccMallocQuery(); q = xaccMallocQuery();
gnc_suspend_gui_refresh(); gnc_suspend_gui_refresh();
count = 0;
gtk_progress_configure( sxsld->prog, 0, 0, g_list_length( autoCreateList ) );
for ( ; autoCreateList ; autoCreateList = autoCreateList->next ) { for ( ; autoCreateList ; autoCreateList = autoCreateList->next ) {
thisGUID = createdGUIDs = NULL; thisGUID = createdGUIDs = NULL;
act = (autoCreateTuple*)autoCreateList->data; act = (autoCreateTuple*)autoCreateList->data;
@ -981,8 +1011,11 @@ process_auto_create_list( GList *autoCreateList, sxSinceLastData *sxsld )
create_transactions_on( act->sx, create_transactions_on( act->sx,
act->date, act->date,
NULL, &createdGUIDs ); 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; sxsld->autoCreatedSomething = TRUE;
if ( notifyState ) { if ( notifyState ) {
for ( thisGUID = createdGUIDs; for ( thisGUID = createdGUIDs;
@ -1000,6 +1033,9 @@ process_auto_create_list( GList *autoCreateList, sxSinceLastData *sxsld )
g_list_concat( sxsld->createdTxnGUIDList, g_list_concat( sxsld->createdTxnGUIDList,
createdGUIDs ); createdGUIDs );
} }
DEBUG( "Finished creating transactions; updating ledger" );
dlQuery = gnc_ledger_display_get_query( sxsld->ac_ledger ); dlQuery = gnc_ledger_display_get_query( sxsld->ac_ledger );
newQuery = xaccQueryMerge( dlQuery, q, QUERY_AND ); newQuery = xaccQueryMerge( dlQuery, q, QUERY_AND );
gnc_ledger_display_set_query( sxsld->ac_ledger, newQuery ); 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 ) if ( toCreateList == NULL )
return; return;
DEBUG( "foobar" );
clist = GTK_CLIST( glade_xml_get_widget( sxsld->gxml, TO_CREATE_CLIST ) ); clist = GTK_CLIST( glade_xml_get_widget( sxsld->gxml, TO_CREATE_CLIST ) );
for ( ; toCreateList ; toCreateList = toCreateList->next ) { for ( ; toCreateList ; toCreateList = toCreateList->next ) {
tct = (toCreateTuple*)toCreateList->data; tct = (toCreateTuple*)toCreateList->data;
@ -1239,7 +1274,7 @@ sxsincelast_populate( sxSinceLastData *sxsld )
xaccSchedXactionGetAutoCreate( sx, &autocreateState, xaccSchedXactionGetAutoCreate( sx, &autocreateState,
&notifyState ); &notifyState );
do { for ( ; instanceList; instanceList = instanceList->next ) {
instDate = (GDate*)instanceList->data; instDate = (GDate*)instanceList->data;
if ( autocreateState ) { if ( autocreateState ) {
act = g_new0( autoCreateTuple, 1 ); act = g_new0( autoCreateTuple, 1 );
@ -1255,8 +1290,7 @@ sxsincelast_populate( sxSinceLastData *sxsld )
sxsld->toCreateList = sxsld->toCreateList =
g_list_append( sxsld->toCreateList, tct ); g_list_append( sxsld->toCreateList, tct );
} }
} while ( (instanceList = instanceList->next) ); }
/* Report RE:showing the dialog iff there's stuff in it to /* Report RE:showing the dialog iff there's stuff in it to
* show. */ * show. */
showIt |= (g_list_length( sxsld->autoCreateList ) > 0); showIt |= (g_list_length( sxsld->autoCreateList ) > 0);
@ -1641,13 +1675,12 @@ create_transactions_on( SchedXaction *sx, GDate *gd,
gboolean createdTCT; gboolean createdTCT;
#if 0
{ {
char tmpBuf[GNC_D_WIDTH];
g_date_strftime( tmpBuf, GNC_D_WIDTH, GNC_D_FMT, gd ); g_date_strftime( tmpBuf, GNC_D_WIDTH, GNC_D_FMT, gd );
DEBUG( "Creating transactions on %s for %s", DEBUG( "Creating transactions on %s for %s",
tmpBuf, xaccSchedXactionGetName( sx ) ); tmpBuf, xaccSchedXactionGetName( sx ) );
} }
#endif /* 0 */
if ( tct != NULL if ( tct != NULL
&& g_date_compare( gd, tct->date ) != 0 ) { && g_date_compare( gd, tct->date ) != 0 ) {

View File

@ -4613,6 +4613,57 @@ Anually
<class>GnomeDruid</class> <class>GnomeDruid</class>
<name>sincelast_druid</name> <name>sincelast_druid</name>
<widget>
<class>GnomeDruidPageStandard</class>
<name>what_to_do</name>
<title>What to do, what to do?</title>
<title_color>255,255,255</title_color>
<background_color>25,25,112</background_color>
<logo_background_color>255,255,255</logo_background_color>
<widget>
<class>GtkVBox</class>
<child_name>GnomeDruidPageStandard:vbox</child_name>
<name>what_to_do_vbox</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkFrame</class>
<name>frame82</name>
<border_width>38</border_width>
<label>Creating transactions...</label>
<label_xalign>0.05</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>False</fill>
</child>
<widget>
<class>GtkProgressBar</class>
<name>creation_progress</name>
<value>0</value>
<lower>0</lower>
<upper>100</upper>
<bar_style>GTK_PROGRESS_CONTINUOUS</bar_style>
<orientation>GTK_PROGRESS_LEFT_TO_RIGHT</orientation>
<activity_mode>False</activity_mode>
<show_text>True</show_text>
<format>%v/%u (%p%%)</format>
<text_xalign>0.5</text_xalign>
<text_yalign>0.5</text_yalign>
</widget>
</widget>
</widget>
</widget>
<widget> <widget>
<class>GnomeDruidPageStandard</class> <class>GnomeDruidPageStandard</class>
<name>reminders_page</name> <name>reminders_page</name>