[Gnucash-changes] r13096 - gnucash/trunk/src/gnome - Hook-up the new budget value estimation dialog.

Chris Shoemaker chris at cvs.gnucash.org
Sat Feb 4 11:34:58 EST 2006


Author: chris
Date: 2006-02-04 11:34:57 -0500 (Sat, 04 Feb 2006)
New Revision: 13096
Trac: http://svn.gnucash.org/trac/changeset/13096

Modified:
   gnucash/trunk/src/gnome/gnc-plugin-page-budget.c
Log:
   Hook-up the new budget value estimation dialog.


Modified: gnucash/trunk/src/gnome/gnc-plugin-page-budget.c
===================================================================
--- gnucash/trunk/src/gnome/gnc-plugin-page-budget.c	2006-02-04 16:32:30 UTC (rev 13095)
+++ gnucash/trunk/src/gnome/gnc-plugin-page-budget.c	2006-02-04 16:34:57 UTC (rev 13096)
@@ -1,7 +1,7 @@
 /*
  * gnc-plugin-page-budget.c --
  *
- * Copyright (C) 2005 Chris Shoemaker <c.shoemaker at cox.net>
+ * Copyright (C) 2005-2006 Chris Shoemaker <c.shoemaker at cox.net>
  *   (based on gnc-plugin-page-account-tree.c)
  *
  * This program is free software; you can redistribute it and/or
@@ -37,6 +37,7 @@
 #include <gtk/gtk.h>
 #include <glib/gi18n.h>
 #include <glade/glade.h>
+#include "gnc-date-edit.h"
 
 #ifndef HAVE_GLIB26
 #include "gkeyfile.h"
@@ -128,20 +129,21 @@
     { "OpenAccountAction", GNC_STOCK_OPEN_ACCOUNT, N_("Open _Account"), NULL,
       N_("Open the selected account"),
       G_CALLBACK (gnc_plugin_page_budget_cmd_open_account) },
-    { "OpenSubaccountsAction", GNC_STOCK_OPEN_ACCOUNT, N_("Open _Subaccounts"), NULL,
+    { "OpenSubaccountsAction", GNC_STOCK_OPEN_ACCOUNT, 
+      N_("Open _Subaccounts"), NULL,
       N_("Open the selected account and all its subaccounts"),
       G_CALLBACK (gnc_plugin_page_budget_cmd_open_subaccounts) },
 
     /* Edit menu */
     { "DeleteBudgetAction", GNC_STOCK_DELETE_BUDGET, N_("_Delete Budget"),
-      NULL, N_("Delete the budget"),
+      NULL, N_("Delete this budget"),
       G_CALLBACK (gnc_plugin_page_budget_cmd_delete_budget) },
     { "OptionsBudgetAction", GTK_STOCK_PROPERTIES, N_("Budget Options"),
-      NULL, N_("Edit the budget view options"),
+      NULL, N_("Edit this budget's options"),
       G_CALLBACK (gnc_plugin_page_budget_cmd_view_options) },
     { "EstimateBudgetAction", GTK_STOCK_EXECUTE, N_("Estimate Budget"),
       NULL,
-      N_("Estimate a budget value for the selected cells"),
+      N_("Estimate a budget value for the selected accounts from past transactions"),
       G_CALLBACK (gnc_plugin_page_budget_cmd_estimate_budget) },
 
     /* View menu */
@@ -185,6 +187,10 @@
 
     GList *period_col_list;
     AccountFilterDialog fd;
+
+    /* For the estimation dialog */
+    Recurrence r;
+    gint sigFigs;
 } GncPluginPageBudgetPrivate;
 
 #define GNC_PLUGIN_PAGE_BUDGET_GET_PRIVATE(o)  \
@@ -290,6 +296,9 @@
     priv->fd.visible_types = -1; /* Start with all types */
     priv->fd.hide_zero_total = FALSE;
 
+    priv->sigFigs = 1;
+    recurrenceSet(&priv->r, 1, PERIOD_MONTH, NULL); 
+
     LEAVE("page %p, priv %p, action group %p",
           plugin_page, priv, action_group);
 }
@@ -824,7 +833,6 @@
 
 }
 
-
 static void
 estimate_budget_helper(GtkTreeModel *model, GtkTreePath *path,
                        GtkTreeIter *iter, gpointer data)
@@ -835,7 +843,6 @@
     GncPluginPageBudgetPrivate *priv;
     GncPluginPageBudget *page = data;
 
-
     g_return_if_fail(GNC_IS_PLUGIN_PAGE_BUDGET(page));
     priv = GNC_PLUGIN_PAGE_BUDGET_GET_PRIVATE(page);
 
@@ -845,17 +852,18 @@
     num_periods = g_list_length(priv->period_col_list);
 
     for (i = 0; i < num_periods; i++) {
-        num = gnc_budget_get_account_period_actual_value(
-            priv->budget, acct, i);
+        num = recurrenceGetAccountPeriodValue(&priv->r, acct, i);
         if (!gnc_numeric_check(num)) {
             if (gnc_reverse_balance (acct))
                 num = gnc_numeric_neg (num);
 
+            
+            num = gnc_numeric_convert(num, GNC_DENOM_AUTO, 
+                GNC_HOW_DENOM_SIGFIGS(priv->sigFigs) | GNC_HOW_RND_ROUND);
             gnc_budget_set_account_period_value(
                 priv->budget, acct, i, num);
         }
     }
-
 }
 
 static void
@@ -864,15 +872,58 @@
 {
     GncPluginPageBudgetPrivate *priv;
     GtkTreeSelection *sel;
+    GtkWidget *dialog, *gde, *dtr;
+    gint result;
+    GDate date;
+    const Recurrence *r;
+    GladeXML *xml;
 
-    g_return_if_fail (GNC_IS_PLUGIN_PAGE_BUDGET (page));
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE_BUDGET(page));
     priv = GNC_PLUGIN_PAGE_BUDGET_GET_PRIVATE(page);
 
     sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(priv->tree_view));
-    gtk_tree_selection_selected_foreach(sel, estimate_budget_helper, page);
 
+    if (gtk_tree_selection_count_selected_rows(sel) <= 0) {
+        dialog = gtk_message_dialog_new (
+            GTK_WINDOW(gnc_plugin_page_get_window(GNC_PLUGIN_PAGE(page))),
+            GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
+            GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE,
+            _("You must select at least one account to estimate."));
+        gtk_dialog_run (GTK_DIALOG(dialog));
+        gtk_widget_destroy(dialog);
+        return;
+    }
 
+    xml = gnc_glade_xml_new ("budget.glade", "BudgetEstimate");
+    dialog = glade_xml_get_widget (xml, "BudgetEstimate");
+    gtk_window_set_transient_for(
+        GTK_WINDOW(dialog), 
+        GTK_WINDOW(gnc_plugin_page_get_window(GNC_PLUGIN_PAGE(page))));
+    gde = glade_xml_get_widget(xml, "StartDate");
+    date = recurrenceGetDate(&priv->r);
+    gnc_date_edit_set_gdate(GNC_DATE_EDIT(gde), &date);
+    dtr = glade_xml_get_widget(xml, "DigitsToRound");
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(dtr), 
+                              (gdouble)priv->sigFigs);
 
+    gtk_widget_show_all (dialog);
+    result = gtk_dialog_run(GTK_DIALOG(dialog));
+    switch (result) {
+    case GTK_RESPONSE_OK:
+        r = gnc_budget_get_recurrence(priv->budget);
+        
+        gnc_date_edit_get_gdate(GNC_DATE_EDIT(gde), &date);
+        recurrenceSet(&priv->r, recurrenceGetMultiplier(r), 
+                      recurrenceGetPeriodType(r), &date);
+        priv->sigFigs = 
+            gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(dtr));
+
+        gtk_tree_selection_selected_foreach(sel, estimate_budget_helper, page);
+        break;
+    default:
+        break;
+    }
+    gtk_widget_destroy(dialog);
 }
 
 static gchar *



More information about the gnucash-changes mailing list