r15659 - gnucash/trunk/src/gnome-utils - Bug#392166: don't try to force "agreement" between the frequency selections and the start date; it's way too smart, and prevents the user from expressing what they might need or want.
Josh Sled
jsled at cvs.gnucash.org
Sun Feb 25 11:42:38 EST 2007
Author: jsled
Date: 2007-02-25 11:42:38 -0500 (Sun, 25 Feb 2007)
New Revision: 15659
Trac: http://svn.gnucash.org/trac/changeset/15659
Modified:
gnucash/trunk/src/gnome-utils/gnc-frequency.c
Log:
Bug#392166: don't try to force "agreement" between the frequency selections and the start date; it's way too smart, and prevents the user from expressing what they might need or want.
Modified: gnucash/trunk/src/gnome-utils/gnc-frequency.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-frequency.c 2007-02-25 16:21:46 UTC (rev 15658)
+++ gnucash/trunk/src/gnome-utils/gnc-frequency.c 2007-02-25 16:42:38 UTC (rev 15659)
@@ -677,78 +677,25 @@
static void
spin_changed_helper( GtkAdjustment *adj, gpointer d )
{
- g_signal_emit_by_name( GNC_FREQUENCY(d), "changed" );
+ g_signal_emit_by_name(GNC_FREQUENCY(d), "changed");
}
static void
weekly_days_changed( GtkButton *b, gpointer d )
{
- GncFrequency *gf;
-
- gf = GNC_FREQUENCY(d);
- g_signal_emit_by_name( gf, "changed" );
+ g_signal_emit_by_name(GNC_FREQUENCY(d), "changed");
}
static void
monthly_sel_changed( GtkButton *b, gpointer d )
{
- GncFrequency *gf;
- GtkWidget *o;
- guint dayOfMonth;
- struct tm *tmptm;
- time_t tmptt;
-
- gf = (GncFrequency*)d;
-
- o = glade_xml_get_widget( ((GncFrequency*)d)->gxml,
- "monthly_day" );
- dayOfMonth = gtk_combo_box_get_active( GTK_COMBO_BOX(o) ) + 1;
-
- tmptt = gnc_date_edit_get_date( gf->startDate );
- tmptm = localtime( &tmptt );
- while ( ! g_date_valid_dmy( dayOfMonth,
- tmptm->tm_mon + 1,
- tmptm->tm_year+1900 ) ) {
- dayOfMonth -= 1;
- }
- tmptm->tm_mday = dayOfMonth;
- tmptt = mktime( tmptm );
- gnc_date_edit_set_time( gf->startDate, tmptt );
-
- g_signal_emit_by_name( d, "changed" );
+ g_signal_emit_by_name(GNC_FREQUENCY(d), "changed");
}
static void
semimonthly_sel_changed( GtkButton *b, gpointer d )
{
- GncFrequency *gf;
- GtkWidget *o;
- gint tmpint;
- time_t tmptt;
- struct tm *tmptm;
-
- gf = (GncFrequency*)d;
-
- tmptt = gnc_date_edit_get_date( gf->startDate );
- tmptm = localtime( &tmptt );
-
- o = glade_xml_get_widget( gf->gxml, "semimonthly_first" );
- tmpint = gtk_combo_box_get_active( GTK_COMBO_BOX(o) )+1;
- o = glade_xml_get_widget( gf->gxml, "semimonthly_second" );
- if ( tmpint > gtk_combo_box_get_active( GTK_COMBO_BOX(o) )+1 ) {
- tmpint = gtk_combo_box_get_active( GTK_COMBO_BOX(o) )+1;
- }
-
- tmptm->tm_mday = tmpint;
- while ( ! g_date_valid_dmy( tmptm->tm_mday,
- tmptm->tm_mon+1,
- tmptm->tm_year+1900 ) ) {
- tmptm->tm_mday -= 1;
- }
- tmptt = mktime( tmptm );
- gnc_date_edit_set_time( gf->startDate, tmptt );
-
- g_signal_emit_by_name( gf, "changed" );
+ g_signal_emit_by_name(GNC_FREQUENCY(d), "changed");
}
static inline guint32 minn( guint32 a, guint32 b )
@@ -762,107 +709,21 @@
}
static void
-freq_combo_changed( GtkComboBox *b, gpointer d )
+freq_combo_changed(GtkComboBox *b, gpointer d)
{
- GncFrequency *gf = (GncFrequency*)d;
- int optIdx;
- UIFreqType uift;
- time_t startDate, tmpDate;
- struct tm *tmpTm;
- GtkWidget *o;
+ GncFrequency *gf = GNC_FREQUENCY(d);
+ int option_index;
/* Set the new page. */
- optIdx = gtk_combo_box_get_active( GTK_COMBO_BOX(((GncFrequency*)d)->freqComboBox) );
- gtk_notebook_set_current_page( ((GncFrequency*)d)->nb, optIdx );
-
- /* setup initial values for new page, as possible. */
- uift = PAGES[optIdx].uiFTVal;
- startDate = gnc_date_edit_get_date( gf->startDate );
- tmpTm = localtime( &startDate );
-
- switch ( uift ) {
- case UIFREQ_SEMI_MONTHLY:
- {
- gint tmpDayOfMonth;
- /* first on the <startdate_dom>, then on the <startdate_dom+2w> */
- o = glade_xml_get_widget( gf->gxml, "semimonthly_first" );
- tmpDayOfMonth = tmpTm->tm_mday;
- tmpTm->tm_mday += 14;
- tmpDate = mktime( tmpTm );
- tmpTm = localtime( &tmpDate );
- gtk_combo_box_set_active( GTK_COMBO_BOX(o),
- minn( tmpTm->tm_mday, tmpDayOfMonth ) - 1 );
- o = glade_xml_get_widget( gf->gxml, "semimonthly_second" );
- gtk_combo_box_set_active( GTK_COMBO_BOX(o),
- maxn( tmpTm->tm_mday, tmpDayOfMonth ) - 1 );
- }
- break;
- case UIFREQ_MONTHLY:
- /* on the <startdate_dom> */
- o = glade_xml_get_widget( gf->gxml, "monthly_day" );
- gtk_combo_box_set_active( GTK_COMBO_BOX(o),
- tmpTm->tm_mday - 1 );
- break;
- default:
- /* nuttin can be done, for whatever reason. */
- break;
- }
- g_signal_emit_by_name( gf, "changed" );
+ option_index = gtk_combo_box_get_active(GTK_COMBO_BOX(gf->freqComboBox));
+ gtk_notebook_set_current_page(gf->nb, option_index);
+ g_signal_emit_by_name(gf, "changed");
}
static void
start_date_changed( GNCDateEdit *gde, gpointer d )
{
- GncFrequency *gf;
- GtkWidget *o;
- struct tm *tmpTm;
- time_t dateFromGDE;
- gint page;
- UIFreqType uift;
-
- gf = (GncFrequency*)d;
-
- dateFromGDE = gnc_date_edit_get_date( gde );
-
- page = gtk_notebook_get_current_page( gf->nb );
- uift = PAGES[page].uiFTVal;
-
- o = NULL;
-
- switch (uift) {
- case UIFREQ_ONCE: /* FALLTHROUGH */
- case UIFREQ_DAILY: /* FALLTHROUGH */
- case UIFREQ_WEEKLY: /* FALLTHROUGH */
- break;
-
- case UIFREQ_SEMI_MONTHLY:
- {
- gint first_day;
- o = glade_xml_get_widget( gf->gxml, "semimonthly_first" );
- first_day = gtk_combo_box_get_active( GTK_COMBO_BOX(o) )+1;
- o = glade_xml_get_widget( gf->gxml, "semimonthly_second" );
- if ( first_day < gtk_combo_box_get_active(
- GTK_COMBO_BOX(o) )+1 ) {
- o = glade_xml_get_widget( gf->gxml,
- "semimonthly_first" );
- }
-
- tmpTm = localtime( &dateFromGDE );
- gtk_combo_box_set_active( GTK_COMBO_BOX(o),
- tmpTm->tm_mday-1 );
- }
- break;
- case UIFREQ_MONTHLY:
- o = glade_xml_get_widget( gf->gxml, "monthly_day" );
- tmpTm = localtime( &dateFromGDE );
- gtk_combo_box_set_active( GTK_COMBO_BOX(o),
- (tmpTm->tm_mday-1) );
- break;
- default:
- g_critical("unknown uift value %d", uift);
- break;
- }
- g_signal_emit_by_name( gf, "changed" );
+ g_signal_emit_by_name(GNC_FREQUENCY(d), "changed");
}
/* ================================================================= */
@@ -956,13 +817,13 @@
{
if (recurrenceListIsWeeklyMultiple(recurrences))
{
- gtk_notebook_set_current_page(gf->nb, PAGE_WEEKLY);
- gtk_combo_box_set_active(gf->freqComboBox, PAGE_WEEKLY);
-
for (; recurrences != NULL; recurrences = recurrences->next)
{
_setup_weekly_recurrence(gf, (Recurrence*)recurrences->data);
}
+
+ gtk_notebook_set_current_page(gf->nb, PAGE_WEEKLY);
+ gtk_combo_box_set_active(gf->freqComboBox, PAGE_WEEKLY);
}
else if (recurrenceListIsSemiMonthly(recurrences))
{
@@ -970,9 +831,6 @@
GtkWidget *multiplier_spin;
GtkWidget *dom_combobox;
- gtk_notebook_set_current_page(gf->nb, PAGE_SEMI_MONTHLY);
- gtk_combo_box_set_active(gf->freqComboBox, PAGE_SEMI_MONTHLY);
-
first = (Recurrence*)g_list_nth_data(recurrences, 0);
second = (Recurrence*)g_list_nth_data(recurrences, 1);
@@ -984,6 +842,8 @@
dom_combobox = glade_xml_get_widget(gf->gxml, "semimonthly_second");
gtk_combo_box_set_active(GTK_COMBO_BOX(dom_combobox), _get_monthly_combobox_index(second));
+ gtk_notebook_set_current_page(gf->nb, PAGE_SEMI_MONTHLY);
+ gtk_combo_box_set_active(gf->freqComboBox, PAGE_SEMI_MONTHLY);
}
else
{
@@ -1005,28 +865,26 @@
g_date_strftime(recur_date_str, 127, "%x", &recurrence_date);
g_critical("start_date [%s] != recurrence_date [%s]", start_date_str, recur_date_str);
}
+
gtk_notebook_set_current_page(gf->nb, PAGE_ONCE);
gtk_combo_box_set_active(gf->freqComboBox, PAGE_ONCE);
-
} break;
case PERIOD_DAY: {
guint multiplier;
GtkWidget *spin_button;
- gtk_notebook_set_current_page(gf->nb, PAGE_DAILY);
- gtk_combo_box_set_active(gf->freqComboBox, PAGE_DAILY);
-
multiplier = recurrenceGetMultiplier(r);
spin_button = glade_xml_get_widget(gf->gxml, "daily_spin");
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spin_button), multiplier);
made_changes = TRUE;
+ gtk_notebook_set_current_page(gf->nb, PAGE_DAILY);
+ gtk_combo_box_set_active(gf->freqComboBox, PAGE_DAILY);
} break;
case PERIOD_WEEK: {
+ _setup_weekly_recurrence(gf, r);
gtk_notebook_set_current_page(gf->nb, PAGE_WEEKLY);
gtk_combo_box_set_active(gf->freqComboBox, PAGE_WEEKLY);
-
- _setup_weekly_recurrence(gf, r);
} break;
case PERIOD_END_OF_MONTH:
case PERIOD_MONTH:
@@ -1037,9 +895,6 @@
GDate recurrence_day;
int day_of_month_index;
- gtk_notebook_set_current_page(gf->nb, PAGE_MONTHLY);
- gtk_combo_box_set_active(gf->freqComboBox, PAGE_MONTHLY);
-
multipler_spin = glade_xml_get_widget(gf->gxml, "monthly_spin");
multiplier = recurrenceGetMultiplier(r);
if (recurrenceGetPeriodType(r) == PERIOD_YEAR)
@@ -1049,6 +904,8 @@
day_of_month = glade_xml_get_widget(gf->gxml, "monthly_day");
gtk_combo_box_set_active(GTK_COMBO_BOX(day_of_month), _get_monthly_combobox_index(r));
+ gtk_notebook_set_current_page(gf->nb, PAGE_MONTHLY);
+ gtk_combo_box_set_active(gf->freqComboBox, PAGE_MONTHLY);
} break;
case PERIOD_NTH_WEEKDAY:
g_critical("unhandled period type [%d]", recurrenceGetPeriodType(r));
More information about the gnucash-changes
mailing list