r15642 - gnucash/trunk/src - Factor the sx-list tree view out and promote into an GncTreeViewSxList as a subclass of GncTreeView.
Josh Sled
jsled at cvs.gnucash.org
Wed Feb 21 21:21:01 EST 2007
Author: jsled
Date: 2007-02-21 21:20:56 -0500 (Wed, 21 Feb 2007)
New Revision: 15642
Trac: http://svn.gnucash.org/trac/changeset/15642
Added:
gnucash/trunk/src/gnome-utils/gnc-sx-list-tree-model-adapter.c
gnucash/trunk/src/gnome-utils/gnc-sx-list-tree-model-adapter.h
gnucash/trunk/src/gnome-utils/gnc-tree-view-sx-list.c
gnucash/trunk/src/gnome-utils/gnc-tree-view-sx-list.h
Removed:
gnucash/trunk/src/gnome/gnc-sx-list-tree-model-adapter.c
gnucash/trunk/src/gnome/gnc-sx-list-tree-model-adapter.h
Modified:
gnucash/trunk/src/doc/sx.rst
gnucash/trunk/src/gnome-utils/Makefile.am
gnucash/trunk/src/gnome/Makefile.am
gnucash/trunk/src/gnome/glade/sched-xact.glade
gnucash/trunk/src/gnome/gnc-plugin-page-sx-list.c
Log:
Factor the sx-list tree view out and promote into an GncTreeViewSxList as a subclass of GncTreeView.
Move the gnc-sx-list-tree-model-adapter into gnome-utils to accomodate.
Modified: gnucash/trunk/src/doc/sx.rst
===================================================================
--- gnucash/trunk/src/doc/sx.rst 2007-02-21 19:50:31 UTC (rev 15641)
+++ gnucash/trunk/src/doc/sx.rst 2007-02-22 02:20:56 UTC (rev 15642)
@@ -3,20 +3,6 @@
Scheduled Transactions
===============================================================
-Overview
---------------
-
-- SX List
- - CRUD operations on SXes
- - Show Next "year"s worth of enabled and disabled SX instances
- - gnc_sx_get_instances({now + 1yr}, TRUE)
-
-- SX Editor
-
-- SinceLastRun
- - Last .. present (+ create-in-advance, reminder) enabled instances
- - gnc_sx_get_instances(now, FALSE)
-
TODO
----------
@@ -78,10 +64,10 @@
.. _[ve20070209]: http://lists.gnucash.org/pipermail/gnucash-devel/2007-February/019834.html
- sx list page
-! - [ ] use gnc-tree-view?
- [/] make into split panel
- [ ] fix slider position
- [ ] {0, 1, 2, 4, 8, 12} month selection for dense calendar
+! - [x] use gnc-tree-view
! - [x] save/restore state
- sx editor
@@ -132,6 +118,8 @@
- [x] remove biweekly page (-> weekly)
- [x] remove > monthly pages (-> monthly)
- [x] clean up, reformat source
+ - gnc-plugin-page-sx-list
+ - [ ] gnc_plugin_page_sx_list_cmd_new
- dialog-sx-editor
- [x] gnc_sxed_check_changed
- [x] gnc_sxed_check_consistent
Modified: gnucash/trunk/src/gnome/Makefile.am
===================================================================
--- gnucash/trunk/src/gnome/Makefile.am 2007-02-21 19:50:31 UTC (rev 15641)
+++ gnucash/trunk/src/gnome/Makefile.am 2007-02-22 02:20:56 UTC (rev 15642)
@@ -48,7 +48,6 @@
gnc-plugin-page-sx-list.c \
gnc-plugin-page-register.c \
gnc-split-reg.c \
- gnc-sx-list-tree-model-adapter.c \
lot-viewer.c \
reconcile-list.c \
top-level.c \
@@ -86,7 +85,6 @@
gnc-plugin-page-sx-list.h \
gnc-plugin-page-register.h \
gnc-split-reg.h \
- gnc-sx-list-tree-model-adapter.h \
lot-viewer.h \
reconcile-list.h \
top-level.h \
Modified: gnucash/trunk/src/gnome/glade/sched-xact.glade
===================================================================
--- gnucash/trunk/src/gnome/glade/sched-xact.glade 2007-02-21 19:50:31 UTC (rev 15641)
+++ gnucash/trunk/src/gnome/glade/sched-xact.glade 2007-02-22 02:20:56 UTC (rev 15642)
@@ -5579,13 +5579,13 @@
<property name="right_padding">0</property>
<child>
- <widget class="GtkHBox" id="hbox123">
+ <widget class="GtkHBox" id="hbox">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">12</property>
<child>
- <widget class="GtkScrolledWindow" id="scrolledwindow1">
+ <widget class="GtkScrolledWindow" id="sx-list-tree-view-container">
<property name="visible">True</property>
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
@@ -5593,14 +5593,7 @@
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
<child>
- <widget class="GtkTreeView" id="sx_list">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="headers_visible">True</property>
- <property name="rules_hint">False</property>
- <property name="reorderable">True</property>
- <property name="enable_search">True</property>
- </widget>
+ <placeholder/>
</child>
</widget>
<packing>
Modified: gnucash/trunk/src/gnome/gnc-plugin-page-sx-list.c
===================================================================
--- gnucash/trunk/src/gnome/gnc-plugin-page-sx-list.c 2007-02-21 19:50:31 UTC (rev 15641)
+++ gnucash/trunk/src/gnome/gnc-plugin-page-sx-list.c 2007-02-22 02:20:56 UTC (rev 15642)
@@ -45,6 +45,7 @@
#include "gnc-glib-utils.h"
#include "gnc-icons.h"
#include "gnc-plugin-page-sx-list.h"
+#include "gnc-tree-view-sx-list.h"
#include "gnc-sx-instance-model.h"
#include "gnc-sx-instance-dense-cal-adapter.h"
#include "gnc-sx-list-tree-model-adapter.h"
@@ -57,10 +58,10 @@
#include "dialog-sx-editor.h"
/* This static indicates the debugging module that this .o belongs to. */
-static QofLogModule log_module = "gnc.gui.plugin-page";
-
+#define LOG_MOD "gnc.gui.plugin-page.sx-list"
+static QofLogModule log_module = LOG_MOD
#undef G_LOG_DOMAIN
-#define G_LOG_DOMAIN "gnc.gui.plugin-page.sx-list"
+#define G_LOG_DOMAIN LOG_MOD
#define PLUGIN_PAGE_SX_LIST_CM_CLASS "plugin-page-sx-list"
#define GCONF_SECTION "window/pages/sx_list"
@@ -77,7 +78,6 @@
GncDenseCal* gdcal;
GncSxInstanceModel* instances;
- GncSxListTreeModelAdapter* tree_model;
GtkTreeView* tree_view;
} GncPluginPageSxListPrivate;
@@ -102,13 +102,11 @@
static void gppsl_row_activated_cb(GtkTreeView *tree_view, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data);
-/* Callbacks */
static void gnc_plugin_page_sx_list_cmd_new(GtkAction *action, GncPluginPageSxList *page);
static void gnc_plugin_page_sx_list_cmd_edit(GtkAction *action, GncPluginPageSxList *page);
static void gnc_plugin_page_sx_list_cmd_delete(GtkAction *action, GncPluginPageSxList *page);
/* Command callbacks */
-
static GtkActionEntry gnc_plugin_page_sx_list_actions [] = {
{ "SxListAction", NULL, N_("Scheduled"), NULL, NULL, NULL },
{ "SxListNewAction", GNC_STOCK_NEW_ACCOUNT, N_("New"), NULL,
@@ -193,10 +191,7 @@
"ui-description", "gnc-plugin-page-sx-list-ui.xml",
NULL);
- /* change me when the system supports multiple books */
gnc_plugin_page_add_book(parent, gnc_get_current_book());
-
- /* Create menu and toolbar information */
action_group =
gnc_plugin_page_create_action_group(parent,
"GncPluginPageSxListActions");
@@ -225,8 +220,6 @@
priv->dense_cal_model = NULL;
gtk_widget_unref(GTK_WIDGET(priv->gdcal));
priv->gdcal = NULL;
- g_object_unref(G_OBJECT(priv->tree_model));
- priv->tree_model = NULL;
g_object_unref(G_OBJECT(priv->instances));
priv->instances = NULL;
@@ -244,9 +237,6 @@
priv = GNC_PLUGIN_PAGE_SX_LIST_GET_PRIVATE(page);
g_return_if_fail(priv != NULL);
- // by virtue of being a g_type_instance_..._private, does the private
- // data get freed somewhere else?
-
G_OBJECT_CLASS (parent_class)->finalize (object);
}
@@ -311,7 +301,7 @@
priv->widget = glade_xml_get_widget(priv->gxml, "sx-list-vbox");
{
- //gint half_way;
+ // gint half_way;
// half_way = plugin_page->notebook_page->allocation.height * 0.5;
// fixme; get a real value:
gtk_paned_set_position(GTK_PANED(priv->widget), 160);
@@ -334,43 +324,20 @@
}
{
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
+ GtkContainer *tree_view_container;
GtkTreeSelection *selection;
- priv->tree_model = gnc_sx_list_tree_model_adapter_new(priv->instances);
- priv->tree_view = GTK_TREE_VIEW(glade_xml_get_widget(priv->gxml, "sx_list"));
- gtk_tree_view_set_model(priv->tree_view, GTK_TREE_MODEL(priv->tree_model));
+ tree_view_container = GTK_CONTAINER(glade_xml_get_widget(priv->gxml, "sx-list-tree-view-container"));
+ priv->tree_view = GTK_TREE_VIEW(gnc_tree_view_sx_list_new(priv->instances));
+ g_object_set(G_OBJECT(priv->tree_view),
+ "gconf-section", GCONF_SECTION,
+ "show-column-menu", TRUE,
+ NULL);
+ gtk_container_add(tree_view_container, GTK_WIDGET(priv->tree_view));
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Name", renderer, "text", SXLTMA_COL_NAME, NULL);
- gtk_tree_view_column_set_sort_column_id(column, SXLTMA_COL_NAME);
- gtk_tree_view_append_column(priv->tree_view, column);
-
- renderer = gtk_cell_renderer_toggle_new();
- column = gtk_tree_view_column_new_with_attributes("Enabled", renderer, "active", SXLTMA_COL_ENABLED, NULL);
- gtk_tree_view_column_set_sort_column_id(column, SXLTMA_COL_ENABLED);
- gtk_tree_view_append_column(priv->tree_view, column);
-
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Frequency", renderer, "text", SXLTMA_COL_FREQUENCY, NULL);
- gtk_tree_view_column_set_sort_column_id(column, SXLTMA_COL_FREQUENCY);
- gtk_tree_view_append_column(priv->tree_view, column);
-
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Last Occur", renderer, "text", SXLTMA_COL_LAST_OCCUR, NULL);
- gtk_tree_view_column_set_sort_column_id(column, SXLTMA_COL_LAST_OCCUR);
- gtk_tree_view_append_column(priv->tree_view, column);
-
- renderer = gtk_cell_renderer_text_new();
- column = gtk_tree_view_column_new_with_attributes("Next Occur", renderer, "text", SXLTMA_COL_NEXT_OCCUR, NULL);
- gtk_tree_view_column_set_sort_column_id(column, SXLTMA_COL_NEXT_OCCUR);
- gtk_tree_view_append_column(priv->tree_view, column);
-
selection = gtk_tree_view_get_selection(priv->tree_view);
gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
g_signal_connect(G_OBJECT(selection), "changed", (GCallback)gppsl_selection_changed_cb, (gpointer)page);
-
g_signal_connect(G_OBJECT(priv->tree_view), "row-activated", (GCallback)gppsl_row_activated_cb, (gpointer)page);
}
@@ -441,11 +408,6 @@
page = GNC_PLUGIN_PAGE_SX_LIST(plugin_page);
priv = GNC_PLUGIN_PAGE_SX_LIST_GET_PRIVATE(page);
-
-#if 0
- gnc_tree_view_account_save(GNC_TREE_VIEW_ACCOUNT(priv->tree_view),
- &priv->fd, key_file, group_name);
-#endif /* 0 */
}
/**
@@ -474,25 +436,10 @@
/* Install it now so we can them manipulate the created widget */
gnc_main_window_open_page(GNC_MAIN_WINDOW(window), GNC_PLUGIN_PAGE(page));
-#if 0
- gnc_tree_view_account_restore(GNC_TREE_VIEW_ACCOUNT(priv->tree_view),
- &priv->fd, key_file, group_name);
-#endif /* 0 */
return GNC_PLUGIN_PAGE(page);
}
-/* Callbacks */
-
-static SchedXaction*
-_sx_for_path(gpointer data, gpointer user_data)
-{
- GtkTreeIter iter;
- GncSxListTreeModelAdapter *model = GNC_SX_LIST_TREE_MODEL_ADAPTER(user_data);
- gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &iter, (GtkTreePath*)data);
- return gnc_sx_list_tree_model_adapter_get_sx_instances(model, &iter)->sx;
-}
-
static void
gnc_plugin_page_sx_list_cmd_new(GtkAction *action, GncPluginPageSxList *page)
{
@@ -536,7 +483,9 @@
return;
}
- to_edit = gnc_g_list_map(selected_paths, (GncGMapFunc)_sx_for_path, model);
+ to_edit = gnc_g_list_map(selected_paths,
+ (GncGMapFunc)gnc_tree_view_sx_list_get_sx_from_path,
+ priv->tree_view);
g_list_foreach(to_edit, (GFunc)_edit_sx, NULL);
g_list_free(to_edit);
g_list_foreach(selected_paths, (GFunc)gtk_tree_path_free, NULL);
@@ -551,7 +500,8 @@
{
GncPluginPageSxList *page = GNC_PLUGIN_PAGE_SX_LIST(user_data);
GncPluginPageSxListPrivate *priv = GNC_PLUGIN_PAGE_SX_LIST_GET_PRIVATE(page);
- SchedXaction *sx = _sx_for_path(path, priv->tree_model);
+
+ SchedXaction *sx = gnc_tree_view_sx_list_get_sx_from_path(GNC_TREE_VIEW_SX_LIST(priv->tree_view), path);
gnc_ui_scheduled_xaction_editor_dialog_create(sx, FALSE);
}
@@ -577,7 +527,6 @@
GtkTreeModel *model;
/* @@fixme -- add (suppressible?) confirmation dialog */
-
selection = gtk_tree_view_get_selection(priv->tree_view);
selected_paths = gtk_tree_selection_get_selected_rows(selection, &model);
if (g_list_length(selected_paths) == 0)
@@ -586,7 +535,9 @@
return;
}
- to_delete = gnc_g_list_map(selected_paths, (GncGMapFunc)_sx_for_path, model);
+ to_delete = gnc_g_list_map(selected_paths,
+ (GncGMapFunc)gnc_tree_view_sx_list_get_sx_from_path,
+ priv->tree_view);
{
GList *list;
for (list = to_delete; list != NULL; list = list->next)
Deleted: gnucash/trunk/src/gnome/gnc-sx-list-tree-model-adapter.c
===================================================================
--- gnucash/trunk/src/gnome/gnc-sx-list-tree-model-adapter.c 2007-02-21 19:50:31 UTC (rev 15641)
+++ gnucash/trunk/src/gnome/gnc-sx-list-tree-model-adapter.c 2007-02-22 02:20:56 UTC (rev 15642)
@@ -1,615 +0,0 @@
-/*
- * gnc-sx-list-tree-model-adapter.c
- *
- * Copyright (C) 2006 Josh Sled <jsled at asynchronous.org>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, contact:
- *
- * Free Software Foundation Voice: +1-617-542-5942
- * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652
- * Boston, MA 02110-1301, USA gnu at gnu.org
- */
-
-#include "config.h"
-#include <glib.h>
-#include <glib-object.h>
-#include "gnc-sx-instance-model.h"
-#include "gnc-sx-list-tree-model-adapter.h"
-#include <gtk/gtk.h>
-
-struct _GncSxListTreeModelAdapter
-{
- GObject parent;
-
- /* protected */
- gboolean disposed;
- GncSxInstanceModel *instances;
- GtkTreeStore *orig;
- GtkTreeModelSort *real;
-};
-
-struct _GncSxListTreeModelAdapterClass
-{
- GObjectClass parent;
-};
-
-static GObjectClass *parent_class = NULL;
-
-static void gnc_sx_list_tree_model_adapter_class_init(GncSxListTreeModelAdapterClass *klass);
-static void gsltma_tree_model_interface_init(gpointer g_iface, gpointer iface_data);
-static void gsltma_tree_sortable_interface_init(gpointer g_iface, gpointer iface_data);
-static void gnc_sx_list_tree_model_adapter_init(GTypeInstance *instance, gpointer klass);
-static void gnc_sx_list_tree_model_adapter_dispose(GObject *obj);
-static void gnc_sx_list_tree_model_adapter_finalize(GObject *obj);
-
-static GncSxInstances* gsltma_get_sx_instances_from_orig_iter(GncSxListTreeModelAdapter *model, GtkTreeIter *orig_iter);
-
-GType
-gnc_sx_list_tree_model_adapter_get_type(void)
-{
- static GType type = 0;
- if (type == 0) {
- static const GTypeInfo info = {
- sizeof (GncSxListTreeModelAdapterClass),
- NULL, /* base_init */
- NULL, /* base_finalize */
- (GClassInitFunc)gnc_sx_list_tree_model_adapter_class_init, /* class_init */
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (GncSxListTreeModelAdapter),
- 0, /* n_preallocs */
- (GInstanceInitFunc)gnc_sx_list_tree_model_adapter_init /* instance_init */
- };
- static const GInterfaceInfo itree_model_info = {
- (GInterfaceInitFunc) gsltma_tree_model_interface_init, /* interface_init */
- NULL, /* interface_finalize */
- NULL /* interface_data */
- };
- static const GInterfaceInfo itree_sortable_info = {
- (GInterfaceInitFunc) gsltma_tree_sortable_interface_init, /* interface_init */
- NULL, /* interface_finalize */
- NULL /* interface_data */
- };
-
- type = g_type_register_static (G_TYPE_OBJECT,
- "GncSxListTreeModelAdapterType",
- &info, 0);
- g_type_add_interface_static(type,
- GTK_TYPE_TREE_MODEL,
- &itree_model_info);
- g_type_add_interface_static(type,
- GTK_TYPE_TREE_SORTABLE,
- &itree_sortable_info);
- }
- return type;
-}
-
-static void
-gnc_sx_list_tree_model_adapter_class_init(GncSxListTreeModelAdapterClass *klass)
-{
- GObjectClass *obj_class = G_OBJECT_CLASS(klass);
-
- parent_class = g_type_class_peek_parent(klass);
-
- obj_class->dispose = gnc_sx_list_tree_model_adapter_dispose;
- obj_class->finalize = gnc_sx_list_tree_model_adapter_finalize;
-
-}
-
-static GtkTreeModelFlags
-gsltma_get_flags(GtkTreeModel *tree_model)
-{
- return gtk_tree_model_get_flags(GTK_TREE_MODEL(GNC_SX_LIST_TREE_MODEL_ADAPTER(tree_model)->real));
-}
-
-static gint
-gsltma_get_n_columns(GtkTreeModel *tree_model)
-{
- return gtk_tree_model_get_n_columns(GTK_TREE_MODEL(GNC_SX_LIST_TREE_MODEL_ADAPTER(tree_model)->real));
-}
-
-static GType
-gsltma_get_column_type(GtkTreeModel *tree_model, gint index)
-{
- return gtk_tree_model_get_column_type(GTK_TREE_MODEL(GNC_SX_LIST_TREE_MODEL_ADAPTER(tree_model)->real), index);
-}
-
-static gboolean
-gsltma_get_iter(GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- GtkTreePath *path)
-{
- return gtk_tree_model_get_iter(GTK_TREE_MODEL(GNC_SX_LIST_TREE_MODEL_ADAPTER(tree_model)->real), iter, path);
-}
-
-static GtkTreePath*
-gsltma_get_path(GtkTreeModel *tree_model,
- GtkTreeIter *iter)
-{
- return gtk_tree_model_get_path(GTK_TREE_MODEL(GNC_SX_LIST_TREE_MODEL_ADAPTER(tree_model)->real), iter);
-}
-
-static void
-gsltma_get_value(GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- gint column,
- GValue *value)
-{
- gtk_tree_model_get_value(GTK_TREE_MODEL(GNC_SX_LIST_TREE_MODEL_ADAPTER(tree_model)->real), iter, column, value);
-}
-
-static gboolean
-gsltma_iter_next(GtkTreeModel *tree_model,
- GtkTreeIter *iter)
-{
- return gtk_tree_model_iter_next(GTK_TREE_MODEL(GNC_SX_LIST_TREE_MODEL_ADAPTER(tree_model)->real), iter);
-}
-
-static gboolean
-gsltma_iter_children(GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- GtkTreeIter *parent)
-{
- return gtk_tree_model_iter_children(GTK_TREE_MODEL(GNC_SX_LIST_TREE_MODEL_ADAPTER(tree_model)->real), iter, parent);
-}
-
-static gboolean
-gsltma_iter_has_child(GtkTreeModel *tree_model,
- GtkTreeIter *iter)
-{
- return gtk_tree_model_iter_has_child(GTK_TREE_MODEL(GNC_SX_LIST_TREE_MODEL_ADAPTER(tree_model)->real), iter);
-}
-
-static gint
-gsltma_iter_n_children(GtkTreeModel *tree_model,
- GtkTreeIter *iter)
-{
- return gtk_tree_model_iter_n_children(GTK_TREE_MODEL(GNC_SX_LIST_TREE_MODEL_ADAPTER(tree_model)->real), iter);
-}
-
-static gboolean
-gsltma_iter_nth_child(GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- GtkTreeIter *parent,
- gint n)
-{
- return gtk_tree_model_iter_nth_child(GTK_TREE_MODEL(GNC_SX_LIST_TREE_MODEL_ADAPTER(tree_model)->real), iter, parent, n);
-}
-
-static gboolean
-gsltma_iter_parent(GtkTreeModel *tree_model,
- GtkTreeIter *iter,
- GtkTreeIter *child)
-{
- return gtk_tree_model_iter_parent(GTK_TREE_MODEL(GNC_SX_LIST_TREE_MODEL_ADAPTER(tree_model)->real), iter, child);
-}
-
-static void
-gsltma_ref_node(GtkTreeModel *tree_model,
- GtkTreeIter *iter)
-{
- gtk_tree_model_ref_node(GTK_TREE_MODEL(GNC_SX_LIST_TREE_MODEL_ADAPTER(tree_model)->real), iter);
-}
-
-static void
-gsltma_unref_node(GtkTreeModel *tree_model,
- GtkTreeIter *iter)
-{
- gtk_tree_model_unref_node(GTK_TREE_MODEL(GNC_SX_LIST_TREE_MODEL_ADAPTER(tree_model)->real), iter);
-}
-
-static void
-gsltma_tree_model_interface_init(gpointer g_iface, gpointer iface_data)
-{
- GtkTreeModelIface *tree_model = (GtkTreeModelIface*)g_iface;
- tree_model->get_flags = gsltma_get_flags;
- tree_model->get_n_columns = gsltma_get_n_columns;
- tree_model->get_column_type = gsltma_get_column_type;
- tree_model->get_iter = gsltma_get_iter;
- tree_model->get_path = gsltma_get_path;
- tree_model->get_value = gsltma_get_value;
- tree_model->iter_next = gsltma_iter_next;
- tree_model->iter_children = gsltma_iter_children;
- tree_model->iter_has_child = gsltma_iter_has_child;
- tree_model->iter_n_children = gsltma_iter_n_children;
- tree_model->iter_nth_child = gsltma_iter_nth_child;
- tree_model->iter_parent = gsltma_iter_parent;
- tree_model->ref_node = gsltma_ref_node;
- tree_model->unref_node = gsltma_unref_node;
-}
-
-static gboolean
-gsltma_get_sort_column_id(GtkTreeSortable *sortable,
- gint *sort_column_id,
- GtkSortType *order)
-{
- return gtk_tree_sortable_get_sort_column_id(GTK_TREE_SORTABLE(GNC_SX_LIST_TREE_MODEL_ADAPTER(sortable)->real),
- sort_column_id,
- order);
-}
-
-static void
-gsltma_set_sort_column_id(GtkTreeSortable *sortable,
- gint sort_column_id,
- GtkSortType order)
-{
- gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(GNC_SX_LIST_TREE_MODEL_ADAPTER(sortable)->real),
- sort_column_id,
- order);
-}
-
-static void
-gsltma_set_sort_func(GtkTreeSortable *sortable,
- gint sort_column_id,
- GtkTreeIterCompareFunc func,
- gpointer data,
- GtkDestroyNotify destroy)
-{
- gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(GNC_SX_LIST_TREE_MODEL_ADAPTER(sortable)->real),
- sort_column_id,
- func,
- data,
- destroy);
-}
-
-static void
-gsltma_set_default_sort_func(GtkTreeSortable *sortable,
- GtkTreeIterCompareFunc func,
- gpointer data,
- GtkDestroyNotify destroy)
-{
- gtk_tree_sortable_set_default_sort_func(GTK_TREE_SORTABLE(GNC_SX_LIST_TREE_MODEL_ADAPTER(sortable)->real),
- func, data, destroy);
-}
-
-static gboolean
-gsltma_has_default_sort_func(GtkTreeSortable *sortable)
-{
- return gtk_tree_sortable_has_default_sort_func(GTK_TREE_SORTABLE(GNC_SX_LIST_TREE_MODEL_ADAPTER(sortable)->real));
-}
-
-static void
-gsltma_tree_sortable_interface_init(gpointer g_iface, gpointer iface_data)
-{
- GtkTreeSortableIface *tree_sortable = (GtkTreeSortableIface*)g_iface;
- tree_sortable->get_sort_column_id = gsltma_get_sort_column_id;
- tree_sortable->set_sort_column_id = gsltma_set_sort_column_id;
- tree_sortable->set_sort_func = gsltma_set_sort_func;
- tree_sortable->set_default_sort_func = gsltma_set_default_sort_func;
- tree_sortable->has_default_sort_func = gsltma_has_default_sort_func;
- tree_sortable->get_sort_column_id = gsltma_get_sort_column_id;
- tree_sortable->set_sort_column_id = gsltma_set_sort_column_id;
- tree_sortable->set_sort_func = gsltma_set_sort_func;
- tree_sortable->set_default_sort_func = gsltma_set_default_sort_func;
- tree_sortable->has_default_sort_func = gsltma_has_default_sort_func;
-}
-
-static void
-gsltma_proxy_row_changed(GtkTreeModel *treemodel,
- GtkTreePath *arg1,
- GtkTreeIter *arg2,
- gpointer user_data)
-{
- g_signal_emit_by_name(user_data, "row-changed", arg1, arg2);
-}
-
-static void
-gsltma_proxy_row_deleted(GtkTreeModel *treemodel,
- GtkTreePath *arg1,
- gpointer user_data)
-{
- g_signal_emit_by_name(user_data, "row-deleted", arg1);
-}
-
-static void
-gsltma_proxy_row_has_child_toggled(GtkTreeModel *treemodel,
- GtkTreePath *arg1,
- GtkTreeIter *arg2,
- gpointer user_data)
-{
- g_signal_emit_by_name(user_data, "row-has-child-toggled", arg1, arg2);
-}
-
-static void
-gsltma_proxy_row_inserted(GtkTreeModel *treemodel,
- GtkTreePath *arg1,
- GtkTreeIter *arg2,
- gpointer user_data)
-{
- g_signal_emit_by_name(user_data, "row-inserted", arg1, arg2);
-}
-
-static void
-gsltma_proxy_rows_reordered(GtkTreeModel *treemodel,
- GtkTreePath *arg1,
- GtkTreeIter *arg2,
- gpointer arg3,
- gpointer user_data)
-{
- g_signal_emit_by_name(user_data, "rows-reordered", arg1, arg2, arg3);
-}
-
-static void
-gsltma_proxy_sort_column_changed(GtkTreeSortable *sortable, gpointer user_data)
-{
- g_signal_emit_by_name(user_data, "sort-column-changed");
-}
-
-static gint
-_name_comparator(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data)
-{
- gint rtn;
- GncSxListTreeModelAdapter *adapter = GNC_SX_LIST_TREE_MODEL_ADAPTER(user_data);
- GncSxInstances *a_inst, *b_inst;
- gchar *a_caseless, *b_caseless;
-
- a_inst = gsltma_get_sx_instances_from_orig_iter(adapter, a);
- b_inst = gsltma_get_sx_instances_from_orig_iter(adapter, b);
-
- if (a_inst == NULL && b_inst == NULL) return 0;
- if (a_inst == NULL) return 1;
- if (b_inst == NULL) return -1;
-
- a_caseless = g_utf8_casefold(xaccSchedXactionGetName(a_inst->sx), -1);
- b_caseless = g_utf8_casefold(xaccSchedXactionGetName(b_inst->sx), -1);
- rtn = safe_strcmp(a_caseless, b_caseless);
- g_free(a_caseless);
- g_free(b_caseless);
-
- return rtn;
-}
-
-static gint
-_freq_comparator(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data)
-{
- GncSxListTreeModelAdapter *adapter = GNC_SX_LIST_TREE_MODEL_ADAPTER(user_data);
- GncSxInstances *a_inst, *b_inst;
-
- a_inst = gsltma_get_sx_instances_from_orig_iter(adapter, a);
- b_inst = gsltma_get_sx_instances_from_orig_iter(adapter, b);
-
- if (a_inst == NULL && b_inst == NULL) return 0;
- if (a_inst == NULL) return 1;
- if (b_inst == NULL) return -1;
-
- return recurrenceListCmp(gnc_sx_get_schedule(a_inst->sx), gnc_sx_get_schedule(b_inst->sx));
-}
-
-static gint
-_safe_invalidable_date_compare(GDate *a, GDate *b)
-{
- if (!g_date_valid(a) && !g_date_valid(b))
- {
- return 0;
- }
- if (!g_date_valid(a))
- {
- return 1;
- }
- if (!g_date_valid(b))
- {
- return -1;
- }
- return g_date_compare(a, b);
-}
-
-static gint
-_last_occur_comparator(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data)
-{
- GncSxListTreeModelAdapter *adapter = GNC_SX_LIST_TREE_MODEL_ADAPTER(user_data);
- GncSxInstances *a_inst, *b_inst;
-
- a_inst = gsltma_get_sx_instances_from_orig_iter(adapter, a);
- b_inst = gsltma_get_sx_instances_from_orig_iter(adapter, b);
-
- return _safe_invalidable_date_compare(xaccSchedXactionGetLastOccurDate(a_inst->sx),
- xaccSchedXactionGetLastOccurDate(b_inst->sx));
-}
-
-static gint
-_next_occur_comparator(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data)
-{
- GncSxListTreeModelAdapter *adapter = GNC_SX_LIST_TREE_MODEL_ADAPTER(user_data);
- GncSxInstances *a_inst, *b_inst;
-
- a_inst = gsltma_get_sx_instances_from_orig_iter(adapter, a);
- b_inst = gsltma_get_sx_instances_from_orig_iter(adapter, b);
-
- return _safe_invalidable_date_compare(&a_inst->next_instance_date,
- &b_inst->next_instance_date);
-}
-
-static gint
-_enabled_comparator(GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer user_data)
-{
- GncSxListTreeModelAdapter *adapter = GNC_SX_LIST_TREE_MODEL_ADAPTER(user_data);
- GncSxInstances *a_inst, *b_inst;
-
- a_inst = gsltma_get_sx_instances_from_orig_iter(adapter, a);
- b_inst = gsltma_get_sx_instances_from_orig_iter(adapter, b);
-
- if (xaccSchedXactionGetEnabled(a_inst->sx) && !xaccSchedXactionGetEnabled(b_inst->sx)) return 1;
- if (!xaccSchedXactionGetEnabled(a_inst->sx) && xaccSchedXactionGetEnabled(b_inst->sx)) return -1;
- return 0;
-}
-
-static void
-gnc_sx_list_tree_model_adapter_init(GTypeInstance *instance, gpointer klass)
-{
- GncSxListTreeModelAdapter *adapter = GNC_SX_LIST_TREE_MODEL_ADAPTER(instance);
- adapter->orig = gtk_tree_store_new(5, G_TYPE_STRING, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
- adapter->real = GTK_TREE_MODEL_SORT(gtk_tree_model_sort_new_with_model(GTK_TREE_MODEL(adapter->orig)));
-
- // setup sorting
- gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(adapter->real), SXLTMA_COL_NAME, _name_comparator, adapter, NULL);
- gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(adapter->real), SXLTMA_COL_ENABLED, _enabled_comparator, adapter, NULL);
- gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(adapter->real), SXLTMA_COL_FREQUENCY, _freq_comparator, adapter, NULL);
- gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(adapter->real), SXLTMA_COL_LAST_OCCUR, _last_occur_comparator, adapter, NULL);
- gtk_tree_sortable_set_sort_func(GTK_TREE_SORTABLE(adapter->real), SXLTMA_COL_NEXT_OCCUR, _next_occur_comparator, adapter, NULL);
- gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(adapter->real), SXLTMA_COL_NEXT_OCCUR, GTK_SORT_ASCENDING);
-
- g_signal_connect(adapter->real, "row-changed", G_CALLBACK(gsltma_proxy_row_changed), adapter);
- g_signal_connect(adapter->real, "row-deleted", G_CALLBACK(gsltma_proxy_row_deleted), adapter);
- g_signal_connect(adapter->real, "row-has-child-toggled", G_CALLBACK(gsltma_proxy_row_has_child_toggled), adapter);
- g_signal_connect(adapter->real, "row-inserted", G_CALLBACK(gsltma_proxy_row_inserted), adapter);
- g_signal_connect(adapter->real, "rows-reordered", G_CALLBACK(gsltma_proxy_rows_reordered), adapter);
-
- g_signal_connect(adapter->real, "sort-column-changed", G_CALLBACK(gsltma_proxy_sort_column_changed), adapter);
-}
-
-static void
-_format_conditional_date(GDate *date, char *date_buf, int buf_max_length)
-{
- if (date == NULL || !g_date_valid(date))
- {
- g_stpcpy(date_buf, "never");
- }
- else
- {
- qof_print_gdate(date_buf, buf_max_length, date);
- }
-}
-
-static void
-gsltma_populate_tree_store(GncSxListTreeModelAdapter *model)
-{
- GtkTreeIter iter;
- GList *list;
-
- for (list = model->instances->sx_instance_list; list != NULL; list = list->next)
- {
- GncSxInstances *instances = (GncSxInstances*)list->data;
- gchar *frequency_str;
- char last_occur_date_buf[MAX_DATE_LENGTH+1];
- char next_occur_date_buf[MAX_DATE_LENGTH+1];
-
- frequency_str = recurrenceListToCompactString(gnc_sx_get_schedule(instances->sx));
-
- _format_conditional_date(xaccSchedXactionGetLastOccurDate(instances->sx),
- last_occur_date_buf, MAX_DATE_LENGTH);
- _format_conditional_date(&instances->next_instance_date,
- next_occur_date_buf, MAX_DATE_LENGTH);
-
- gtk_tree_store_append(model->orig, &iter, NULL);
- gtk_tree_store_set(model->orig, &iter,
- SXLTMA_COL_NAME, xaccSchedXactionGetName(instances->sx),
- SXLTMA_COL_ENABLED, xaccSchedXactionGetEnabled(instances->sx),
- SXLTMA_COL_FREQUENCY, frequency_str,
- SXLTMA_COL_LAST_OCCUR, last_occur_date_buf,
- SXLTMA_COL_NEXT_OCCUR, next_occur_date_buf,
- -1);
- g_free(frequency_str);
- }
-}
-
-static void
-gsltma_added_cb(GncSxInstanceModel *instances, SchedXaction *sx_added, gpointer user_data)
-{
- GncSxListTreeModelAdapter *model = GNC_SX_LIST_TREE_MODEL_ADAPTER(user_data);
- gtk_tree_store_clear(model->orig);
- gsltma_populate_tree_store(model);
-}
-
-static void
-gsltma_updated_cb(GncSxInstanceModel *instances, SchedXaction *sx_updated, gpointer user_data)
-{
- GncSxListTreeModelAdapter *model = GNC_SX_LIST_TREE_MODEL_ADAPTER(user_data);
- gnc_sx_instance_model_update_sx_instances(instances, sx_updated);
- gtk_tree_store_clear(model->orig);
- gsltma_populate_tree_store(model);
-}
-
-static void
-gsltma_removing_cb(GncSxInstanceModel *instances, SchedXaction *sx_removing, gpointer user_data)
-{
- GncSxListTreeModelAdapter *model = GNC_SX_LIST_TREE_MODEL_ADAPTER(user_data);
- gnc_sx_instance_model_remove_sx_instances(instances, sx_removing);
- gtk_tree_store_clear(model->orig);
- gsltma_populate_tree_store(model);
-}
-
-GncSxListTreeModelAdapter*
-gnc_sx_list_tree_model_adapter_new(GncSxInstanceModel *instances)
-{
- GncSxListTreeModelAdapter *rtn;
-
- rtn = GNC_SX_LIST_TREE_MODEL_ADAPTER(g_object_new(GNC_TYPE_SX_LIST_TREE_MODEL_ADAPTER, NULL));
- rtn->instances = instances;
- g_object_ref(G_OBJECT(rtn->instances));
-
- gsltma_populate_tree_store(rtn);
-
- g_signal_connect(G_OBJECT(rtn->instances), "added", (GCallback)gsltma_added_cb, (gpointer)rtn);
- g_signal_connect(G_OBJECT(rtn->instances), "updated", (GCallback)gsltma_updated_cb, (gpointer)rtn);
- g_signal_connect(G_OBJECT(rtn->instances), "removing", (GCallback)gsltma_removing_cb, (gpointer)rtn);
-
- return rtn;
-}
-
-GncSxInstances*
-gsltma_get_sx_instances_from_orig_iter(GncSxListTreeModelAdapter *model, GtkTreeIter *orig_iter)
-{
- GtkTreePath *path;
- gint *indices;
- gint index;
-
- path = gtk_tree_model_get_path(GTK_TREE_MODEL(model->orig), orig_iter);
- if (gtk_tree_path_get_depth(path) > 1)
- {
- gtk_tree_path_free(path);
- return NULL;
- }
- indices = gtk_tree_path_get_indices(path);
- index = indices[0];
-
- gtk_tree_path_free(path);
- return (GncSxInstances*)g_list_nth_data(model->instances->sx_instance_list, index);
-}
-
-GncSxInstances*
-gnc_sx_list_tree_model_adapter_get_sx_instances(GncSxListTreeModelAdapter *model, GtkTreeIter *sort_iter)
-{
- GtkTreeIter translated_iter;
- gtk_tree_model_sort_convert_iter_to_child_iter(model->real,
- &translated_iter,
- sort_iter);
- return gsltma_get_sx_instances_from_orig_iter(model, &translated_iter);
-}
-
-static void
-gnc_sx_list_tree_model_adapter_dispose(GObject *obj)
-{
- GncSxListTreeModelAdapter *adapter;
-
- g_return_if_fail(obj != NULL);
- adapter = GNC_SX_LIST_TREE_MODEL_ADAPTER(obj);
-
- if (adapter->disposed) return;
- adapter->disposed = TRUE;
-
- g_object_unref(G_OBJECT(adapter->instances));
- adapter->instances = NULL;
- g_object_unref(G_OBJECT(adapter->real));
- adapter->real = NULL;
- g_object_unref(G_OBJECT(adapter->orig));
- adapter->orig = NULL;
-
- G_OBJECT_CLASS(parent_class)->dispose(obj);
-}
-
-static void
-gnc_sx_list_tree_model_adapter_finalize(GObject *obj)
-{
- g_return_if_fail(obj != NULL);
- G_OBJECT_CLASS(parent_class)->finalize(obj);
-}
Deleted: gnucash/trunk/src/gnome/gnc-sx-list-tree-model-adapter.h
===================================================================
--- gnucash/trunk/src/gnome/gnc-sx-list-tree-model-adapter.h 2007-02-21 19:50:31 UTC (rev 15641)
+++ gnucash/trunk/src/gnome/gnc-sx-list-tree-model-adapter.h 2007-02-22 02:20:56 UTC (rev 15642)
@@ -1,60 +0,0 @@
-/*
- * gnc-sx-list-tree-model-adapter.h
- *
- * Copyright (C) 2006 Josh Sled <jsled at asynchronous.org>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of version 2 of the GNU General Public
- * License as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, contact:
- *
- * Free Software Foundation Voice: +1-617-542-5942
- * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652
- * Boston, MA 02110-1301, USA gnu at gnu.org
- */
-
-#ifndef _GNC_SX_LIST_TREE_MODEL_ADAPTER_H
-#define _GNC_SX_LIST_TREE_MODEL_ADAPTER_H
-
-#include "config.h"
-#include <glib.h>
-#include <glib-object.h>
-#include <gtk/gtk.h>
-#include "gnc-sx-instance-model.h"
-
-G_BEGIN_DECLS
-
-#define GNC_TYPE_SX_LIST_TREE_MODEL_ADAPTER (gnc_sx_list_tree_model_adapter_get_type ())
-#define GNC_SX_LIST_TREE_MODEL_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNC_TYPE_SX_LIST_TREE_MODEL_ADAPTER, GncSxListTreeModelAdapter))
-#define GNC_SX_LIST_TREE_MODEL_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GNC_TYPE_SX_LIST_TREE_MODEL_ADAPTER, GncSxListTreeModelAdapterClass))
-#define GNC_IS_SX_LIST_TREE_MODEL_ADAPTER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GNC_TYPE_SX_LIST_TREE_MODEL_ADAPTER))
-#define GNC_IS_SX_LIST_TREE_MODEL_ADAPTER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GNC_TYPE_SX_LIST_TREE_MODEL_ADAPTER))
-#define GNC_SX_LIST_TREE_MODEL_ADAPTER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GNC_TYPE_SX_LIST_TREE_MODEL_ADAPTER, GncSxListTreeModelAdapterClass))
-
-typedef struct _GncSxListTreeModelAdapter GncSxListTreeModelAdapter;
-typedef struct _GncSxListTreeModelAdapterClass GncSxListTreeModelAdapterClass;
-
-// model columns
-enum {
- SXLTMA_COL_NAME = 0,
- SXLTMA_COL_ENABLED,
- SXLTMA_COL_FREQUENCY,
- SXLTMA_COL_LAST_OCCUR,
- SXLTMA_COL_NEXT_OCCUR
-};
-
-GType gnc_sx_list_tree_model_adapter_get_type(void);
-GncSxListTreeModelAdapter* gnc_sx_list_tree_model_adapter_new(GncSxInstanceModel *instances);
-
-GncSxInstances* gnc_sx_list_tree_model_adapter_get_sx_instances(GncSxListTreeModelAdapter *model, GtkTreeIter *iter);
-
-G_END_DECLS
-
-#endif // _GNC_SX_LIST_TREE_MODEL_ADAPTER_H
Modified: gnucash/trunk/src/gnome-utils/Makefile.am
===================================================================
--- gnucash/trunk/src/gnome-utils/Makefile.am 2007-02-21 19:50:31 UTC (rev 15641)
+++ gnucash/trunk/src/gnome-utils/Makefile.am 2007-02-22 02:20:56 UTC (rev 15642)
@@ -77,6 +77,7 @@
gnc-query-list.c \
gnc-splash.c \
gnc-sx-instance-dense-cal-adapter.c \
+ gnc-sx-list-tree-model-adapter.c \
gnc-tree-model.c \
gnc-tree-model-account-types.c \
gnc-tree-model-account.c \
@@ -86,6 +87,7 @@
gnc-tree-view-account.c \
gnc-tree-view-commodity.c \
gnc-tree-view-price.c \
+ gnc-tree-view-sx-list.c \
gnc-tree-view.c \
gnc-window.c \
gncmod-gnome-utils.c \
@@ -145,6 +147,7 @@
gnc-query-list.h \
gnc-splash.h \
gnc-sx-instance-dense-cal-adapter.h \
+ gnc-sx-list-tree-model-adapter.h \
gnc-tree-model.h \
gnc-tree-model-account-types.h \
gnc-tree-model-account.h \
@@ -154,6 +157,7 @@
gnc-tree-view-account.h \
gnc-tree-view-commodity.h \
gnc-tree-view-price.h \
+ gnc-tree-view-sx-list.h \
gnc-tree-view.h \
gnc-window.h \
misc-gnome-utils.h \
Copied: gnucash/trunk/src/gnome-utils/gnc-sx-list-tree-model-adapter.c (from rev 15631, gnucash/trunk/src/gnome/gnc-sx-list-tree-model-adapter.c)
Copied: gnucash/trunk/src/gnome-utils/gnc-sx-list-tree-model-adapter.h (from rev 15627, gnucash/trunk/src/gnome/gnc-sx-list-tree-model-adapter.h)
Added: gnucash/trunk/src/gnome-utils/gnc-tree-view-sx-list.c
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-tree-view-sx-list.c 2007-02-21 19:50:31 UTC (rev 15641)
+++ gnucash/trunk/src/gnome-utils/gnc-tree-view-sx-list.c 2007-02-22 02:20:56 UTC (rev 15642)
@@ -0,0 +1,198 @@
+/**
+ * @brief GncTreeView implementation for Scheduled Transaction List.
+ * @author Copyright (C) 2007 Joshua Sled <jsled at asynchronous.org>
+ **/
+/********************************************************************
+ * This program is free software; you can redistribute it and/or *
+ * modify it under the terms of version 2 of the GNU General Public *
+ * License as published by the Free Software Foundation. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License*
+ * along with this program; if not, contact: *
+ * *
+ * Free Software Foundation Voice: +1-617-542-5942 *
+ * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
+ * Boston, MA 02110-1301, USA gnu at gnu.org *
+ * *
+ *******************************************************************/
+
+#include "config.h"
+
+#include <gtk/gtk.h>
+#include <glib/gi18n.h>
+#include <string.h>
+
+#include "gnc-tree-view.h"
+#include "gnc-tree-view-sx-list.h"
+#include "gnc-sx-list-tree-model-adapter.h"
+#include "gnc-gconf-utils.h"
+
+#define LOG_MOD "gnc.ui.tree-view.sx-list"
+static QofLogModule log_module = LOG_MOD;
+#undef G_LOG_DOMAIN
+#define G_LOG_DOMAIN LOG_MOD
+
+static void gnc_tree_view_sx_list_class_init(GncTreeViewSxListClass *klass);
+static void gnc_tree_view_sx_list_init(GncTreeViewSxList *view);
+static void gnc_tree_view_sx_list_dispose(GObject *object);
+static void gnc_tree_view_sx_list_finalize(GObject *object);
+
+typedef struct GncTreeViewSxListPrivate
+{
+ GtkTreeModel *tree_model;
+ gboolean disposed;
+} GncTreeViewSxListPrivate;
+
+#define GNC_TREE_VIEW_SX_LIST_GET_PRIVATE(o) \
+ (G_TYPE_INSTANCE_GET_PRIVATE ((o), GNC_TYPE_TREE_VIEW_SX_LIST, GncTreeViewSxListPrivate))
+
+static GObjectClass *parent_class = NULL;
+
+GType
+gnc_tree_view_sx_list_get_type(void)
+{
+ static GType gnc_tree_view_sx_list_type = 0;
+
+ if (gnc_tree_view_sx_list_type == 0)
+ {
+ static const GTypeInfo our_info = {
+ sizeof (GncTreeViewSxListClass),
+ NULL,
+ NULL,
+ (GClassInitFunc) gnc_tree_view_sx_list_class_init,
+ NULL,
+ NULL,
+ sizeof (GncTreeViewSxList),
+ 0,
+ (GInstanceInitFunc) gnc_tree_view_sx_list_init
+ };
+
+ gnc_tree_view_sx_list_type = g_type_register_static (GNC_TYPE_TREE_VIEW,
+ "GncTreeViewSxList",
+ &our_info, 0);
+ }
+
+ return gnc_tree_view_sx_list_type;
+}
+
+static void
+gnc_tree_view_sx_list_class_init(GncTreeViewSxListClass *klass)
+{
+ GObjectClass *o_class;
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ o_class = G_OBJECT_CLASS (klass);
+
+ o_class->dispose = gnc_tree_view_sx_list_dispose;
+ o_class->finalize = gnc_tree_view_sx_list_finalize;
+
+ g_type_class_add_private(klass, sizeof(GncTreeViewSxListPrivate));
+}
+
+static void
+gnc_tree_view_sx_list_init (GncTreeViewSxList *view)
+{
+ ; /* nop */
+}
+
+static void
+gnc_tree_view_sx_list_dispose(GObject *object)
+{
+ GncTreeViewSxList *view;
+ GncTreeViewSxListPrivate *priv;
+
+ gnc_leave_return_if_fail (object != NULL);
+ gnc_leave_return_if_fail (GNC_IS_TREE_VIEW_SX_LIST (object));
+
+ view = GNC_TREE_VIEW_SX_LIST (object);
+ priv = GNC_TREE_VIEW_SX_LIST_GET_PRIVATE(view);
+
+ if (priv->disposed)
+ return;
+ priv->disposed = TRUE;
+
+ g_object_unref(G_OBJECT(priv->tree_model));
+ priv->tree_model = NULL;
+
+ if (G_OBJECT_CLASS (parent_class)->dispose)
+ (* G_OBJECT_CLASS (parent_class)->dispose) (object);
+}
+
+static void
+gnc_tree_view_sx_list_finalize(GObject *object)
+{
+ GncTreeViewSxList *view;
+
+ gnc_leave_return_if_fail(object != NULL);
+ gnc_leave_return_if_fail(GNC_IS_TREE_VIEW_SX_LIST (object));
+
+ view = GNC_TREE_VIEW_SX_LIST(object);
+
+ if (G_OBJECT_CLASS(parent_class)->finalize)
+ (* G_OBJECT_CLASS(parent_class)->finalize) (object);
+}
+
+GtkTreeView*
+gnc_tree_view_sx_list_new(GncSxInstanceModel *sx_instances)
+{
+ GncTreeView *view;
+ GtkTreeModel *model;
+ GtkTreeViewColumn *col;
+ GncTreeViewSxListPrivate *priv;
+
+ view = (GncTreeView*)g_object_new(GNC_TYPE_TREE_VIEW_SX_LIST, NULL);
+ g_object_set(view, "name", "sx_list_tree", NULL);
+
+ priv = GNC_TREE_VIEW_SX_LIST_GET_PRIVATE(view);
+
+ priv->tree_model = GTK_TREE_MODEL(gnc_sx_list_tree_model_adapter_new(sx_instances));
+ gnc_tree_view_set_model(view, GTK_TREE_MODEL(priv->tree_model));
+
+ col = gnc_tree_view_add_text_column(view, _("Name"), "name", NULL,
+ "Semi-Monthly Paycheck",
+ SXLTMA_COL_NAME, -1, NULL);
+ g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+
+ col = gnc_tree_view_add_toggle_column(view, _("Enabled"),
+ Q_("Single-character short column-title form of 'Enabled'|E"),
+ "enabled", SXLTMA_COL_ENABLED,
+ GNC_TREE_VIEW_COLUMN_VISIBLE_ALWAYS,
+ NULL, NULL);
+ g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+
+ col = gnc_tree_view_add_text_column(view, _("Frequency"), "frequency", NULL,
+ "Weekly (x3): -------",
+ SXLTMA_COL_FREQUENCY, -1, NULL);
+ g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+
+ col = gnc_tree_view_add_text_column(view, _("Last Occur"), "last-occur", NULL,
+ "2007-01-02",
+ SXLTMA_COL_LAST_OCCUR, -1, NULL);
+ g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+
+ col = gnc_tree_view_add_text_column(view, _("Next Occur"), "next-occur", NULL,
+ "2007-01-02",
+ SXLTMA_COL_NEXT_OCCUR, -1, NULL);
+ g_object_set_data(G_OBJECT(col), DEFAULT_VISIBLE, GINT_TO_POINTER(1));
+
+ gnc_tree_view_configure_columns(view);
+
+ gtk_widget_show(GTK_WIDGET(view));
+ return GTK_TREE_VIEW(view);
+}
+
+SchedXaction*
+gnc_tree_view_sx_list_get_sx_from_path(GncTreeViewSxList *view, GtkTreePath *path)
+{
+ GtkTreeIter iter;
+ GncTreeViewSxListPrivate *priv = GNC_TREE_VIEW_SX_LIST_GET_PRIVATE(view);
+ gtk_tree_model_get_iter(GTK_TREE_MODEL(priv->tree_model), &iter, path);
+ return gnc_sx_list_tree_model_adapter_get_sx_instances(
+ GNC_SX_LIST_TREE_MODEL_ADAPTER(priv->tree_model), &iter)->sx;
+}
Added: gnucash/trunk/src/gnome-utils/gnc-tree-view-sx-list.h
===================================================================
--- gnucash/trunk/src/gnome-utils/gnc-tree-view-sx-list.h 2007-02-21 19:50:31 UTC (rev 15641)
+++ gnucash/trunk/src/gnome-utils/gnc-tree-view-sx-list.h 2007-02-22 02:20:56 UTC (rev 15642)
@@ -0,0 +1,66 @@
+/**
+ * @addtogroup GUI
+ * @{
+ * @file gnc-tree-view-sx-list.h
+ * @brief GncTreeView implementation for Scheduled Transaction List.
+ * @author Copyright (C) 2007 Joshua Sled <jsled at asynchronous.org>
+ **/
+/********************************************************************
+ * This program is free software; you can redistribute it and/or *
+ * modify it under the terms of version 2 of the GNU General Public *
+ * License as published by the Free Software Foundation. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License*
+ * along with this program; if not, contact: *
+ * *
+ * Free Software Foundation Voice: +1-617-542-5942 *
+ * 51 Franklin Street, Fifth Floor Fax: +1-617-542-2652 *
+ * Boston, MA 02110-1301, USA gnu at gnu.org *
+ * *
+ *******************************************************************/
+
+
+#ifndef __GNC_TREE_VIEW_SX_LIST_H
+#define __GNC_TREE_VIEW_SX_LIST_H
+
+#include <gtk/gtktreemodel.h>
+#include <gtk/gtktreeview.h>
+#include "gnc-tree-view.h"
+
+#include "SchedXaction.h"
+#include "gnc-sx-instance-model.h"
+#include "gnc-ui-util.h"
+
+G_BEGIN_DECLS
+
+#define GNC_TYPE_TREE_VIEW_SX_LIST (gnc_tree_view_sx_list_get_type ())
+#define GNC_TREE_VIEW_SX_LIST(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GNC_TYPE_TREE_VIEW_SX_LIST, GncTreeViewSxList))
+#define GNC_TREE_VIEW_SX_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GNC_TYPE_TREE_VIEW_SX_LIST, GncTreeViewSxListClass))
+#define GNC_IS_TREE_VIEW_SX_LIST(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GNC_TYPE_TREE_VIEW_SX_LIST))
+#define GNC_IS_TREE_VIEW_SX_LIST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GNC_TYPE_TREE_VIEW_SX_LIST))
+#define GNC_TREE_VIEW_SX_LIST_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GNC_TYPE_TREE_VIEW_SX_LIST, GncTreeViewSxListClass))
+
+typedef struct
+{
+ GncTreeView gnc_tree_view;
+} GncTreeViewSxList;
+
+typedef struct
+{
+ GncTreeViewClass gnc_tree_view;
+} GncTreeViewSxListClass;
+
+GType gnc_tree_view_sx_list_get_type(void);
+
+GtkTreeView* gnc_tree_view_sx_list_new(GncSxInstanceModel *sx_instances);
+
+SchedXaction* gnc_tree_view_sx_list_get_sx_from_path(GncTreeViewSxList *view, GtkTreePath *path);
+
+G_END_DECLS
+
+#endif /* __GNC_TREE_VIEW_SX_LIST_H */
More information about the gnucash-changes
mailing list