[Gnucash-changes] r12149 - gnucash/trunk - Add support for opening account registers from the budget page. Use

David Hampton hampton at cvs.gnucash.org
Wed Dec 7 02:09:08 EST 2005


Author: hampton
Date: 2005-12-07 02:09:08 -0500 (Wed, 07 Dec 2005)
New Revision: 12149
Trac: http://svn.gnucash.org/trac/changeset/12149

Modified:
   gnucash/trunk/ChangeLog
   gnucash/trunk/src/gnome-utils/gnc-tree-view-account.c
   gnucash/trunk/src/gnome/gnc-plugin-page-budget.c
   gnucash/trunk/src/gnome/ui/gnc-plugin-page-budget-ui.xml
Log:
Add support for opening account registers from the budget page.  Use
shorter toolbar labels.


Modified: gnucash/trunk/ChangeLog
===================================================================
--- gnucash/trunk/ChangeLog	2005-12-07 06:43:16 UTC (rev 12148)
+++ gnucash/trunk/ChangeLog	2005-12-07 07:09:08 UTC (rev 12149)
@@ -1,5 +1,14 @@
 2005-12-07  David Hampton  <hampton at employees.org>
 
+	* src/gnome/gnc-plugin-page-budget.c:
+	* src/gnome/ui/gnc-plugin-page-budget-ui.xml: Add support for
+	opening account registers from the budget page.  Use shorter
+	toolbar labels.
+
+	* src/gnome-utils/gnc-tree-view-account.c: Add a check that the
+	tree selection is in the right mode to call
+	gnc_tree_view_account_get_selected_account().
+
 	* configure.in: Comment out the recently introduced second set of
 	checks for gconf.  They cause problems with schema installation.
 

Modified: gnucash/trunk/src/gnome/gnc-plugin-page-budget.c
===================================================================
--- gnucash/trunk/src/gnome/gnc-plugin-page-budget.c	2005-12-07 06:43:16 UTC (rev 12148)
+++ gnucash/trunk/src/gnome/gnc-plugin-page-budget.c	2005-12-07 07:09:08 UTC (rev 12149)
@@ -92,10 +92,16 @@
 static void gnc_plugin_page_budget_double_click_cb(
     GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *col,
     GncPluginPageBudget *page);
+static void gnc_plugin_page_budget_selection_changed_cb(
+    GtkTreeSelection *selection, GncPluginPageBudget *page);
 
 static void gnc_plugin_page_budget_view_refresh (GncPluginPageBudget *page);
 
 /* Command Callbacks */
+static void gnc_plugin_page_budget_cmd_open_account(
+    GtkAction *action, GncPluginPageBudget *page);
+static void gnc_plugin_page_budget_cmd_open_subaccounts(
+    GtkAction *action, GncPluginPageBudget *page);
 static void gnc_plugin_page_budget_cmd_delete_budget(
     GtkAction *action, GncPluginPageBudget *page);
 static void gnc_plugin_page_budget_cmd_view_options(
@@ -109,9 +115,15 @@
     /* Toplevel */
     { "FakeToplevel", "", NULL, NULL, NULL, NULL },
 
-    /* TODO: maybe there should be menu entries, too? */
+    /* File menu */
+    { "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,
+      N_("Open the selected account and all its subaccounts"),
+      G_CALLBACK (gnc_plugin_page_budget_cmd_open_subaccounts) },
 
-    /* Toolbar buttons */
+    /* Edit menu */
     { "DeleteBudgetAction", GNC_STOCK_DELETE_BUDGET, N_("_Delete Budget"),
       NULL, N_("Delete the budget"),
       G_CALLBACK (gnc_plugin_page_budget_cmd_delete_budget) },
@@ -127,27 +139,20 @@
 static guint gnc_plugin_page_budget_n_actions =
     G_N_ELEMENTS (gnc_plugin_page_budget_actions);
 
-// TODO: What's all this do?
-#if 0
-static const gchar *actions_requiring_budget[] = {
-  "OpenBudgetAction",
-  "BudgetViewOptionsAction",
-  "DeleteBudgetAction",
+static const gchar *actions_requiring_account[] = {
+  "OpenAccountAction",
+  "OpenSubaccountsAction",
   NULL
 };
 
-
 /** Short labels for use on the toolbar buttons. */
 static action_toolbar_labels toolbar_labels[] = {
-
-  { "OpenBudgetAction", 	    N_("Open") },
-  //{ "EditBudgetAction", 	    N_("Edit") },
-  //{ "EditBudgetOptionsAction",      N_("Options") },
-  { "NewBudgetAction",    	    N_("New") },
+  { "OpenAccountAction", 	    N_("Open") },
   { "DeleteBudgetAction", 	    N_("Delete") },
+  { "OptionsBudgetAction", 	    N_("Options") },
+  { "EstimateBudgetAction", 	    N_("Estimate") },
   { NULL, NULL },
 };
-#endif
 
 typedef struct GncPluginPageBudgetPrivate
 {
@@ -268,8 +273,7 @@
                                   gnc_plugin_page_budget_actions,
                                   gnc_plugin_page_budget_n_actions,
                                   plugin_page);
-    // FIXME? needed?
-    //gnc_gnome_utils_init_short_names (action_group, toolbar_labels);
+    gnc_plugin_init_short_names (action_group, toolbar_labels);
 
     // FIXME: need to test this url case
     if(!url) {
@@ -378,6 +382,9 @@
     selection = gtk_tree_view_get_selection(tree_view);
     gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
 
+    g_signal_connect (G_OBJECT (selection), "changed",
+		      G_CALLBACK (gnc_plugin_page_budget_selection_changed_cb),
+		      plugin_page);
     g_signal_connect (G_OBJECT (tree_view), "button-press-event",
                       G_CALLBACK (gnc_plugin_page_budget_button_press_cb),
                       plugin_page);
@@ -385,6 +392,7 @@
                       G_CALLBACK (gnc_plugin_page_budget_double_click_cb),
                       page);
 
+    gnc_plugin_page_budget_selection_changed_cb (NULL, page);
     gtk_tree_view_set_headers_visible(tree_view, TRUE);
     gtk_widget_show (GTK_WIDGET (tree_view));
     gtk_container_add (GTK_CONTAINER (scrolled_window),
@@ -476,9 +484,87 @@
     gnc_main_window_open_page(GNC_MAIN_WINDOW(window), new_page);
 }
 
+static void
+gnc_plugin_page_budget_selection_changed_cb (GtkTreeSelection *selection,
+					     GncPluginPageBudget *page)
+{
+    GtkActionGroup *action_group;
+    GtkTreeView *view;
+    GList *acct_list;
+    gboolean sensitive;
+
+    g_return_if_fail(GNC_IS_PLUGIN_PAGE_BUDGET(page));
+
+    if (!selection) {
+        sensitive = FALSE;
+    } else {
+        g_return_if_fail(GTK_IS_TREE_SELECTION(selection));
+	view = gtk_tree_selection_get_tree_view (selection);
+	acct_list = gnc_tree_view_account_get_selected_accounts(
+            GNC_TREE_VIEW_ACCOUNT(view));
+
+	/* Check here for placeholder accounts, etc. */
+	sensitive = (g_list_length(acct_list) > 0);
+	g_list_free(acct_list);
+    }
+
+    action_group = gnc_plugin_page_get_action_group(GNC_PLUGIN_PAGE(page));
+    gnc_plugin_update_actions (action_group, actions_requiring_account,
+				   "sensitive", sensitive);
+}
+	
+
 /* Command callbacks */
 
 static void
+gnc_plugin_page_budget_cmd_open_account (GtkAction *action,
+					 GncPluginPageBudget *page)
+{
+    GncPluginPageBudgetPrivate *priv;
+    GtkWidget *window;
+    GncPluginPage *new_page;
+    GList *acct_list, *tmp;
+    Account *account;
+
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE_BUDGET (page));
+    priv = GNC_PLUGIN_PAGE_BUDGET_GET_PRIVATE(page);
+    acct_list = gnc_tree_view_account_get_selected_accounts(
+        GNC_TREE_VIEW_ACCOUNT(priv->tree_view));
+
+    window = GNC_PLUGIN_PAGE (page)->window;
+    for (tmp = acct_list; tmp; tmp = g_list_next(tmp)) {
+        account = tmp->data;
+	new_page = gnc_plugin_page_register_new (account, FALSE);
+	gnc_main_window_open_page (GNC_MAIN_WINDOW(window), new_page);
+    }
+    g_list_free(acct_list);
+}
+
+static void
+gnc_plugin_page_budget_cmd_open_subaccounts (GtkAction *action,
+						   GncPluginPageBudget *page)
+{
+    GncPluginPageBudgetPrivate *priv;
+    GtkWidget *window;
+    GncPluginPage *new_page;
+    GList *acct_list, *tmp;
+    Account *account;
+
+    g_return_if_fail (GNC_IS_PLUGIN_PAGE_BUDGET (page));
+    priv = GNC_PLUGIN_PAGE_BUDGET_GET_PRIVATE(page);
+    acct_list = gnc_tree_view_account_get_selected_accounts(
+        GNC_TREE_VIEW_ACCOUNT(priv->tree_view));
+
+    window = GNC_PLUGIN_PAGE (page)->window;
+    for (tmp = acct_list; tmp; tmp = g_list_next(tmp)) {
+        account = tmp->data;
+	new_page = gnc_plugin_page_register_new (account, TRUE);
+	gnc_main_window_open_page (GNC_MAIN_WINDOW(window), new_page);
+    }
+    g_list_free(acct_list);
+}
+
+static void
 gnc_plugin_page_budget_cmd_delete_budget (GtkAction *action,
 					  GncPluginPageBudget *page)
 {

Modified: gnucash/trunk/src/gnome/ui/gnc-plugin-page-budget-ui.xml
===================================================================
--- gnucash/trunk/src/gnome/ui/gnc-plugin-page-budget-ui.xml	2005-12-07 06:43:16 UTC (rev 12148)
+++ gnucash/trunk/src/gnome/ui/gnc-plugin-page-budget-ui.xml	2005-12-07 07:09:08 UTC (rev 12149)
@@ -1,5 +1,13 @@
 <ui>
   <menubar>
+    <menu name="File" action="FileAction">
+      <menu name="FileOpenMenu" action="FileOpenMenuAction">
+        <placeholder name="FileOpenBottomPlaceholder">
+          <menuitem name="FileOpenAccount" action="OpenAccountAction"/>
+          <menuitem name="FileOpenSubaccounts" action="OpenSubaccountsAction"/>
+        </placeholder>
+      </menu>
+    </menu>
     <menu name="Edit" action="EditAction">
       <placeholder name="EditSelectedPlaceholder">
         <menuitem name="Estimate" action="EstimateBudgetAction"/>
@@ -17,6 +25,7 @@
 
   <toolbar name="DefaultToolbar">
     <placeholder name="DefaultToolbarPlaceholder">
+      <toolitem name="OpenAccount" action="OpenAccountAction"/>
       <separator name="ToolbarSep3"/>
       <toolitem name="Options" action="OptionsBudgetAction"/>
       <separator name="ToolbarSep4"/>

Modified: gnucash/trunk/src/gnome-utils/gnc-tree-view-account.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-tree-view-account.c	2005-12-07 06:43:16 UTC (rev 12148)
+++ gnucash/trunk/src/gnome-utils/gnc-tree-view-account.c	2005-12-07 07:09:08 UTC (rev 12149)
@@ -898,11 +898,16 @@
     GtkTreeModel *f_model, *s_model;
     GtkTreeIter iter, f_iter, s_iter;
     Account *account;
+    GtkSelectionMode mode;
 
     ENTER("view %p", view);
     g_return_val_if_fail (GNC_IS_TREE_VIEW_ACCOUNT (view), NULL);
 
     selection = gtk_tree_view_get_selection (GTK_TREE_VIEW(view));
+    mode = gtk_tree_selection_get_mode(selection);
+    if ((mode != GTK_SELECTION_SINGLE) && (mode != GTK_SELECTION_BROWSE)) {
+      return NULL;
+    }
     if (!gtk_tree_selection_get_selected (selection, &s_model, &s_iter)) {
       LEAVE("no account, get_selected failed");
       return FALSE;



More information about the gnucash-changes mailing list