mirror of
https://github.com/Gnucash/gnucash.git
synced 2024-12-01 04:59:29 -06:00
Migrate the account page options to a new "Filter By" dialog. Add a
new option to filter out accounts with zero total balances. Remember the current filter state across invocations of GnuCash. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@12205 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
parent
fe80448c99
commit
42b213afe2
@ -1,5 +1,14 @@
|
||||
2005-12-29 David Hampton <hampton@employees.org>
|
||||
|
||||
* src/scm/main.scm:
|
||||
* src/scm/main-window.scm:
|
||||
* src/gnome/gnc-plugin-page-account-tree.c:
|
||||
* src/gnome/glade/account.glade:
|
||||
* src/gnome/ui/gnc-plugin-page-account-tree-ui.xml: Migrate the
|
||||
account page options to a new "Filter By" dialog. Add a new
|
||||
option to filter out accounts with zero total balances. Remember
|
||||
the current filter state across invocations of GnuCash.
|
||||
|
||||
* src/gnome-utils/ui/gnc-main-window-ui.xml:
|
||||
* src/gnome-utils/gnc-main-window.c:
|
||||
* src/gnome/ui/gnc-plugin-page-register-ui.xml: Move the "Sort By"
|
||||
|
@ -2935,4 +2935,255 @@ and placeholder accounts may have an opening balance.</property>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
<widget class="GtkDialog" id="Filter By">
|
||||
<property name="visible">True</property>
|
||||
<property name="title" translatable="yes">Filter By...</property>
|
||||
<property name="type">GTK_WINDOW_TOPLEVEL</property>
|
||||
<property name="window_position">GTK_WIN_POS_NONE</property>
|
||||
<property name="modal">False</property>
|
||||
<property name="resizable">True</property>
|
||||
<property name="destroy_with_parent">False</property>
|
||||
<property name="decorated">True</property>
|
||||
<property name="skip_taskbar_hint">False</property>
|
||||
<property name="skip_pager_hint">False</property>
|
||||
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
|
||||
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
|
||||
<property name="has_separator">True</property>
|
||||
<signal name="response" handler="gppat_filter_response_cb" last_modification_time="Fri, 30 Dec 2005 01:57:50 GMT"/>
|
||||
|
||||
<child internal-child="vbox">
|
||||
<widget class="GtkVBox" id="dialog-vbox13">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child internal-child="action_area">
|
||||
<widget class="GtkHButtonBox" id="dialog-action_area13">
|
||||
<property name="visible">True</property>
|
||||
<property name="layout_style">GTK_BUTTONBOX_END</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="cancelbutton1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label">gtk-cancel</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="response_id">-6</property>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="okbutton1">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label">gtk-ok</property>
|
||||
<property name="use_stock">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="response_id">-5</property>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">True</property>
|
||||
<property name="pack_type">GTK_PACK_END</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkNotebook" id="notebook1">
|
||||
<property name="border_width">6</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="show_tabs">True</property>
|
||||
<property name="show_border">True</property>
|
||||
<property name="tab_pos">GTK_POS_TOP</property>
|
||||
<property name="scrollable">False</property>
|
||||
<property name="enable_popup">False</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkTable" id="table10">
|
||||
<property name="border_width">6</property>
|
||||
<property name="visible">True</property>
|
||||
<property name="n_rows">3</property>
|
||||
<property name="n_columns">2</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="row_spacing">6</property>
|
||||
<property name="column_spacing">6</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkTreeView" id="types_tree_view">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="headers_visible">False</property>
|
||||
<property name="rules_hint">True</property>
|
||||
<property name="reorderable">False</property>
|
||||
<property name="enable_search">True</property>
|
||||
<property name="fixed_height_mode">False</property>
|
||||
<property name="hover_selection">False</property>
|
||||
<property name="hover_expand">False</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">0</property>
|
||||
<property name="right_attach">1</property>
|
||||
<property name="top_attach">0</property>
|
||||
<property name="bottom_attach">3</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVButtonBox" id="vbuttonbox1">
|
||||
<property name="visible">True</property>
|
||||
<property name="layout_style">GTK_BUTTONBOX_SPREAD</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="select_all">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">_Select All</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<signal name="clicked" handler="gppat_filter_select_all_cb" last_modification_time="Fri, 30 Dec 2005 01:59:01 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="clear_all">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">C_lear All</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<signal name="clicked" handler="gppat_filter_clear_all_cb" last_modification_time="Fri, 30 Dec 2005 01:59:18 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkButton" id="default_types">
|
||||
<property name="visible">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">_Default</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<signal name="clicked" handler="gppat_filter_select_default_cb" last_modification_time="Fri, 30 Dec 2005 02:12:27 GMT"/>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="left_attach">1</property>
|
||||
<property name="right_attach">2</property>
|
||||
<property name="top_attach">1</property>
|
||||
<property name="bottom_attach">2</property>
|
||||
<property name="y_options">fill</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="tab_expand">False</property>
|
||||
<property name="tab_fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="label8477430">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Account Type</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="type">tab</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkVBox" id="vbox129">
|
||||
<property name="visible">True</property>
|
||||
<property name="homogeneous">False</property>
|
||||
<property name="spacing">0</property>
|
||||
|
||||
<child>
|
||||
<widget class="GtkCheckButton" id="hide_zero">
|
||||
<property name="visible">True</property>
|
||||
<property name="tooltip" translatable="yes">Hide accounts which have a zero total value.</property>
|
||||
<property name="can_focus">True</property>
|
||||
<property name="label" translatable="yes">Hide _zero totals</property>
|
||||
<property name="use_underline">True</property>
|
||||
<property name="relief">GTK_RELIEF_NORMAL</property>
|
||||
<property name="focus_on_click">True</property>
|
||||
<property name="active">False</property>
|
||||
<property name="inconsistent">False</property>
|
||||
<property name="draw_indicator">True</property>
|
||||
<signal name="toggled" handler="gppat_filter_hide_zero_toggled_cb" last_modification_time="Fri, 30 Dec 2005 01:58:04 GMT"/>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">False</property>
|
||||
<property name="fill">False</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<placeholder/>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="tab_expand">False</property>
|
||||
<property name="tab_fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
|
||||
<child>
|
||||
<widget class="GtkLabel" id="Balance">
|
||||
<property name="visible">True</property>
|
||||
<property name="label" translatable="yes">Balances</property>
|
||||
<property name="use_underline">False</property>
|
||||
<property name="use_markup">False</property>
|
||||
<property name="justify">GTK_JUSTIFY_LEFT</property>
|
||||
<property name="wrap">False</property>
|
||||
<property name="selectable">False</property>
|
||||
<property name="xalign">0.5</property>
|
||||
<property name="yalign">0.5</property>
|
||||
<property name="xpad">0</property>
|
||||
<property name="ypad">0</property>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="type">tab</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
<packing>
|
||||
<property name="padding">0</property>
|
||||
<property name="expand">True</property>
|
||||
<property name="fill">True</property>
|
||||
</packing>
|
||||
</child>
|
||||
</widget>
|
||||
</child>
|
||||
</widget>
|
||||
|
||||
</glade-interface>
|
||||
|
@ -45,7 +45,6 @@
|
||||
#include "Scrub.h"
|
||||
#include "Transaction.h"
|
||||
#include "dialog-account.h"
|
||||
#include "dialog-options.h"
|
||||
#include "dialog-transfer.h"
|
||||
#include "dialog-utils.h"
|
||||
#include "druid-merge.h"
|
||||
@ -59,10 +58,10 @@
|
||||
#include "gnc-session.h"
|
||||
#include "gnc-split-reg.h"
|
||||
#include "gnc-tree-view-account.h"
|
||||
#include "gnc-tree-model-account-types.h"
|
||||
#include "gnc-ui.h"
|
||||
#include "gnc-ui-util.h"
|
||||
#include "lot-viewer.h"
|
||||
#include "option-util.h"
|
||||
#include "window-reconcile.h"
|
||||
#include "window-main-summarybar.h"
|
||||
|
||||
@ -72,6 +71,8 @@ static QofLogModule log_module = GNC_MOD_GUI;
|
||||
#define PLUGIN_PAGE_ACCT_TREE_CM_CLASS "plugin-page-acct-tree"
|
||||
#define GCONF_SECTION "window/pages/account_tree"
|
||||
|
||||
#define FILTER_TREE_VIEW "types_tree_view"
|
||||
|
||||
enum {
|
||||
ACCOUNT_SELECTED,
|
||||
LAST_SIGNAL
|
||||
@ -79,16 +80,20 @@ enum {
|
||||
|
||||
typedef struct GncPluginPageAccountTreePrivate
|
||||
{
|
||||
GtkWidget *widget;
|
||||
GtkWidget *widget;
|
||||
GtkTreeView *tree_view;
|
||||
gint component_id;
|
||||
|
||||
GNCOptionDB * odb;
|
||||
SCM options;
|
||||
int options_id;
|
||||
GNCOptionWin * editor_dialog;
|
||||
struct {
|
||||
GtkWidget *dialog;
|
||||
GtkTreeModel *model;
|
||||
guint32 visible_types;
|
||||
guint32 original_visible_types;
|
||||
gboolean hide_zero_total;
|
||||
gboolean original_hide_zero_total;
|
||||
gulong selection_changed_cb_id;
|
||||
} fd;
|
||||
|
||||
GtkWidget *options_db;
|
||||
gint component_id;
|
||||
} GncPluginPageAccountTreePrivate;
|
||||
|
||||
#define GNC_PLUGIN_PAGE_ACCOUNT_TREE_GET_PRIVATE(o) \
|
||||
@ -123,6 +128,15 @@ static void gnc_plugin_page_account_tree_selection_changed_cb (GtkTreeSelection
|
||||
void gppat_populate_tmas_list(GtkToggleButton *dmrb, gpointer tmas);
|
||||
void gppat_set_insensitive_iff_rb_active(GtkToggleButton *b, GtkWidget *widget);
|
||||
|
||||
/* "Filter By" dialog callbacks */
|
||||
gboolean gnc_plugin_page_account_tree_filter_accounts(Account *account, gpointer user_data);
|
||||
void gppat_filter_hide_zero_toggled_cb (GtkToggleButton *togglebutton, GncPluginPageAccountTree *page);
|
||||
void gppat_filter_clear_all_cb (GtkWidget *button, GncPluginPageAccountTree *page);
|
||||
void gppat_filter_select_all_cb (GtkWidget *button, GncPluginPageAccountTree *page);
|
||||
void gppat_filter_select_default_cb (GtkWidget *button, GncPluginPageAccountTree *page);
|
||||
void gppat_filter_response_cb (GtkWidget *dialog, gint response, GncPluginPageAccountTree *page);
|
||||
|
||||
|
||||
/* Command callbacks */
|
||||
static void gnc_plugin_page_account_tree_cmd_new_account (GtkAction *action, GncPluginPageAccountTree *plugin_page);
|
||||
static void gnc_plugin_page_account_tree_cmd_file_hierarchy_merge (GtkAction *action, GncPluginPageAccountTree *plugin_page);
|
||||
@ -130,7 +144,7 @@ static void gnc_plugin_page_account_tree_cmd_open_account (GtkAction *action, Gn
|
||||
static void gnc_plugin_page_account_tree_cmd_open_subaccounts (GtkAction *action, GncPluginPageAccountTree *page);
|
||||
static void gnc_plugin_page_account_tree_cmd_edit_account (GtkAction *action, GncPluginPageAccountTree *page);
|
||||
static void gnc_plugin_page_account_tree_cmd_delete_account (GtkAction *action, GncPluginPageAccountTree *page);
|
||||
static void gnc_plugin_page_account_tree_cmd_view_options (GtkAction *action, GncPluginPageAccountTree *page);
|
||||
static void gnc_plugin_page_account_tree_cmd_view_filter_by (GtkAction *action, GncPluginPageAccountTree *plugin_page);
|
||||
static void gnc_plugin_page_account_tree_cmd_reconcile (GtkAction *action, GncPluginPageAccountTree *page);
|
||||
static void gnc_plugin_page_account_tree_cmd_transfer (GtkAction *action, GncPluginPageAccountTree *page);
|
||||
static void gnc_plugin_page_account_tree_cmd_stock_split (GtkAction *action, GncPluginPageAccountTree *page);
|
||||
@ -140,9 +154,6 @@ static void gnc_plugin_page_account_tree_cmd_scrub_sub (GtkAction *action, GncPl
|
||||
static void gnc_plugin_page_account_tree_cmd_scrub_all (GtkAction *action, GncPluginPageAccountTree *page);
|
||||
|
||||
|
||||
static void gnc_plugin_page_acct_tree_options_new(GncPluginPageAccountTreePrivate *priv);
|
||||
|
||||
|
||||
static guint plugin_page_signals[LAST_SIGNAL] = { 0 };
|
||||
|
||||
|
||||
@ -171,9 +182,10 @@ static GtkActionEntry gnc_plugin_page_account_tree_actions [] = {
|
||||
{ "EditDeleteAccountAction", GNC_STOCK_DELETE_ACCOUNT, N_("_Delete Account..."), NULL,
|
||||
N_("Delete selected account"),
|
||||
G_CALLBACK (gnc_plugin_page_account_tree_cmd_delete_account) },
|
||||
{ "EditAccountViewOptionsAction", GTK_STOCK_PROPERTIES, N_("Account Tree _Options..."), NULL,
|
||||
N_("Edit the account view options"),
|
||||
G_CALLBACK (gnc_plugin_page_account_tree_cmd_view_options) },
|
||||
|
||||
/* View menu */
|
||||
{ "ViewFilterByAction", NULL, N_("_Filter By..."), NULL, NULL,
|
||||
G_CALLBACK (gnc_plugin_page_account_tree_cmd_view_filter_by) },
|
||||
|
||||
/* Actions menu */
|
||||
{ "ActionsReconcileAction", NULL, N_("_Reconcile..."), NULL,
|
||||
@ -198,12 +210,6 @@ static GtkActionEntry gnc_plugin_page_account_tree_actions [] = {
|
||||
{ "ScrubAllAction", NULL, N_("Check & Repair A_ll"), NULL,
|
||||
N_("Check for and repair unbalanced transactions and orphan splits " "in all accounts"),
|
||||
G_CALLBACK (gnc_plugin_page_account_tree_cmd_scrub_all) },
|
||||
|
||||
/* Popup menu */
|
||||
|
||||
{ "PopupOptionsAction", GTK_STOCK_PROPERTIES, N_("_Options"), NULL,
|
||||
N_("Edit the account view options"),
|
||||
G_CALLBACK (gnc_plugin_page_account_tree_cmd_view_options) },
|
||||
};
|
||||
/** The number of actions provided by this plugin. */
|
||||
static guint gnc_plugin_page_account_tree_n_actions = G_N_ELEMENTS (gnc_plugin_page_account_tree_actions);
|
||||
@ -226,7 +232,6 @@ static const gchar *actions_requiring_account[] = {
|
||||
static action_toolbar_labels toolbar_labels[] = {
|
||||
{ "FileOpenAccountAction", N_("Open") },
|
||||
{ "EditEditAccountAction", N_("Edit") },
|
||||
{ "EditAccountViewOptionsAction", N_("Options") },
|
||||
{ "FileNewAccountAction", N_("New") },
|
||||
{ "EditDeleteAccountAction", N_("Delete") },
|
||||
{ NULL, NULL },
|
||||
@ -308,11 +313,6 @@ gnc_plugin_page_account_tree_init (GncPluginPageAccountTree *plugin_page)
|
||||
GtkActionGroup *action_group;
|
||||
GncPluginPageAccountTreePrivate *priv;
|
||||
GncPluginPage *parent;
|
||||
const gchar *url = NULL;
|
||||
int options_id;
|
||||
SCM find_options;
|
||||
SCM temp;
|
||||
URLType type;
|
||||
|
||||
ENTER("page %p", plugin_page);
|
||||
priv = GNC_PLUGIN_PAGE_ACCOUNT_TREE_GET_PRIVATE(plugin_page);
|
||||
@ -338,47 +338,10 @@ gnc_plugin_page_account_tree_init (GncPluginPageAccountTree *plugin_page)
|
||||
plugin_page);
|
||||
gnc_plugin_init_short_names (action_group, toolbar_labels);
|
||||
|
||||
/* Visisble types */
|
||||
priv->fd.visible_types = -1; /* Start with all types */
|
||||
priv->fd.hide_zero_total = FALSE;
|
||||
|
||||
/* get the options and the window ID */
|
||||
priv->options = SCM_BOOL_F;
|
||||
scm_gc_protect_object(priv->options);
|
||||
priv->editor_dialog = NULL;
|
||||
|
||||
if(!url) {
|
||||
gnc_plugin_page_acct_tree_options_new(priv);
|
||||
} else {
|
||||
char * location = NULL;
|
||||
char * label = NULL;
|
||||
|
||||
/* if an URL is specified, it should look like
|
||||
* gnc-acct-tree:id=17 . We want to get the number out,
|
||||
* then look up the options in the global DB. */
|
||||
type = gnc_html_parse_url(NULL, url, &location, &label);
|
||||
if (!safe_strcmp (type, URL_TYPE_ACCTTREE) &&
|
||||
location && (strlen(location) > 3) &&
|
||||
!strncmp("id=", location, 3)) {
|
||||
sscanf(location+3, "%d", &options_id);
|
||||
find_options = scm_c_eval_string("gnc:find-acct-tree-window-options");
|
||||
temp = scm_call_1(find_options, scm_int2num(options_id));
|
||||
|
||||
if(temp != SCM_BOOL_F) {
|
||||
scm_gc_unprotect_object(priv->options);
|
||||
priv->options = temp;
|
||||
scm_gc_protect_object(priv->options);
|
||||
priv->options_id = options_id;
|
||||
} else {
|
||||
gnc_plugin_page_acct_tree_options_new(priv);
|
||||
}
|
||||
} else {
|
||||
gnc_plugin_page_acct_tree_options_new(priv);
|
||||
}
|
||||
|
||||
g_free (location);
|
||||
g_free (label);
|
||||
}
|
||||
|
||||
priv->odb = gnc_option_db_new(priv->options);
|
||||
|
||||
LEAVE("page %p, priv %p, action group %p",
|
||||
plugin_page, priv, action_group);
|
||||
}
|
||||
@ -388,7 +351,6 @@ gnc_plugin_page_account_tree_finalize (GObject *object)
|
||||
{
|
||||
GncPluginPageAccountTree *page;
|
||||
GncPluginPageAccountTreePrivate *priv;
|
||||
SCM free_tree;
|
||||
|
||||
ENTER("object %p", object);
|
||||
page = GNC_PLUGIN_PAGE_ACCOUNT_TREE (object);
|
||||
@ -396,19 +358,6 @@ gnc_plugin_page_account_tree_finalize (GObject *object)
|
||||
priv = GNC_PLUGIN_PAGE_ACCOUNT_TREE_GET_PRIVATE(page);
|
||||
g_return_if_fail (priv != NULL);
|
||||
|
||||
if (priv->editor_dialog) {
|
||||
gnc_options_dialog_destroy(priv->editor_dialog);
|
||||
priv->editor_dialog = NULL;
|
||||
}
|
||||
|
||||
gnc_option_db_destroy(priv->odb);
|
||||
|
||||
free_tree = scm_c_eval_string("gnc:free-acct-tree-window");
|
||||
scm_call_1(free_tree, scm_int2num(priv->options_id));
|
||||
priv->options_id = 0;
|
||||
|
||||
scm_gc_unprotect_object(priv->options);
|
||||
|
||||
G_OBJECT_CLASS (parent_class)->finalize (object);
|
||||
LEAVE(" ");
|
||||
}
|
||||
@ -508,6 +457,10 @@ gnc_plugin_page_account_tree_create_widget (GncPluginPage *plugin_page)
|
||||
gtk_widget_show (GTK_WIDGET (tree_view));
|
||||
gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET(tree_view));
|
||||
|
||||
gnc_tree_view_account_set_filter (GNC_TREE_VIEW_ACCOUNT(tree_view),
|
||||
gnc_plugin_page_account_tree_filter_accounts,
|
||||
plugin_page, NULL);
|
||||
|
||||
priv->component_id =
|
||||
gnc_register_gui_component(PLUGIN_PAGE_ACCT_TREE_CM_CLASS,
|
||||
gnc_plugin_page_account_refresh_cb,
|
||||
@ -548,9 +501,11 @@ gnc_plugin_page_account_tree_destroy_widget (GncPluginPage *plugin_page)
|
||||
LEAVE("widget destroyed");
|
||||
}
|
||||
|
||||
#define ACCT_COUNT "Number of Open Accounts"
|
||||
#define ACCT_OPEN "Open Account %d"
|
||||
#define ACCT_SELECTED "Selected Account"
|
||||
#define ACCT_COUNT "Number of Open Accounts"
|
||||
#define ACCT_OPEN "Open Account %d"
|
||||
#define ACCT_SELECTED "Selected Account"
|
||||
#define HIDE_ZERO "Hide Zero Total"
|
||||
#define ACCT_TYPES "Account Types"
|
||||
|
||||
typedef struct foo {
|
||||
GKeyFile *key_file;
|
||||
@ -655,6 +610,9 @@ gnc_plugin_page_account_tree_save_page (GncPluginPage *plugin_page,
|
||||
account_page = GNC_PLUGIN_PAGE_ACCOUNT_TREE(plugin_page);
|
||||
priv = GNC_PLUGIN_PAGE_ACCOUNT_TREE_GET_PRIVATE(account_page);
|
||||
|
||||
g_key_file_set_integer(key_file, group_name, ACCT_TYPES, priv->fd.visible_types);
|
||||
g_key_file_set_boolean(key_file, group_name, HIDE_ZERO, priv->fd.hide_zero_total);
|
||||
|
||||
bar.key_file = key_file;
|
||||
bar.group_name = group_name;
|
||||
bar.count = 0;
|
||||
@ -736,6 +694,7 @@ gnc_plugin_page_account_tree_recreate_page (GtkWidget *window,
|
||||
GError *error = NULL;
|
||||
gchar *key, *value;
|
||||
gint i, count;
|
||||
gboolean hide;
|
||||
|
||||
g_return_val_if_fail(key_file, NULL);
|
||||
g_return_val_if_fail(group_name, NULL);
|
||||
@ -749,27 +708,47 @@ gnc_plugin_page_account_tree_recreate_page (GtkWidget *window,
|
||||
/* Install it now so we can them manipulate the created widget */
|
||||
gnc_main_window_open_page(GNC_MAIN_WINDOW(window), page);
|
||||
|
||||
/* Expanded accounts */
|
||||
count = g_key_file_get_integer(key_file, group_name, ACCT_COUNT, &error);
|
||||
/* Filter information. Ignore missing keys. */
|
||||
hide = g_key_file_get_boolean(key_file, group_name, HIDE_ZERO, &error);
|
||||
if (error) {
|
||||
g_warning("error reading group %s key %s: %s",
|
||||
group_name, HIDE_ZERO, error->message);
|
||||
g_error_free(error);
|
||||
error = NULL;
|
||||
hide = FALSE;
|
||||
}
|
||||
priv->fd.hide_zero_total = hide;
|
||||
|
||||
i = g_key_file_get_integer(key_file, group_name, ACCT_TYPES, &error);
|
||||
if (error) {
|
||||
g_warning("error reading group %s key %s: %s",
|
||||
group_name, ACCT_TYPES, error->message);
|
||||
g_error_free(error);
|
||||
error = NULL;
|
||||
i = -1;
|
||||
}
|
||||
priv->fd.visible_types = i;
|
||||
|
||||
/* Expanded accounts. Skip if count key missing. */
|
||||
count = g_key_file_get_integer(key_file, group_name, ACCT_COUNT, &error);
|
||||
if (error == NULL) {
|
||||
for (i = 1; i <= count; i++) {
|
||||
key = g_strdup_printf(ACCT_OPEN, i);
|
||||
value = g_key_file_get_string(key_file, group_name, key, &error);
|
||||
if (error) {
|
||||
g_warning("error reading group %s key %s: %s",
|
||||
group_name, key, error->message);
|
||||
g_error_free(error);
|
||||
error = NULL;
|
||||
} else {
|
||||
tree_restore_expanded_row(priv->tree_view, value);
|
||||
g_free(value);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
g_warning("error reading group %s key %s: %s",
|
||||
group_name, ACCT_COUNT, error->message);
|
||||
g_error_free(error);
|
||||
LEAVE("bad value");
|
||||
return page;
|
||||
}
|
||||
for (i = 1; i <= count; i++) {
|
||||
key = g_strdup_printf(ACCT_OPEN, i);
|
||||
value = g_key_file_get_string(key_file, group_name, key, &error);
|
||||
if (error) {
|
||||
g_warning("error reading group %s key %s: %s",
|
||||
group_name, key, error->message);
|
||||
g_error_free(error);
|
||||
error = NULL;
|
||||
} else {
|
||||
tree_restore_expanded_row(priv->tree_view, value);
|
||||
g_free(value);
|
||||
}
|
||||
}
|
||||
|
||||
/* Selected account (if any) */
|
||||
@ -778,6 +757,10 @@ gnc_plugin_page_account_tree_recreate_page (GtkWidget *window,
|
||||
tree_restore_selected_row(priv->tree_view, value);
|
||||
g_free(value);
|
||||
}
|
||||
|
||||
/* Update tree view for any changes */
|
||||
gnc_tree_view_account_refilter(GNC_TREE_VIEW_ACCOUNT(priv->tree_view));
|
||||
|
||||
LEAVE(" ");
|
||||
return page;
|
||||
}
|
||||
@ -813,6 +796,7 @@ gnc_plugin_page_account_tree_double_click_cb (GtkTreeView *treeview,
|
||||
GtkTreeViewColumn *col,
|
||||
GncPluginPageAccountTree *page)
|
||||
{
|
||||
GncPluginPageAccountTreePrivate *priv;
|
||||
GtkWidget *window;
|
||||
GncPluginPage *new_page;
|
||||
Account *account;
|
||||
@ -822,6 +806,7 @@ gnc_plugin_page_account_tree_double_click_cb (GtkTreeView *treeview,
|
||||
if (account == NULL)
|
||||
return;
|
||||
|
||||
priv = GNC_PLUGIN_PAGE_ACCOUNT_TREE_GET_PRIVATE(page);
|
||||
window = GNC_PLUGIN_PAGE (page)->window;
|
||||
new_page = gnc_plugin_page_register_new (account, FALSE);
|
||||
gnc_main_window_open_page (GNC_MAIN_WINDOW(window), new_page);
|
||||
@ -1307,90 +1292,272 @@ gnc_plugin_page_account_tree_cmd_delete_account (GtkAction *action, GncPluginPag
|
||||
g_free(acct_name);
|
||||
}
|
||||
|
||||
/******************************/
|
||||
/* Options Dialog */
|
||||
/******************************/
|
||||
|
||||
static void
|
||||
gnc_plugin_page_account_tree_options_apply_cb (GNCOptionWin * propertybox,
|
||||
gpointer user_data)
|
||||
{
|
||||
GncPluginPageAccountTreePrivate *priv = user_data;
|
||||
if(!priv)
|
||||
return;
|
||||
|
||||
ENTER(" ");
|
||||
gnc_option_db_commit(priv->odb);
|
||||
LEAVE(" ");
|
||||
}
|
||||
|
||||
static void
|
||||
gnc_plugin_page_account_tree_options_help_cb (GNCOptionWin * propertybox,
|
||||
gpointer user_data)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
|
||||
dialog = gtk_message_dialog_new (NULL,
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_INFO,
|
||||
GTK_BUTTONS_OK,
|
||||
"Set the account tree options you want using this dialog.");
|
||||
|
||||
gtk_dialog_run (GTK_DIALOG (dialog));
|
||||
gtk_widget_destroy (dialog);
|
||||
}
|
||||
|
||||
static void
|
||||
gnc_plugin_page_account_tree_options_close_cb (GNCOptionWin * propertybox,
|
||||
gpointer user_data)
|
||||
{
|
||||
GncPluginPageAccountTreePrivate *priv = user_data;
|
||||
if(!priv)
|
||||
return;
|
||||
|
||||
gnc_options_dialog_destroy(priv->editor_dialog);
|
||||
priv->editor_dialog = NULL;
|
||||
}
|
||||
|
||||
static void
|
||||
gnc_plugin_page_acct_tree_options_new (GncPluginPageAccountTreePrivate *priv)
|
||||
{
|
||||
SCM func, opts_and_id;
|
||||
|
||||
scm_gc_unprotect_object(priv->options);
|
||||
func = scm_c_eval_string("gnc:make-new-acct-tree-window");
|
||||
opts_and_id = scm_call_0(func);
|
||||
priv->options = SCM_CAR(opts_and_id);
|
||||
scm_gc_protect_object(priv->options);
|
||||
priv->options_id = scm_num2int(SCM_CDR(opts_and_id), SCM_ARG1, __FUNCTION__);
|
||||
}
|
||||
|
||||
/*********************/
|
||||
|
||||
static void
|
||||
gnc_plugin_page_account_tree_cmd_view_options (GtkAction *action, GncPluginPageAccountTree *page)
|
||||
/** This function tells the account tree view whether or not to filter
|
||||
* out a particular account. Accounts may be filtered if the user
|
||||
* has decided not to display that particular account type, or if the
|
||||
* user has requested taht accoutns with a zero total not be shown.
|
||||
*
|
||||
* @param account The account that was toggled.
|
||||
*
|
||||
* @param user_data A pointer to the account tree page.
|
||||
*
|
||||
* @return TRUE if the account should be visible. FALSE if the
|
||||
* account should be hidden. */
|
||||
gboolean
|
||||
gnc_plugin_page_account_tree_filter_accounts (Account *account, gpointer user_data)
|
||||
{
|
||||
|
||||
GncPluginPageAccountTree *page = user_data;
|
||||
GncPluginPageAccountTreePrivate *priv;
|
||||
GNCAccountType acct_type;
|
||||
gnc_numeric total;
|
||||
gboolean result;
|
||||
|
||||
g_return_val_if_fail(GNC_IS_PLUGIN_PAGE_ACCOUNT_TREE(page), TRUE);
|
||||
|
||||
ENTER("account %p:%s, page %p", account, xaccAccountGetName(account), page);
|
||||
|
||||
priv = GNC_PLUGIN_PAGE_ACCOUNT_TREE_GET_PRIVATE(page);
|
||||
if (priv->fd.hide_zero_total) {
|
||||
total = xaccAccountGetBalanceInCurrency (account, NULL, TRUE);
|
||||
if (gnc_numeric_zero_p(total)) {
|
||||
LEAVE(" hide: zero balance");
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
acct_type = xaccAccountGetType(account);
|
||||
result = (priv->fd.visible_types & (1 << acct_type)) ? TRUE : FALSE;
|
||||
LEAVE(" %s", result ? "show" : "hide");
|
||||
return result;
|
||||
}
|
||||
|
||||
/** The "hide zero totals" button in the Filter dialog changed state.
|
||||
* Update the page to reflect these changes.
|
||||
*
|
||||
* @param button The GtkCheckButton that was toggled.
|
||||
*
|
||||
* @param page A pointer to the account tree page to update. */
|
||||
void
|
||||
gppat_filter_hide_zero_toggled_cb (GtkToggleButton *button,
|
||||
GncPluginPageAccountTree *page)
|
||||
{
|
||||
GncPluginPageAccountTreePrivate *priv;
|
||||
|
||||
g_return_if_fail (GNC_IS_PLUGIN_PAGE_ACCOUNT_TREE (page));
|
||||
priv = GNC_PLUGIN_PAGE_ACCOUNT_TREE_GET_PRIVATE(page);
|
||||
g_return_if_fail(GTK_IS_TOGGLE_BUTTON(button));
|
||||
g_return_if_fail(GNC_IS_PLUGIN_PAGE_ACCOUNT_TREE(page));
|
||||
|
||||
if (!priv->editor_dialog) {
|
||||
priv->editor_dialog = gnc_options_dialog_new(_("Account Tree Options"));
|
||||
gnc_build_options_dialog_contents(priv->editor_dialog,
|
||||
priv->odb);
|
||||
|
||||
gnc_options_dialog_set_apply_cb(priv->editor_dialog,
|
||||
gnc_plugin_page_account_tree_options_apply_cb,
|
||||
priv);
|
||||
gnc_options_dialog_set_help_cb(priv->editor_dialog,
|
||||
gnc_plugin_page_account_tree_options_help_cb,
|
||||
priv);
|
||||
gnc_options_dialog_set_close_cb(priv->editor_dialog,
|
||||
gnc_plugin_page_account_tree_options_close_cb,
|
||||
priv);
|
||||
ENTER("button %p, page %p", button, page);
|
||||
priv = GNC_PLUGIN_PAGE_ACCOUNT_TREE_GET_PRIVATE(page);
|
||||
priv->fd.hide_zero_total = gtk_toggle_button_get_active(button);
|
||||
gnc_tree_view_account_refilter(GNC_TREE_VIEW_ACCOUNT(priv->tree_view));
|
||||
LEAVE("hide_zero %d", priv->fd.hide_zero_total);
|
||||
}
|
||||
|
||||
/** The "clear all account types" button in the Filter dialog was
|
||||
* clicked. Clear all account types shown, and update the visible
|
||||
* page.
|
||||
*
|
||||
* @param button The button that was clicked.
|
||||
*
|
||||
* @param page A pointer to the account tree page to update. */
|
||||
void
|
||||
gppat_filter_clear_all_cb (GtkWidget *button,
|
||||
GncPluginPageAccountTree *page)
|
||||
{
|
||||
GncPluginPageAccountTreePrivate *priv;
|
||||
GtkTreeSelection *selection;
|
||||
GtkTreeView *view;
|
||||
|
||||
g_return_if_fail(GTK_IS_BUTTON(button));
|
||||
g_return_if_fail(GNC_IS_PLUGIN_PAGE_ACCOUNT_TREE(page));
|
||||
|
||||
ENTER("button %p, page %p", button, page);
|
||||
priv = GNC_PLUGIN_PAGE_ACCOUNT_TREE_GET_PRIVATE(page);
|
||||
view = GTK_TREE_VIEW(gnc_glade_lookup_widget(button, FILTER_TREE_VIEW));
|
||||
selection = gtk_tree_view_get_selection(view);
|
||||
g_signal_handler_block(selection, priv->fd.selection_changed_cb_id);
|
||||
priv->fd.visible_types = 0;
|
||||
gnc_tree_model_account_types_set_selection(view, priv->fd.visible_types);
|
||||
g_signal_handler_unblock(selection, priv->fd.selection_changed_cb_id);
|
||||
gnc_tree_view_account_refilter(GNC_TREE_VIEW_ACCOUNT(priv->tree_view));
|
||||
LEAVE("types 0x%x", priv->fd.visible_types);
|
||||
}
|
||||
|
||||
/** The "select all account types" button in the Filter dialog was
|
||||
* clicked. Make all account types visible, and update the page.
|
||||
*
|
||||
* @param button The button that was clicked.
|
||||
*
|
||||
* @param page A pointer to the account tree page to update. */
|
||||
void
|
||||
gppat_filter_select_all_cb (GtkWidget *button,
|
||||
GncPluginPageAccountTree *page)
|
||||
{
|
||||
GncPluginPageAccountTreePrivate *priv;
|
||||
GtkTreeSelection *selection;
|
||||
GtkTreeView *view;
|
||||
|
||||
g_return_if_fail(GTK_IS_BUTTON(button));
|
||||
g_return_if_fail(GNC_IS_PLUGIN_PAGE_ACCOUNT_TREE(page));
|
||||
|
||||
ENTER("button %p, page %p", button, page);
|
||||
priv = GNC_PLUGIN_PAGE_ACCOUNT_TREE_GET_PRIVATE(page);
|
||||
view = GTK_TREE_VIEW(gnc_glade_lookup_widget(button, FILTER_TREE_VIEW));
|
||||
selection = gtk_tree_view_get_selection(view);
|
||||
g_signal_handler_block(selection, priv->fd.selection_changed_cb_id);
|
||||
priv->fd.visible_types = -1;
|
||||
gnc_tree_model_account_types_set_selection(view, priv->fd.visible_types);
|
||||
g_signal_handler_unblock(selection, priv->fd.selection_changed_cb_id);
|
||||
gnc_tree_view_account_refilter(GNC_TREE_VIEW_ACCOUNT(priv->tree_view));
|
||||
LEAVE("types 0x%x", priv->fd.visible_types);
|
||||
}
|
||||
|
||||
/** The "select default account types" button in the Filter dialog was
|
||||
* clicked. Set all account types to their default visibility (which
|
||||
* happens to be visible for all of them), and update the page.
|
||||
*
|
||||
* @param button The button that was clicked.
|
||||
*
|
||||
* @param page A pointer to the account tree page to update. */
|
||||
void
|
||||
gppat_filter_select_default_cb (GtkWidget *button,
|
||||
GncPluginPageAccountTree *page)
|
||||
{
|
||||
ENTER("button %p, page %p", button, page);
|
||||
gppat_filter_select_all_cb(button, page);
|
||||
LEAVE(" ");
|
||||
}
|
||||
|
||||
/** The account type selection in the Filter dialog was changed.
|
||||
* Reread the set of selected (i.e. visible) accounts and update the
|
||||
* page.
|
||||
*
|
||||
* @param button The button that was clicked.
|
||||
*
|
||||
* @param page A pointer to the account tree page to update. */
|
||||
static void
|
||||
gppat_filter_selection_changed_cb (GtkTreeSelection *selection,
|
||||
GncPluginPageAccountTree *page)
|
||||
{
|
||||
GncPluginPageAccountTreePrivate *priv;
|
||||
GtkTreeView *view;
|
||||
|
||||
g_return_if_fail(GTK_IS_TREE_SELECTION(selection));
|
||||
g_return_if_fail(GNC_IS_PLUGIN_PAGE_ACCOUNT_TREE(page));
|
||||
|
||||
ENTER("selection %p, page %p", selection, page);
|
||||
priv = GNC_PLUGIN_PAGE_ACCOUNT_TREE_GET_PRIVATE(page);
|
||||
view = gtk_tree_selection_get_tree_view(selection);
|
||||
priv->fd.visible_types = gnc_tree_model_account_types_get_selection(view);
|
||||
gnc_tree_view_account_refilter(GNC_TREE_VIEW_ACCOUNT(priv->tree_view));
|
||||
LEAVE("types 0x%x", priv->fd.visible_types);
|
||||
}
|
||||
|
||||
/** The Filter dialog was closed. CHeck to see if this was done via
|
||||
* the OK button. If so, make the changes permanent. If not, revert
|
||||
* any changes.
|
||||
*
|
||||
* @param dialog A pointer to the "Filter By" dialog.
|
||||
*
|
||||
* @param response The response code from closing the dialog.
|
||||
*
|
||||
* @param page A pointer to the account tree page to update. */
|
||||
void
|
||||
gppat_filter_response_cb (GtkWidget *dialog,
|
||||
gint response,
|
||||
GncPluginPageAccountTree *page)
|
||||
{
|
||||
GncPluginPageAccountTreePrivate *priv;
|
||||
GtkWidget *view;
|
||||
guint32 types;
|
||||
|
||||
g_return_if_fail(GTK_IS_DIALOG(dialog));
|
||||
g_return_if_fail(GNC_IS_PLUGIN_PAGE_ACCOUNT_TREE(page));
|
||||
|
||||
ENTER("dialog %p, response %d, page %p", dialog, response, page);
|
||||
view = gnc_glade_lookup_widget(dialog, FILTER_TREE_VIEW);
|
||||
|
||||
priv = GNC_PLUGIN_PAGE_ACCOUNT_TREE_GET_PRIVATE(page);
|
||||
if (response != GTK_RESPONSE_OK) {
|
||||
priv->fd.visible_types = priv->fd.original_visible_types;
|
||||
priv->fd.hide_zero_total = priv->fd.original_hide_zero_total;
|
||||
gnc_tree_view_account_refilter(GNC_TREE_VIEW_ACCOUNT(priv->tree_view));
|
||||
}
|
||||
gtk_window_present(GTK_WINDOW(gnc_options_dialog_widget(priv->editor_dialog)));
|
||||
types = gnc_tree_model_account_types_get_selection(GTK_TREE_VIEW(view));
|
||||
|
||||
/* Clean up and delete dialog */
|
||||
priv->fd.selection_changed_cb_id = 0;
|
||||
g_atomic_pointer_compare_and_exchange((gpointer *)&priv->fd.dialog,
|
||||
dialog, NULL);
|
||||
gtk_widget_destroy(dialog);
|
||||
LEAVE("types 0x%x", types);
|
||||
}
|
||||
|
||||
static void
|
||||
gnc_plugin_page_account_tree_cmd_view_filter_by (GtkAction *action,
|
||||
GncPluginPageAccountTree *page)
|
||||
{
|
||||
GncPluginPageAccountTreePrivate *priv;
|
||||
GtkWidget *dialog, *button;
|
||||
GtkTreeView *view;
|
||||
GtkTreeSelection *selection;
|
||||
GladeXML *xml;
|
||||
gchar *title;
|
||||
|
||||
g_return_if_fail(GNC_IS_PLUGIN_PAGE_ACCOUNT_TREE(page));
|
||||
ENTER("(action %p, page %p)", action, page);
|
||||
|
||||
priv = GNC_PLUGIN_PAGE_ACCOUNT_TREE_GET_PRIVATE(page);
|
||||
if (priv->fd.dialog) {
|
||||
gtk_window_present(GTK_WINDOW(priv->fd.dialog));
|
||||
LEAVE("existing dialog");
|
||||
return;
|
||||
}
|
||||
|
||||
/* Create the dialog */
|
||||
xml = gnc_glade_xml_new ("account.glade", "Filter By");
|
||||
dialog = glade_xml_get_widget (xml, "Filter By");
|
||||
priv->fd.dialog = dialog;
|
||||
gtk_window_set_transient_for(GTK_WINDOW(dialog),
|
||||
GTK_WINDOW(GNC_PLUGIN_PAGE(page)->window));
|
||||
/* Translators: The %s is the name of the plugin page */
|
||||
title = g_strdup_printf(_("Filter %s by..."),
|
||||
gnc_plugin_page_get_page_name(GNC_PLUGIN_PAGE(page)));
|
||||
gtk_window_set_title(GTK_WINDOW(dialog), title);
|
||||
g_free(title);
|
||||
|
||||
/* Remember current state */
|
||||
priv->fd.original_visible_types = priv->fd.visible_types;
|
||||
priv->fd.original_hide_zero_total = priv->fd.hide_zero_total;
|
||||
|
||||
/* Update the dialog widgets for the current state */
|
||||
button = glade_xml_get_widget (xml, "hide_zero");
|
||||
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button),
|
||||
priv->fd.hide_zero_total);
|
||||
|
||||
view = GTK_TREE_VIEW(glade_xml_get_widget (xml, FILTER_TREE_VIEW));
|
||||
priv->fd.model = gnc_tree_model_account_types_master();
|
||||
gtk_tree_view_set_model(view, priv->fd.model);
|
||||
gtk_tree_view_insert_column_with_attributes
|
||||
(view,
|
||||
-1, _("Account Types"), gtk_cell_renderer_text_new(),
|
||||
"text", GNC_TREE_MODEL_ACCOUNT_TYPES_COL_NAME, NULL);
|
||||
selection = gtk_tree_view_get_selection(view);
|
||||
gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
|
||||
gnc_tree_model_account_types_set_selection(view, priv->fd.visible_types);
|
||||
priv->fd.selection_changed_cb_id =
|
||||
g_signal_connect(G_OBJECT(selection), "changed",
|
||||
G_CALLBACK(gppat_filter_selection_changed_cb), page);
|
||||
|
||||
/* Wire up the rest of the callbacks */
|
||||
glade_xml_signal_autoconnect_full(xml, gnc_glade_autoconnect_full_func, page);
|
||||
|
||||
/* Show it */
|
||||
gtk_widget_show_all(dialog);
|
||||
LEAVE(" ");
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -19,7 +19,6 @@
|
||||
<menuitem name="EditEditAccount" action="EditEditAccountAction"/>
|
||||
<menuitem name="EditDeleteAccount" action="EditDeleteAccountAction"/>
|
||||
</placeholder>
|
||||
<menuitem name="EditAccountViewOptions" action="EditAccountViewOptionsAction"/>
|
||||
</menu>
|
||||
<menu name="Actions" action="ActionsAction">
|
||||
<placeholder name="ActionsPlaceholder">
|
||||
@ -39,9 +38,6 @@
|
||||
</menubar>
|
||||
|
||||
<popup name="MainPopup" action="FakeToplevel">
|
||||
<placeholder name="PopupPlaceholder1">
|
||||
<menuitem name="PopupOptions" action="PopupOptionsAction"/>
|
||||
</placeholder>
|
||||
<placeholder name="PopupPlaceholder2">
|
||||
<menuitem name="AccountOpenAccount" action="FileOpenAccountAction"/>
|
||||
<menuitem name="AccountOpenSubaccounts" action="FileOpenSubaccountsAction"/>
|
||||
@ -71,8 +67,6 @@
|
||||
<toolitem name="ToolbarOpenAccount" action="FileOpenAccountAction"/>
|
||||
<toolitem name="ToolbarEditAccount" action="EditEditAccountAction"/>
|
||||
<separator name="ToolbarSep3"/>
|
||||
<toolitem name="ToolbarAccountViewOptions" action="EditAccountViewOptionsAction"/>
|
||||
<separator name="ToolbarSep4"/>
|
||||
<toolitem name="ToolbarNewAccount" action="FileNewAccountAction"/>
|
||||
<toolitem name="ToolbarDeleteAccount" action="EditDeleteAccountAction"/>
|
||||
</placeholder>
|
||||
|
@ -20,77 +20,6 @@
|
||||
;; Boston, MA 02110-1301, USA gnu@gnu.org
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; account tree options
|
||||
;; like reports, we have an integer tree id that is the index into a
|
||||
;; global hash table, and URLs of the form gnc-acct-tree:id=%d will
|
||||
;; open to the right window.
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
(define gnc:*acct-tree-options* (make-hash-table 11))
|
||||
(define gnc:*acct-tree-id* 0)
|
||||
|
||||
(define (gnc:find-acct-tree-window-options id)
|
||||
(hash-ref gnc:*acct-tree-options* id))
|
||||
|
||||
(define (gnc:make-acct-tree-window-options)
|
||||
(let* ((options (gnc:new-options))
|
||||
(add-option
|
||||
(lambda (opt)
|
||||
(gnc:register-option options opt))))
|
||||
|
||||
(add-option
|
||||
(gnc:make-simple-boolean-option
|
||||
(N_ "Account Tree") (N_ "Double click expands parent accounts")
|
||||
"a" (N_ "Double clicking on an account with children expands \
|
||||
the account instead of opening a register.") #f))
|
||||
|
||||
(add-option
|
||||
(gnc:make-list-option
|
||||
(N_ "Account Tree") (N_ "Account types to display")
|
||||
"b" (N_ "Select the account types that should be displayed.")
|
||||
(list 'bank 'cash 'credit 'asset 'liability 'stock
|
||||
'mutual 'currency 'income 'expense 'equity 'payable 'receivable)
|
||||
(list (list->vector (list 'bank (N_ "Bank") ""))
|
||||
(list->vector (list 'cash (N_ "Cash") ""))
|
||||
(list->vector (list 'credit (N_ "Credit") ""))
|
||||
(list->vector (list 'asset (N_ "Asset") ""))
|
||||
(list->vector (list 'liability (N_ "Liability") ""))
|
||||
(list->vector (list 'stock (N_ "Stock") ""))
|
||||
(list->vector (list 'mutual (N_ "Mutual Fund") ""))
|
||||
(list->vector (list 'currency (N_ "Currency") ""))
|
||||
(list->vector (list 'income (N_ "Income") ""))
|
||||
(list->vector (list 'expense (N_ "Expense") ""))
|
||||
(list->vector (list 'equity (N_ "Equity") ""))
|
||||
(list->vector (list 'payable (N_ "Accounts Payable") ""))
|
||||
(list->vector (list 'receivable (N_ "Accounts Receivable") "")))))
|
||||
|
||||
options))
|
||||
|
||||
(define (gnc:make-new-acct-tree-window)
|
||||
(let ((options (gnc:make-acct-tree-window-options))
|
||||
(id gnc:*acct-tree-id*))
|
||||
(hash-set! gnc:*acct-tree-options* id options)
|
||||
(set! gnc:*acct-tree-id* (+ 1 id))
|
||||
(cons options id)))
|
||||
|
||||
(define (gnc:free-acct-tree-window id)
|
||||
(hash-remove! gnc:*acct-tree-options* id))
|
||||
|
||||
|
||||
(define (gnc:acct-tree-generate-restore-forms optobj id)
|
||||
(string-append
|
||||
";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
|
||||
(simple-format #f ";; options for account tree id=~S\n" id)
|
||||
"(let ((options (gnc:make-acct-tree-window-options)))\n"
|
||||
(gnc:generate-restore-forms optobj "options")
|
||||
(simple-format
|
||||
#f " (hash-set! gnc:*acct-tree-options* ~A options)\n" id)
|
||||
" \""
|
||||
(gnc:html-build-url gnc:url-type-accttree (sprintf #f "%a" id) #f)
|
||||
"\")\n\n"))
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; book open and close hooks for mdi
|
||||
;;
|
||||
@ -113,11 +42,6 @@ the account instead of opening a register.") #f))
|
||||
(display (gnc:report-generate-restore-forms v))))
|
||||
#t *gnc:_reports_*)
|
||||
|
||||
(hash-fold
|
||||
(lambda (k v p)
|
||||
(display (gnc:acct-tree-generate-restore-forms v k)) #t)
|
||||
#t gnc:*acct-tree-options*)
|
||||
|
||||
(force-output)))
|
||||
))))
|
||||
|
||||
|
@ -76,9 +76,6 @@
|
||||
(export gnc:load-help-topics)
|
||||
|
||||
;; from main-window.scm
|
||||
(export gnc:find-acct-tree-window-options)
|
||||
(export gnc:make-new-acct-tree-window)
|
||||
(export gnc:free-acct-tree-window)
|
||||
(export gnc:main-window-save-state)
|
||||
(export gnc:main-window-properties-cb)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user