[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