2002-11-24 Joshua Sled <jsled@asynchronous.org>

* src/gnome/druid-loan.c (ld_rev_prep): Initial support for a
	payment schedule review page, addressing Bug#98966.

	* src/gnome/dialog-scheduledxaction.c (putSchedXactionInDialog):
	Don't double-free dates; fixes Bug#99452.

	* src/gnome/gnc-split-reg.c (gnc_split_reg_jump_to_split)
	(gnc_split_reg_jump_to_split_amount, gnc_split_reg_record)
	(gsr_emit_include_date_signal):
	* src/gnome/window-register.c (gnc_register_include_date_adapter):
	Add back in support for including a date in the range
	limited/viewed by the window-register.

	* src/gnome/gnc-split-reg.c (gnc_split_reg_get_read_only)
	* src/gnome/window-register.c (regWindowLedger): Change manner of
	setting window-title in read-only-register case so the
	gnc-split-reg isn't changing the window-titles of windows it has
	no authority over.  Fixed Bug#99396.


git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@7552 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Joshua Sled 2002-11-25 05:51:30 +00:00
parent e74910a232
commit b05f24cce9
9 changed files with 609 additions and 156 deletions

View File

@ -1,3 +1,24 @@
2002-11-24 Joshua Sled <jsled@asynchronous.org>
* src/gnome/druid-loan.c (ld_rev_prep): Initial support for a
payment schedule review page, addressing Bug#98966.
* src/gnome/dialog-scheduledxaction.c (putSchedXactionInDialog):
Don't double-free dates; fixes Bug#99452.
* src/gnome/gnc-split-reg.c (gnc_split_reg_jump_to_split)
(gnc_split_reg_jump_to_split_amount, gnc_split_reg_record)
(gsr_emit_include_date_signal):
* src/gnome/window-register.c (gnc_register_include_date_adapter):
Add back in support for including a date in the range
limited/viewed by the window-register.
* src/gnome/gnc-split-reg.c (gnc_split_reg_get_read_only)
* src/gnome/window-register.c (regWindowLedger): Change manner of
setting window-title in read-only-register case so the
gnc-split-reg isn't changing the window-titles of windows it has
no authority over. Fixed Bug#99396.
2002-11-25 Benoit Grégoire <bock@step.polymtl.ca> 2002-11-25 Benoit Grégoire <bock@step.polymtl.ca>
* src/import-export/*.c,h: Split gnc-generic-import.h in one * src/import-export/*.c,h: Split gnc-generic-import.h in one
header per file. header per file.

View File

@ -707,7 +707,6 @@ xaccFreqSpecGetFreqStr( FreqSpec *fs, GString *str )
char *tmpStr; char *tmpStr;
int i; int i;
/* FIXME: fill in. */
switch( xaccFreqSpecGetUIType( fs ) ) { switch( xaccFreqSpecGetUIType( fs ) ) {
case UIFREQ_ONCE: case UIFREQ_ONCE:
tmpStr = g_new0( char, GDATE_STRING_BUF_SIZE ); tmpStr = g_new0( char, GDATE_STRING_BUF_SIZE );

View File

@ -1816,7 +1816,6 @@ putSchedXactionInDialog( gpointer data, gpointer user_data )
GDate **instArray; GDate **instArray;
GList *instList; GList *instList;
guint gdcMarkTag, oldMarkTag; guint gdcMarkTag, oldMarkTag;
gboolean createdNextInstDate = FALSE;
sx = (SchedXaction*)data; sx = (SchedXaction*)data;
sxd = (SchedXactionDialog*)user_data; sxd = (SchedXactionDialog*)user_data;
@ -1836,7 +1835,6 @@ putSchedXactionInDialog( gpointer data, gpointer user_data )
generate_instances( sx, calEndDate, &instList ); generate_instances( sx, calEndDate, &instList );
g_date_free( calEndDate ); g_date_free( calEndDate );
/* cleanup the date memory, here... */
if ( instList == NULL ) { if ( instList == NULL ) {
/* This was a bug [#90326]; while we do want to generate /* This was a bug [#90326]; while we do want to generate
* instances within the visible calendar range, we also want * instances within the visible calendar range, we also want
@ -1844,7 +1842,6 @@ putSchedXactionInDialog( gpointer data, gpointer user_data )
* calendar range. Thus, if the generate_instances above * calendar range. Thus, if the generate_instances above
* returns nothing, double-check with the SX. */ * returns nothing, double-check with the SX. */
nextInstDate = g_date_new(); nextInstDate = g_date_new();
createdNextInstDate = TRUE;
*nextInstDate = xaccSchedXactionGetNextInstance( sx, NULL ); *nextInstDate = xaccSchedXactionGetNextInstance( sx, NULL );
if ( g_date_valid( nextInstDate ) ) { if ( g_date_valid( nextInstDate ) ) {
instList = g_list_append( instList, instList = g_list_append( instList,
@ -1856,7 +1853,7 @@ putSchedXactionInDialog( gpointer data, gpointer user_data )
g_string_sprintf( nextDate, "not scheduled" ); g_string_sprintf( nextDate, "not scheduled" );
} else { } else {
char tmpBuf[ MAX_DATE_LENGTH+1 ]; char tmpBuf[ MAX_DATE_LENGTH+1 ];
char dowBuf[ 25 ]; /* <- fixme: appropriate length? */ char dowBuf[ 25 ]; /* <- FIXME: appropriate length? */
nextInstDate = (GDate*)instList->data; nextInstDate = (GDate*)instList->data;
printGDate( tmpBuf, nextInstDate ); printGDate( tmpBuf, nextInstDate );
g_date_strftime( dowBuf, 25, "%A", nextInstDate ); g_date_strftime( dowBuf, 25, "%A", nextInstDate );
@ -1886,9 +1883,7 @@ putSchedXactionInDialog( gpointer data, gpointer user_data )
g_free( instArray ); g_free( instArray );
g_list_foreach( instList, _gnc_sxd_free_dates, NULL ); g_list_foreach( instList, _gnc_sxd_free_dates, NULL );
g_list_free( instList ); g_list_free( instList );
if ( createdNextInstDate ) { nextInstDate = NULL;
g_free( nextInstDate );
}
} }
text[0] = xaccSchedXactionGetName( sx ); text[0] = xaccSchedXactionGetName( sx );

View File

@ -83,7 +83,10 @@
# define PAY_TXN_PART_RB "pay_txn_part_rb" # define PAY_TXN_PART_RB "pay_txn_part_rb"
# define PAY_UNIQ_FREQ_RB "pay_uniq_freq_rb" # define PAY_UNIQ_FREQ_RB "pay_uniq_freq_rb"
# define PAY_FREQ_CONTAINER "pay_freq_align" # define PAY_FREQ_CONTAINER "pay_freq_align"
#define PG_REVIEW "review_pg"
# define REV_SCROLLWIN "rev_scrollwin"
# define REV_RANGE_OPT "rev_range_opt"
# define REV_RANGE_TABLE "rev_date_range_table"
#define OPT_VBOX_SPACING 2 #define OPT_VBOX_SPACING 2
static short module = MOD_SX; static short module = MOD_SX;
@ -249,6 +252,14 @@ typedef struct LoanDruidData_ {
GtkRadioButton *payTxnFreqUniqRb; GtkRadioButton *payTxnFreqUniqRb;
GtkAlignment *payFreqAlign; GtkAlignment *payFreqAlign;
GNCFrequency *payGncFreq; GNCFrequency *payGncFreq;
/* rev = review */
GtkOptionMenu *revRangeOpt;
GtkTable *revTable;
GNCDateEdit *revStartDate;
GNCDateEdit *revEndDate;
GtkScrolledWindow *revScrollWin;
GtkCList *revCL;
} LoanDruidData; } LoanDruidData;
static void gnc_loan_druid_data_init( LoanDruidData *ldd ); static void gnc_loan_druid_data_init( LoanDruidData *ldd );
@ -268,6 +279,9 @@ static void ld_escrow_toggled( GtkToggleButton *tb, gpointer ud );
static void ld_pay_freq_toggle( GtkToggleButton *tb, gpointer ud ); static void ld_pay_freq_toggle( GtkToggleButton *tb, gpointer ud );
static void ldd_rev_range_opt_changed( GtkButton *b, gpointer ud );
static void ldd_rev_range_changed( GNCDateEdit *gde, gpointer ud );
static gboolean ld_info_save( GnomeDruidPage *gdp, gpointer arg1, gpointer ud ); static gboolean ld_info_save( GnomeDruidPage *gdp, gpointer arg1, gpointer ud );
static void ld_info_prep( GnomeDruidPage *gdp, gpointer arg1, gpointer ud ); static void ld_info_prep( GnomeDruidPage *gdp, gpointer arg1, gpointer ud );
static gboolean ld_opts_tran( GnomeDruidPage *gdp, gpointer arg1, gpointer ud ); static gboolean ld_opts_tran( GnomeDruidPage *gdp, gpointer arg1, gpointer ud );
@ -275,11 +289,13 @@ static void ld_opts_prep( GnomeDruidPage *gdp, gpointer arg1, gpointer ud );
static gboolean ld_rep_next ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud ); static gboolean ld_rep_next ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud );
static void ld_rep_prep ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud ); static void ld_rep_prep ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud );
static gboolean ld_rep_back ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud ); static gboolean ld_rep_back ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud );
static void ld_rep_fin ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud );
static gboolean ld_pay_next ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud ); static gboolean ld_pay_next ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud );
static void ld_pay_prep ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud ); static void ld_pay_prep ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud );
static gboolean ld_pay_back ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud ); static gboolean ld_pay_back ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud );
static void ld_pay_fin ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud ); static gboolean ld_rev_next ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud );
static void ld_rev_prep ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud );
static gboolean ld_rev_back ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud );
static void ld_rev_fin ( GnomeDruidPage *gdp, gpointer arg1, gpointer ud );
static void ld_create_sxes( LoanDruidData *ldd ); static void ld_create_sxes( LoanDruidData *ldd );
@ -353,21 +369,39 @@ gnc_ui_sx_loan_druid_create(void)
} }
} }
/* The GNCDateEdit */ /* The GNCDateEdit[s] */
{ {
ldd->prmStartDateGDE = /* "gde" == GNCDateEdit */
struct gde_in_tables_data {
GNCDateEdit **loc;
GtkTable *table;
int left, right, top, bottom;
} gde_data[] = {
/* These ints are the GtkTable boundries */
{ &ldd->prmStartDateGDE, ldd->prmTable, 1, 2, 4, 5 },
{ &ldd->revStartDate, ldd->revTable, 1, 2, 0, 1 },
{ &ldd->revEndDate, ldd->revTable, 1, 2, 1, 2 },
{ NULL }
};
for ( i=0; gde_data[i].loc != NULL; i++ ) {
*gde_data[i].loc =
GNC_DATE_EDIT( GNC_DATE_EDIT(
gnc_date_edit_new( time(NULL), gnc_date_edit_new( time(NULL),
FALSE, FALSE ) ); FALSE, FALSE ) );
gtk_table_attach( ldd->prmTable, gtk_table_attach( gde_data[i].table,
GTK_WIDGET( ldd->prmStartDateGDE ), GTK_WIDGET( *gde_data[i].loc ),
1, 2, 4, 5, gde_data[i].left,
gde_data[i].right,
gde_data[i].top,
gde_data[i].bottom,
(GTK_EXPAND | GTK_FILL), (GTK_EXPAND | GTK_FILL),
GTK_FILL, 0, 0 ); GTK_FILL, 0, 0 );
} }
gtk_widget_set_sensitive( GTK_WIDGET(ldd->prmVarFrame), FALSE ); }
gtk_widget_set_sensitive( GTK_WIDGET(ldd->prmVarFrame), FALSE );
{ {
GtkAlignment *a; GtkAlignment *a;
GNCOptionInfo typeOptInfo[] = { GNCOptionInfo typeOptInfo[] = {
@ -420,6 +454,7 @@ gnc_ui_sx_loan_druid_create(void)
gnc_option_menu_init( GTK_WIDGET(ldd->prmType) ); gnc_option_menu_init( GTK_WIDGET(ldd->prmType) );
gnc_option_menu_init( GTK_WIDGET(ldd->prmLengthType) ); gnc_option_menu_init( GTK_WIDGET(ldd->prmLengthType) );
gnc_option_menu_init( GTK_WIDGET(ldd->repRemainderOpt) ); gnc_option_menu_init( GTK_WIDGET(ldd->repRemainderOpt) );
gnc_option_menu_init( GTK_WIDGET(ldd->revRangeOpt) );
gtk_signal_connect( GTK_OBJECT(ldd->optEscrowCb), "toggled", gtk_signal_connect( GTK_OBJECT(ldd->optEscrowCb), "toggled",
GTK_SIGNAL_FUNC(ld_escrow_toggle), ldd ); GTK_SIGNAL_FUNC(ld_escrow_toggle), ldd );
@ -519,6 +554,24 @@ gnc_ui_sx_loan_druid_create(void)
GTK_WIDGET(ldd->payGncFreq) ); GTK_WIDGET(ldd->payGncFreq) );
} }
/* Review page widget setup. */
{
gtk_signal_connect( GTK_OBJECT( gtk_option_menu_get_menu(
ldd->revRangeOpt)),
"selection-done",
GTK_SIGNAL_FUNC( ldd_rev_range_opt_changed ),
ldd );
gtk_signal_connect( GTK_OBJECT(ldd->revStartDate),
"date-changed",
GTK_SIGNAL_FUNC( ldd_rev_range_changed ),
ldd );
gtk_signal_connect( GTK_OBJECT(ldd->revEndDate),
"date-changed",
GTK_SIGNAL_FUNC( ldd_rev_range_changed ),
ldd );
}
{ {
static struct { static struct {
char *pageName; char *pageName;
@ -530,8 +583,9 @@ gnc_ui_sx_loan_druid_create(void)
} DRUID_HANDLERS[] = { } DRUID_HANDLERS[] = {
{ PG_INFO, ld_info_save, ld_info_prep, ld_info_save, NULL }, { PG_INFO, ld_info_save, ld_info_prep, ld_info_save, NULL },
{ PG_OPTS, ld_opts_tran, ld_opts_prep, ld_opts_tran, NULL }, { PG_OPTS, ld_opts_tran, ld_opts_prep, ld_opts_tran, NULL },
{ PG_REPAYMENT, ld_rep_next, ld_rep_prep, ld_rep_back, ld_rep_fin }, { PG_REPAYMENT, ld_rep_next, ld_rep_prep, ld_rep_back, NULL },
{ PG_PAYMENT, ld_pay_next, ld_pay_prep, ld_pay_back, ld_pay_fin }, { PG_PAYMENT, ld_pay_next, ld_pay_prep, ld_pay_back, NULL },
{ PG_REVIEW, ld_rev_next, ld_rev_prep, ld_rev_back, ld_rev_fin },
{ NULL } { NULL }
}; };
@ -646,7 +700,6 @@ gnc_loan_druid_get_widgets( LoanDruidData *ldd )
g_assert( ldd->gxml != NULL ); g_assert( ldd->gxml != NULL );
/* Get all widgets */ /* Get all widgets */
#define GET_CASTED_WIDGET( cast, name ) \ #define GET_CASTED_WIDGET( cast, name ) \
(cast( glade_xml_get_widget( ldd->gxml, name ) )) (cast( glade_xml_get_widget( ldd->gxml, name ) ))
@ -657,8 +710,7 @@ gnc_loan_druid_get_widgets( LoanDruidData *ldd )
GET_CASTED_WIDGET( GTK_SPIN_BUTTON, IRATE_SPIN ); GET_CASTED_WIDGET( GTK_SPIN_BUTTON, IRATE_SPIN );
ldd->prmVarFrame = ldd->prmVarFrame =
GET_CASTED_WIDGET( GTK_FRAME, VAR_CONTAINER ); GET_CASTED_WIDGET( GTK_FRAME, VAR_CONTAINER );
/*ldd->prmStartDateGDE = /* ldd->prmStartDateGDE */
GET_CASTED_WIDGET( GNOME_DATE_EDIT, START_DATE );*/
ldd->prmLengthSpin = ldd->prmLengthSpin =
GET_CASTED_WIDGET( GTK_SPIN_BUTTON, LENGTH_SPIN ); GET_CASTED_WIDGET( GTK_SPIN_BUTTON, LENGTH_SPIN );
ldd->prmLengthType = ldd->prmLengthType =
@ -701,6 +753,17 @@ gnc_loan_druid_get_widgets( LoanDruidData *ldd )
GET_CASTED_WIDGET( GTK_RADIO_BUTTON, PAY_UNIQ_FREQ_RB ); GET_CASTED_WIDGET( GTK_RADIO_BUTTON, PAY_UNIQ_FREQ_RB );
ldd->payFreqAlign = ldd->payFreqAlign =
GET_CASTED_WIDGET( GTK_ALIGNMENT, PAY_FREQ_CONTAINER ); GET_CASTED_WIDGET( GTK_ALIGNMENT, PAY_FREQ_CONTAINER );
/* rev = review */
ldd->revRangeOpt =
GET_CASTED_WIDGET( GTK_OPTION_MENU, REV_RANGE_OPT );
ldd->revTable =
GET_CASTED_WIDGET( GTK_TABLE, REV_RANGE_TABLE );
/* GNCDateEdit *revStartDate */
/* GNCDateEdit *revEndDate */
ldd->revScrollWin =
GET_CASTED_WIDGET( GTK_SCROLLED_WINDOW, REV_SCROLLWIN );
} }
static static
@ -1051,12 +1114,29 @@ ld_rep_next( GnomeDruidPage *gdp, gpointer arg1, gpointer ud )
ldd = (LoanDruidData*)ud; ldd = (LoanDruidData*)ud;
if ( ld_rep_save( ldd ) != FALSE ) { if ( ld_rep_save( ldd ) != FALSE ) {
DEBUG( "Couldn't save, stopping here." );
return TRUE; return TRUE;
} }
{
int i;
gboolean haveMoreRepayOpts = FALSE;
for ( i = ldd->currentIdx + 1;
(i < ldd->ld.repayOptCount) && !haveMoreRepayOpts;
i++ ) {
haveMoreRepayOpts |= ldd->ld.repayOpts[i]->enabled;
}
if ( haveMoreRepayOpts ) {
ldd->currentIdx++; ldd->currentIdx++;
return FALSE; return FALSE;
} }
}
gnome_druid_set_page( ldd->druid,
GNOME_DRUID_PAGE(
glade_xml_get_widget( ldd->gxml,
PG_REVIEW ) ) );
return TRUE;
}
static static
gboolean gboolean
@ -1073,21 +1153,21 @@ void
ld_rep_prep( GnomeDruidPage *gdp, gpointer arg1, gpointer ud ) ld_rep_prep( GnomeDruidPage *gdp, gpointer arg1, gpointer ud )
{ {
LoanDruidData *ldd; LoanDruidData *ldd;
GString *str;
ldd = (LoanDruidData*)ud; ldd = (LoanDruidData*)ud;
if ( !ldd->ld.repAmount ) { if ( ldd->ld.repAmount ) {
GString *str; g_free( ldd->ld.repAmount );
str = g_string_sized_new( 64 ); }
str = g_string_sized_new( 64 );
g_string_sprintfa( str, "pmt( %.5f / 12 : %d : %0.2f : 0 : 0 )", g_string_sprintfa( str, "pmt( %.5f / 12 : %d : %0.2f : 0 : 0 )",
(ldd->ld.interestRate / 100), (ldd->ld.interestRate / 100),
ldd->ld.numPer, ldd->ld.numPer,
gnc_numeric_to_double(ldd->ld.principal) ); gnc_numeric_to_double(ldd->ld.principal) );
ldd->ld.repAmount = str->str; ldd->ld.repAmount = str->str;
g_string_free( str, FALSE ); g_string_free( str, FALSE );
}
if ( ldd->ld.repMemo ) if ( ldd->ld.repMemo )
gtk_entry_set_text( ldd->repTxnName, ldd->ld.repMemo ); gtk_entry_set_text( ldd->repTxnName, ldd->ld.repMemo );
@ -1107,6 +1187,7 @@ ld_rep_prep( GnomeDruidPage *gdp, gpointer arg1, gpointer ud )
ldd->ld.repFreq, ldd->ld.repFreq,
ldd->ld.repStartDate ); ldd->ld.repStartDate );
#if 0 /* no longer needed */
{ {
int i; int i;
gboolean haveRepayOpts = FALSE; gboolean haveRepayOpts = FALSE;
@ -1116,15 +1197,7 @@ ld_rep_prep( GnomeDruidPage *gdp, gpointer arg1, gpointer ud )
} }
gnome_druid_set_show_finish( ldd->druid, !haveRepayOpts ); gnome_druid_set_show_finish( ldd->druid, !haveRepayOpts );
} }
} #endif /* 0 -- no longer needed */
static
void
ld_rep_fin( GnomeDruidPage *gdp, gpointer arg1, gpointer ud )
{
LoanDruidData *ldd = (LoanDruidData*)ud;
ld_rep_save( ldd );
ld_create_sxes( ldd );
} }
static static
@ -1167,6 +1240,8 @@ ld_pay_prep( GnomeDruidPage *gdp, gpointer arg1, gpointer ud )
rod->fs, rod->startDate ); rod->fs, rod->startDate );
} }
#if 0 /* no longer needed to set this up; all transitions are to the review
* page. */
{ {
gboolean haveMoreRepayOpts = FALSE; gboolean haveMoreRepayOpts = FALSE;
int i = 0; int i = 0;
@ -1177,6 +1252,8 @@ ld_pay_prep( GnomeDruidPage *gdp, gpointer arg1, gpointer ud )
} }
gnome_druid_set_show_finish( ldd->druid, !haveMoreRepayOpts ); gnome_druid_set_show_finish( ldd->druid, !haveMoreRepayOpts );
} }
#endif /* 0 -- no longer needed to set this up; all transitions are to the
* review page. */
g_string_free( str, TRUE ); g_string_free( str, TRUE );
} }
@ -1268,16 +1345,24 @@ ld_pay_next( GnomeDruidPage *gdp, gpointer arg1, gpointer ud )
} }
/* Go through opts list and select next enabled option. */ /* Go through opts list and select next enabled option. */
for ( i=(++ldd->currentIdx); for ( i = ldd->currentIdx + 1;
(i < ldd->ld.repayOptCount) (i < ldd->ld.repayOptCount)
&& !ldd->ld.repayOpts[i]->enabled; i++ ) && !ldd->ld.repayOpts[i]->enabled; i++ )
; ;
if ( i != ldd->ld.repayOptCount ) {
if ( i < ldd->ld.repayOptCount ) {
ldd->currentIdx = i; ldd->currentIdx = i;
ld_pay_prep( gdp, arg1, ud ); ld_pay_prep( gdp, arg1, ud );
return TRUE; return TRUE;
} }
return FALSE;
/* If there's no repayment options enabled, then go immediately to
* the review page. */
gnome_druid_set_page( ldd->druid,
GNOME_DRUID_PAGE(
glade_xml_get_widget( ldd->gxml,
PG_REVIEW ) ) );
return TRUE;
} }
static static
@ -1294,11 +1379,13 @@ ld_pay_back( GnomeDruidPage *gdp, gpointer arg1, gpointer ud )
return TRUE; return TRUE;
} }
/* go back through opts list and select next enabled options. */
for ( i=(--ldd->currentIdx); for ( i=(--ldd->currentIdx);
(i > -1) && !ldd->ld.repayOpts[i]->enabled; (i > -1) && !ldd->ld.repayOpts[i]->enabled;
i-- ) { i-- )
} ;
if ( i != -1 ) {
if ( i >= 0 ) {
ldd->currentIdx = i; ldd->currentIdx = i;
ld_pay_prep( gdp, arg1, ud ); ld_pay_prep( gdp, arg1, ud );
return TRUE; return TRUE;
@ -1306,18 +1393,6 @@ ld_pay_back( GnomeDruidPage *gdp, gpointer arg1, gpointer ud )
return FALSE; return FALSE;
} }
static
void
ld_pay_fin( GnomeDruidPage *gdp, gpointer arg1, gpointer ud )
{
LoanDruidData *ldd = (LoanDruidData*)ud;
if ( ld_pay_save_current( ldd ) ) {
/* FIXME?: Error? */
return;
}
ld_create_sxes( ldd );
}
static static
void void
ld_pay_freq_toggle( GtkToggleButton *tb, gpointer ud ) ld_pay_freq_toggle( GtkToggleButton *tb, gpointer ud )
@ -1352,6 +1427,110 @@ ld_pay_freq_toggle( GtkToggleButton *tb, gpointer ud )
} }
} }
static
gboolean
ld_rev_next( GnomeDruidPage *gdp, gpointer arg1, gpointer ud )
{
g_assert( FALSE );
return TRUE;
}
static
void
ld_rev_prep( GnomeDruidPage *gdp, gpointer arg1, gpointer ud )
{
LoanDruidData *ldd = (LoanDruidData*)ud;
int i;
const static int BASE_COLS = 3;
int numCols = BASE_COLS;
gchar **titles;
int repayOptToColMap[ ( sizeof( REPAY_DEFAULTS )
/ sizeof( RepayOptDataDefault ) )
- 1 ];
gnome_druid_set_show_finish( ldd->druid, TRUE );
/* Cleanup old clist */
if ( ldd->revCL != NULL ) {
gtk_container_remove( GTK_CONTAINER(ldd->revScrollWin),
GTK_WIDGET(ldd->revCL) );
ldd->revCL = NULL;
}
/* Get the correct number of columns. */
for ( i=0; i < ldd->ld.repayOptCount; i++ ) {
repayOptToColMap[i] = -1;
if ( !ldd->ld.repayOpts[i]->enabled ) {
continue;
}
numCols += 1;
repayOptToColMap[i] = numCols - 1;
}
titles = g_new0( gchar*, numCols );
titles[0] = _( "Date" );
titles[1] = _( "Principal" );
titles[2] = _( "Interest" );
/* move the appropriate names over into the title array */
{
for ( i=0; i < ldd->ld.repayOptCount; i++ ) {
if ( repayOptToColMap[i] == -1 ) {
continue;
}
titles[ repayOptToColMap[i] ] =
ldd->ld.repayOpts[i]->name;
}
}
ldd->revCL = GTK_CLIST(
gtk_clist_new_with_titles( numCols,
titles ) );
for( i=0; i < numCols; i++ ) {
gtk_clist_set_column_auto_resize( ldd->revCL, i, TRUE );
}
gtk_container_add( GTK_CONTAINER(ldd->revScrollWin),
GTK_WIDGET(ldd->revCL) );
gtk_widget_show_all( GTK_WIDGET(ldd->revCL) );
}
static
gboolean
ld_rev_back( GnomeDruidPage *gdp, gpointer arg1, gpointer ud )
{
LoanDruidData *ldd = (LoanDruidData*)ud;
int i;
gnome_druid_set_show_finish( ldd->druid, FALSE );
/* Get the correct page based on the repayment state. */
/* go back through opts list and select next enabled options. */
for ( i = ldd->currentIdx;
(i > -1) && !ldd->ld.repayOpts[i]->enabled;
i-- ) {
}
if ( i >= 0 ) {
ldd->currentIdx = i;
/* natural transition to the payments page */
return FALSE;
}
/* If there are no payment options, then go directly to the main
* repayment page. */
gnome_druid_set_page( ldd->druid,
GNOME_DRUID_PAGE(
glade_xml_get_widget( ldd->gxml,
PG_REPAYMENT ) ) );
return TRUE;
}
static
void
ld_rev_fin( GnomeDruidPage *gdp, gpointer arg1, gpointer ud )
{
LoanDruidData *ldd = (LoanDruidData*)ud;
ld_create_sxes( ldd );
}
static static
void void
ld_gnc_ttinfo_free( gpointer data, gpointer ud ) ld_gnc_ttinfo_free( gpointer data, gpointer ud )
@ -1649,3 +1828,17 @@ ld_calc_upd_rem_payments( GtkWidget *w, gpointer ud )
remain = total - i; remain = total - i;
gtk_spin_button_set_value( ldd->prmRemainSpin, remain ); gtk_spin_button_set_value( ldd->prmRemainSpin, remain );
} }
static
void
ldd_rev_range_opt_changed( GtkButton *b, gpointer ud )
{
DEBUG( "FIXME" );
}
static
void
ldd_rev_range_changed( GNCDateEdit *gde, gpointer ud )
{
DEBUG( "FIXME" );
}

View File

@ -4095,7 +4095,7 @@ Postpone
<widget> <widget>
<class>GtkFrame</class> <class>GtkFrame</class>
<name>to_create_txn_reg_frame</name> <name>to_create_txn_reg_frame</name>
<label>Transaction</label> <label>Template Transaction (Read-Only)</label>
<label_xalign>0.05</label_xalign> <label_xalign>0.05</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type> <shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child> <child>
@ -5547,6 +5547,205 @@ Escrow
</widget> </widget>
</widget> </widget>
</widget> </widget>
<widget>
<class>GnomeDruidPageStandard</class>
<name>review_pg</name>
<title>Review</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>druid-vbox14</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkVBox</class>
<name>vbox177</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkHBox</class>
<name>hbox176</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
<widget>
<class>GtkHBox</class>
<name>hbox178</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
<widget>
<class>GtkLabel</class>
<name>label847973</name>
<label>Range: </label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>5</ypad>
<child>
<padding>0</padding>
<expand>False</expand>
<fill>False</fill>
</child>
</widget>
<widget>
<class>GtkVBox</class>
<name>vbox178</name>
<homogeneous>False</homogeneous>
<spacing>0</spacing>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkOptionMenu</class>
<name>rev_range_opt</name>
<can_focus>True</can_focus>
<items>Current Year
Now + 1 Year
Whole Loan
Custom
</items>
<initial_choice>0</initial_choice>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>False</fill>
</child>
</widget>
</widget>
</widget>
<widget>
<class>GtkFrame</class>
<name>frame93</name>
<border_width>2</border_width>
<sensitive>False</sensitive>
<label>Date Range</label>
<label_xalign>0.05</label_xalign>
<shadow_type>GTK_SHADOW_ETCHED_IN</shadow_type>
<child>
<padding>2</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>GtkTable</class>
<name>rev_date_range_table</name>
<rows>2</rows>
<columns>2</columns>
<homogeneous>False</homogeneous>
<row_spacing>0</row_spacing>
<column_spacing>0</column_spacing>
<widget>
<class>GtkLabel</class>
<name>label847971</name>
<label>Start Date:</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>5</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>0</top_attach>
<bottom_attach>1</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
<widget>
<class>GtkLabel</class>
<name>label847972</name>
<label>End Date:</label>
<justify>GTK_JUSTIFY_CENTER</justify>
<wrap>False</wrap>
<xalign>1</xalign>
<yalign>0.5</yalign>
<xpad>5</xpad>
<ypad>5</ypad>
<child>
<left_attach>0</left_attach>
<right_attach>1</right_attach>
<top_attach>1</top_attach>
<bottom_attach>2</bottom_attach>
<xpad>0</xpad>
<ypad>0</ypad>
<xexpand>False</xexpand>
<yexpand>False</yexpand>
<xshrink>False</xshrink>
<yshrink>False</yshrink>
<xfill>True</xfill>
<yfill>False</yfill>
</child>
</widget>
</widget>
</widget>
</widget>
<widget>
<class>GtkScrolledWindow</class>
<name>rev_scrollwin</name>
<hscrollbar_policy>GTK_POLICY_AUTOMATIC</hscrollbar_policy>
<vscrollbar_policy>GTK_POLICY_AUTOMATIC</vscrollbar_policy>
<hupdate_policy>GTK_UPDATE_CONTINUOUS</hupdate_policy>
<vupdate_policy>GTK_UPDATE_CONTINUOUS</vupdate_policy>
<child>
<padding>0</padding>
<expand>True</expand>
<fill>True</fill>
</child>
<widget>
<class>Placeholder</class>
</widget>
</widget>
</widget>
</widget>
</widget>
</widget> </widget>
</widget> </widget>

View File

@ -67,7 +67,7 @@ static short module = MOD_SX;
* X fill out gnc-split-reg.h interface * X fill out gnc-split-reg.h interface
* X calendar/date-picker * X calendar/date-picker
* . beta-necessary * . beta-necessary
* . date-inclusion on jumping * X date-inclusion on jumping
* . pass in, use number-of-lines * . pass in, use number-of-lines
* . title-renaming in read-only case. * . title-renaming in read-only case.
* X size-allocation * X size-allocation
@ -143,9 +143,9 @@ void gsr_default_copy_txn_handler ( GNCSplitReg *w, gpointer ud );
void gsr_default_paste_handler ( GNCSplitReg *w, gpointer ud ); void gsr_default_paste_handler ( GNCSplitReg *w, gpointer ud );
void gsr_default_paste_txn_handler( GNCSplitReg *w, gpointer ud ); void gsr_default_paste_txn_handler( GNCSplitReg *w, gpointer ud );
static void gsr_emit_signal( GNCSplitReg *gsr, const char *sigName ); static void gsr_emit_simple_signal( GNCSplitReg *gsr, const char *sigName );
static void gsr_emit_help_changed( GnucashRegister *reg, gpointer user_data ); static void gsr_emit_help_changed( GnucashRegister *reg, gpointer user_data );
static void gsr_emit_include_date_signal( GNCSplitReg *gsr, time_t date );
void gnc_split_reg_cut_cb(GtkWidget *w, gpointer data); void gnc_split_reg_cut_cb(GtkWidget *w, gpointer data);
void gnc_split_reg_copy_cb(GtkWidget *w, gpointer data); void gnc_split_reg_copy_cb(GtkWidget *w, gpointer data);
@ -239,6 +239,7 @@ enum gnc_split_reg_signal_enum {
PASTE_SIGNAL, PASTE_SIGNAL,
PASTE_TXN_SIGNAL, PASTE_TXN_SIGNAL,
HELP_CHANGED_SIGNAL, HELP_CHANGED_SIGNAL,
INCLUDE_DATE_SIGNAL,
LAST_SIGNAL LAST_SIGNAL
}; };
@ -270,18 +271,30 @@ gnc_split_reg_class_init( GNCSplitRegClass *class )
{ PASTE_SIGNAL, "paste", GTK_SIGNAL_OFFSET( GNCSplitRegClass, paste_cb ) }, { PASTE_SIGNAL, "paste", GTK_SIGNAL_OFFSET( GNCSplitRegClass, paste_cb ) },
{ PASTE_TXN_SIGNAL, "paste_txn", GTK_SIGNAL_OFFSET( GNCSplitRegClass, paste_txn_cb ) }, { PASTE_TXN_SIGNAL, "paste_txn", GTK_SIGNAL_OFFSET( GNCSplitRegClass, paste_txn_cb ) },
{ HELP_CHANGED_SIGNAL, "help-changed", GTK_SIGNAL_OFFSET( GNCSplitRegClass, help_changed_cb ) }, { HELP_CHANGED_SIGNAL, "help-changed", GTK_SIGNAL_OFFSET( GNCSplitRegClass, help_changed_cb ) },
{ INCLUDE_DATE_SIGNAL, "include-date", GTK_SIGNAL_OFFSET( GNCSplitRegClass, include_date_cb ) },
{ LAST_SIGNAL, NULL, 0 } { LAST_SIGNAL, NULL, 0 }
}; };
object_class = (GtkObjectClass*) class; object_class = (GtkObjectClass*) class;
for ( i=0; signals[i].signal_name != NULL; i++ ) { for ( i=0; signals[i].s != INCLUDE_DATE_SIGNAL; i++ ) {
gnc_split_reg_signals[ signals[i].s ] = gnc_split_reg_signals[ signals[i].s ] =
gtk_signal_new( signals[i].signal_name, gtk_signal_new( signals[i].signal_name,
GTK_RUN_LAST, GTK_RUN_LAST,
object_class->type, signals[i].defaultOffset, object_class->type, signals[i].defaultOffset,
gtk_signal_default_marshaller, GTK_TYPE_NONE, 0 ); gtk_signal_default_marshaller, GTK_TYPE_NONE, 0 );
} }
/* Setup the non-default-marshalled signals; 'i' is still valid, here. */
/* "include-date" */
gnc_split_reg_signals[ INCLUDE_DATE_SIGNAL ] =
gtk_signal_new( "include-date",
GTK_RUN_LAST,
object_class->type,
signals[i++].defaultOffset,
gtk_marshal_NONE__INT, /* time_t == int */
GTK_TYPE_NONE, 1, GTK_TYPE_INT );
g_assert( i == LAST_SIGNAL );
gtk_object_class_add_signals (object_class, gnc_split_reg_signals, LAST_SIGNAL); gtk_object_class_add_signals (object_class, gnc_split_reg_signals, LAST_SIGNAL);
@ -303,6 +316,7 @@ gnc_split_reg_class_init( GNCSplitRegClass *class )
class->paste_txn_cb = gsr_default_paste_txn_handler; class->paste_txn_cb = gsr_default_paste_txn_handler;
class->help_changed_cb = NULL; class->help_changed_cb = NULL;
class->include_date_cb = NULL;
} }
GtkWidget* GtkWidget*
@ -723,11 +737,6 @@ gsr_redraw_all_cb (GnucashRegister *g_reg, gpointer data)
} }
} }
/* FIXME */
#if 0 /* FIXME */
gnc_reg_set_window_name( gsr );
#endif /* 0 -- FIXME */
{ {
gboolean expand; gboolean expand;
gboolean sensitive; gboolean sensitive;
@ -838,7 +847,7 @@ void
gnc_split_reg_cut_cb (GtkWidget *w, gpointer data) gnc_split_reg_cut_cb (GtkWidget *w, gpointer data)
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "cut" ); gsr_emit_simple_signal( gsr, "cut" );
} }
void void
@ -854,7 +863,7 @@ void
gnc_split_reg_copy_cb (GtkWidget *w, gpointer data) gnc_split_reg_copy_cb (GtkWidget *w, gpointer data)
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "copy" ); gsr_emit_simple_signal( gsr, "copy" );
} }
void void
@ -870,7 +879,7 @@ void
gnc_split_reg_paste_cb (GtkWidget *w, gpointer data) gnc_split_reg_paste_cb (GtkWidget *w, gpointer data)
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "paste" ); gsr_emit_simple_signal( gsr, "paste" );
} }
void void
@ -887,7 +896,7 @@ void
gnc_split_reg_cut_trans_cb (GtkWidget *w, gpointer data) gnc_split_reg_cut_trans_cb (GtkWidget *w, gpointer data)
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "cut_txn" ); gsr_emit_simple_signal( gsr, "cut_txn" );
} }
void void
@ -904,7 +913,7 @@ void
gnc_split_reg_copy_trans_cb(GtkWidget *w, gpointer data) gnc_split_reg_copy_trans_cb(GtkWidget *w, gpointer data)
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "copy_txn" ); gsr_emit_simple_signal( gsr, "copy_txn" );
} }
void void
@ -921,7 +930,7 @@ void
gnc_split_reg_paste_trans_cb (GtkWidget *w, gpointer data) gnc_split_reg_paste_trans_cb (GtkWidget *w, gpointer data)
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "paste_txn" ); gsr_emit_simple_signal( gsr, "paste_txn" );
} }
/* Remove when porting to gtk2.0 */ /* Remove when porting to gtk2.0 */
@ -985,7 +994,7 @@ void
gnc_split_reg_reinitialize_trans_cb(GtkWidget *widget, gpointer data) gnc_split_reg_reinitialize_trans_cb(GtkWidget *widget, gpointer data)
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "reinit_ent" ); gsr_emit_simple_signal( gsr, "reinit_ent" );
} }
void void
@ -1117,7 +1126,7 @@ void
gnc_split_reg_delete_trans_cb(GtkWidget *widget, gpointer data) gnc_split_reg_delete_trans_cb(GtkWidget *widget, gpointer data)
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "delete_ent" ); gsr_emit_simple_signal( gsr, "delete_ent" );
} }
void void
@ -1134,7 +1143,7 @@ void
gnc_split_reg_duplicate_trans_cb(GtkWidget *w, gpointer data) gnc_split_reg_duplicate_trans_cb(GtkWidget *w, gpointer data)
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "dup_ent" ); gsr_emit_simple_signal( gsr, "dup_ent" );
} }
/** /**
@ -1189,7 +1198,7 @@ void
gnc_split_reg_recur_cb(GtkWidget *w, gpointer data) gnc_split_reg_recur_cb(GtkWidget *w, gpointer data)
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "schedule_ent" ); gsr_emit_simple_signal( gsr, "schedule_ent" );
} }
/** /**
@ -1199,7 +1208,7 @@ void
gnc_split_reg_record_trans_cb (GtkWidget *w, gpointer data) gnc_split_reg_record_trans_cb (GtkWidget *w, gpointer data)
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "enter_ent" ); gsr_emit_simple_signal( gsr, "enter_ent" );
} }
void void
@ -1216,7 +1225,7 @@ void
gnc_split_reg_cancel_trans_cb(GtkWidget *w, gpointer data) gnc_split_reg_cancel_trans_cb(GtkWidget *w, gpointer data)
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "cancel_ent" ); gsr_emit_simple_signal( gsr, "cancel_ent" );
} }
void void
@ -1252,14 +1261,14 @@ void
gnc_split_reg_expand_trans_menu_cb (GtkWidget *widget, gpointer data) gnc_split_reg_expand_trans_menu_cb (GtkWidget *widget, gpointer data)
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "expand_ent" ); gsr_emit_simple_signal( gsr, "expand_ent" );
} }
void void
gnc_split_reg_expand_trans_toolbar_cb (GtkWidget *widget, gpointer data) gnc_split_reg_expand_trans_toolbar_cb (GtkWidget *widget, gpointer data)
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "expand_ent" ); gsr_emit_simple_signal( gsr, "expand_ent" );
} }
/** /**
@ -1275,13 +1284,8 @@ gnc_split_reg_jump_to_split(GNCSplitReg *gsr, Split *split)
if (!gsr) return; if (!gsr) return;
trans = xaccSplitGetParent(split); trans = xaccSplitGetParent(split);
#if 0 /* FIXME */
if (trans != NULL) gsr_emit_include_date_signal( gsr, xaccTransGetDate(trans) );
if (gnc_register_include_date(gsr, xaccTransGetDate(trans)))
{
gnc_ledger_display_refresh( gsr->ledger );
}
#endif /* 0 -- FIXME */
reg = gnc_ledger_display_get_split_register( gsr->ledger ); reg = gnc_ledger_display_get_split_register( gsr->ledger );
@ -1300,18 +1304,12 @@ gnc_split_reg_jump_to_split_amount(GNCSplitReg *gsr, Split *split)
{ {
VirtualLocation virt_loc; VirtualLocation virt_loc;
SplitRegister *reg; SplitRegister *reg;
Transaction *trans;
if (!gsr) return; if (!gsr) return;
#if 0 /* FIXME */
trans = xaccSplitGetParent(split); trans = xaccSplitGetParent(split);
if (trans != NULL) { gsr_emit_include_date_signal( gsr, xaccTransGetDate(trans) );
if (gnc_register_include_date(gsr, xaccTransGetDate(trans)))
{
gnc_ledger_display_refresh (gsr->ledger);
}
}
#endif /* 0 -- FIXME */
reg = gnc_ledger_display_get_split_register (gsr->ledger); reg = gnc_ledger_display_get_split_register (gsr->ledger);
@ -1355,7 +1353,7 @@ void
gnc_split_reg_new_trans_cb (GtkWidget *widget, gpointer data) gnc_split_reg_new_trans_cb (GtkWidget *widget, gpointer data)
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "blank" ); gsr_emit_simple_signal( gsr, "blank" );
} }
void void
@ -1410,7 +1408,7 @@ void
gnc_split_reg_jump_cb( GtkWidget *widget, gpointer data ) gnc_split_reg_jump_cb( GtkWidget *widget, gpointer data )
{ {
GNCSplitReg *gsr = data; GNCSplitReg *gsr = data;
gsr_emit_signal( gsr, "jump" ); gsr_emit_simple_signal( gsr, "jump" );
} }
static static
@ -1607,12 +1605,7 @@ gnc_split_reg_record (GNCSplitReg *gsr)
if (!gnc_split_register_save (reg, TRUE)) if (!gnc_split_register_save (reg, TRUE))
return; return;
/* FIXME */ gsr_emit_include_date_signal( gsr, xaccTransGetDate(trans) );
#if 0 /* FIXME */
if (trans != NULL)
gnc_split_reg_include_date( gsr, xaccTransGetDate(trans) );
#endif /* 0 - FIXME */
gnc_split_register_redraw (reg); gnc_split_register_redraw (reg);
} }
@ -1697,7 +1690,7 @@ gsr_default_enter_handler( GNCSplitReg *gsr, gpointer data )
void void
gnc_split_reg_record_cb (GnucashRegister *reg, gpointer data) gnc_split_reg_record_cb (GnucashRegister *reg, gpointer data)
{ {
gsr_emit_signal( (GNCSplitReg*)data, "enter_ent" ); gsr_emit_simple_signal( (GNCSplitReg*)data, "enter_ent" );
} }
void void
@ -1988,9 +1981,7 @@ void
gnc_split_reg_determine_read_only( GNCSplitReg *gsr ) gnc_split_reg_determine_read_only( GNCSplitReg *gsr )
{ {
dialog_args *args = g_malloc(sizeof(dialog_args)); dialog_args *args = g_malloc(sizeof(dialog_args));
gchar *old_title, *new_title;
SplitRegister *reg; SplitRegister *reg;
GtkArg objarg;
gsr->read_only = FALSE; gsr->read_only = FALSE;
@ -1998,7 +1989,6 @@ gnc_split_reg_determine_read_only( GNCSplitReg *gsr )
/* FIXME: this is not ideal, as whatever window-title solution we come up /* FIXME: this is not ideal, as whatever window-title solution we come up
* with should be used in this case as well. */ * with should be used in this case as well. */
gsr->read_only = TRUE; gsr->read_only = TRUE;
} else { } else {
@ -2034,18 +2024,6 @@ gnc_split_reg_determine_read_only( GNCSplitReg *gsr )
reg = gnc_ledger_display_get_split_register( gsr->ledger ); reg = gnc_ledger_display_get_split_register( gsr->ledger );
gnc_split_register_set_read_only( reg, TRUE ); gnc_split_register_set_read_only( reg, TRUE );
/* Rename the window title */
/* FIXME: This isn't so good ... this thing shouldn't be directing
* window-title changes ... especially for the SX-related stuff. */
objarg.name = "GtkWindow::title";
gtk_object_arg_get(GTK_OBJECT(gsr->window), &objarg, NULL);
old_title = GTK_VALUE_STRING(objarg);
new_title = g_strdup_printf(_("%s [Read-Only]"), old_title);
/*gtk_object_set(GTK_OBJECT(gsr->window),
* "GtkWindow::title", new_title, NULL); */
gtk_window_set_title( GTK_WINDOW(gsr->window), new_title );
g_free(old_title);
g_free(new_title);
} }
static static
@ -2109,12 +2087,19 @@ static
void void
gsr_emit_help_changed( GnucashRegister *reg, gpointer user_data ) gsr_emit_help_changed( GnucashRegister *reg, gpointer user_data )
{ {
gsr_emit_signal( (GNCSplitReg*)user_data, "help-changed" ); gsr_emit_simple_signal( (GNCSplitReg*)user_data, "help-changed" );
} }
static static
void void
gsr_emit_signal( GNCSplitReg *gsr, const char *sigName ) gsr_emit_include_date_signal( GNCSplitReg *gsr, time_t date )
{
gtk_signal_emit_by_name( GTK_OBJECT(gsr), "include-date", date, NULL );
}
static
void
gsr_emit_simple_signal( GNCSplitReg *gsr, const char *sigName )
{ {
gtk_signal_emit_by_name( GTK_OBJECT(gsr), sigName, NULL ); gtk_signal_emit_by_name( GTK_OBJECT(gsr), sigName, NULL );
} }
@ -2138,6 +2123,7 @@ gnc_split_reg_get_sort_type( GNCSplitReg *gsr )
void void
gnc_split_reg_set_sort_type( GNCSplitReg *gsr, SortType t ) gnc_split_reg_set_sort_type( GNCSplitReg *gsr, SortType t )
{ {
/* FIXME */
PERR( "unimplemented" ); PERR( "unimplemented" );
} }
@ -2201,6 +2187,7 @@ void
gnc_split_reg_set_split_state( GNCSplitReg *gsr, gboolean split ) gnc_split_reg_set_split_state( GNCSplitReg *gsr, gboolean split )
{ {
g_assert( gsr ); g_assert( gsr );
/* FIXME */
PERR( "Unimplemented" ); PERR( "Unimplemented" );
} }
@ -2208,6 +2195,7 @@ void
gnc_split_reg_set_double_line( GNCSplitReg *gsr, gboolean doubleLine ) gnc_split_reg_set_double_line( GNCSplitReg *gsr, gboolean doubleLine )
{ {
g_assert( gsr ); g_assert( gsr );
/* FIXME */
PERR( "unimplemented" ); PERR( "unimplemented" );
} }
@ -2234,3 +2222,10 @@ gnc_split_reg_use_extended_popup( GNCSplitReg *gsr )
gtk_widget_show_all( popup ); gtk_widget_show_all( popup );
} }
gboolean
gnc_split_reg_get_read_only( GNCSplitReg *gsr )
{
g_assert( gsr );
return gsr->read_only;
}

View File

@ -149,6 +149,7 @@ struct _GNCSplitRegClass {
void (*paste_cb) ( GNCSplitReg *w, gpointer user_data ); void (*paste_cb) ( GNCSplitReg *w, gpointer user_data );
void (*paste_txn_cb) ( GNCSplitReg *w, gpointer user_data ); void (*paste_txn_cb) ( GNCSplitReg *w, gpointer user_data );
void (*help_changed_cb) ( GNCSplitReg *w, gpointer user_data ); void (*help_changed_cb) ( GNCSplitReg *w, gpointer user_data );
void (*include_date_cb) ( GNCSplitReg *w, time_t date, gpointer user_data );
}; };
typedef enum { typedef enum {
@ -271,6 +272,13 @@ gboolean gnc_split_reg_check_close( GNCSplitReg *gsr );
void gnc_split_reg_raise( GNCSplitReg *gsr ); void gnc_split_reg_raise( GNCSplitReg *gsr );
/**
* Callers can use this to determine if they need to reflect some "read-only"
* status in the window which contains the GNCSplitReg.
* @return TRUE if the register is read-only, FALSE if not.
**/
gboolean gnc_split_reg_get_read_only( GNCSplitReg *gsr );
/* /*
* Function to jump to various places in the register * Function to jump to various places in the register
*/ */

View File

@ -183,6 +183,12 @@ static void gnc_register_insert_cloned_toolbar_elt( GtkToolbar *dstToolbar,
gint idx ); gint idx );
static gboolean gnc_register_include_date(RegWindow *regData, time_t date); static gboolean gnc_register_include_date(RegWindow *regData, time_t date);
static void gnc_register_include_date_adapter( GNCSplitReg *gsr,
time_t date,
gpointer user_data );
static void gnc_register_set_read_only( RegWindow *regData );
static void gnc_reg_save_size (RegWindow *regData); static void gnc_reg_save_size (RegWindow *regData);
@ -830,7 +836,9 @@ regWindowLedger( GNCLedgerDisplay *ledger )
numRows = (guint)gnc_lookup_number_option ( "_+Advanced", numRows = (guint)gnc_lookup_number_option ( "_+Advanced",
"Number of Rows", 20.0 ); "Number of Rows", 20.0 );
gsr = gnc_split_reg_new( ledger, GTK_WINDOW(register_window), numRows, gsr = gnc_split_reg_new( ledger,
GTK_WINDOW(register_window),
numRows,
( CREATE_TOOLBAR ( CREATE_TOOLBAR
| CREATE_MENUS | CREATE_MENUS
| CREATE_POPUP | CREATE_POPUP
@ -842,6 +850,9 @@ regWindowLedger( GNCLedgerDisplay *ledger )
GNOME_APP(register_window)->menubar = glade_xml_get_widget( xml, "gnc_register_menubar" ); GNOME_APP(register_window)->menubar = glade_xml_get_widget( xml, "gnc_register_menubar" );
gnc_reg_set_window_name( regData ); gnc_reg_set_window_name( regData );
if ( gnc_split_reg_get_read_only( regData->gsr ) ) {
gnc_register_set_read_only( regData );
}
show_all = gnc_lookup_boolean_option( "_+Advanced", show_all = gnc_lookup_boolean_option( "_+Advanced",
"Show All Transactions", "Show All Transactions",
@ -876,6 +887,11 @@ regWindowLedger( GNCLedgerDisplay *ledger )
GTK_SIGNAL_FUNC( gnc_register_help_changed_cb ), GTK_SIGNAL_FUNC( gnc_register_help_changed_cb ),
regData ); regData );
/* The "include-date" and "read-only" signals. */
gtk_signal_connect( GTK_OBJECT(regData->gsr), "include-date",
GTK_SIGNAL_FUNC( gnc_register_include_date_adapter ),
regData );
/* The menu bar. Menu extension setup needs to come *after* that. */ /* The menu bar. Menu extension setup needs to come *after* that. */
gnc_register_setup_menu_widgets( regData, xml ); gnc_register_setup_menu_widgets( regData, xml );
gnc_extensions_menu_setup_with_data( GNOME_APP(register_window), gnc_extensions_menu_setup_with_data( GNOME_APP(register_window),
@ -1287,6 +1303,16 @@ gnc_register_start_recn_cb(GtkWidget * w, gpointer data)
recnWindow(regData->window, account); recnWindow(regData->window, account);
} }
static
void
gnc_register_include_date_adapter( GNCSplitReg *gsr, time_t date, gpointer user_data )
{
RegWindow *regData;
regData = (RegWindow*) user_data;
if ( gnc_register_include_date( regData, date ) ) {
gnc_ledger_display_refresh( gsr->ledger );
}
}
static gboolean static gboolean
gnc_register_include_date(RegWindow *regData, time_t date) gnc_register_include_date(RegWindow *regData, time_t date)
@ -1318,6 +1344,23 @@ gnc_register_include_date(RegWindow *regData, time_t date)
return changed; return changed;
} }
static
void
gnc_register_set_read_only( RegWindow *regData )
{
gchar *old_title, *new_title;
GtkArg objarg;
objarg.name = "GtkWindow::title";
gtk_object_arg_get(GTK_OBJECT(regData->window), &objarg, NULL);
old_title = GTK_VALUE_STRING(objarg);
new_title = g_strdup_printf(_("%s [Read-Only]"), old_title);
gtk_window_set_title( GTK_WINDOW(regData->window), new_title );
g_free(old_title);
g_free(new_title);
regData->read_only = TRUE;
}
/********************************************************************\ /********************************************************************\
* gnc_register_close_cb * * gnc_register_close_cb *