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