I have a rather complicated TreeView using a ListStore.  Filtering the
view works,  but I'm so far unable to get sorting to work.  I have a
sort object connected to the model and the filter object connected to
the sort object;  I'm found very similair constructs in other projects
(including Galaxium
<http://code.google.com/p/galaxium/source/browse/trunk/src/Galaxium.Gui.Gtk/NewTreeView/GalaxiumTreeView.cs?r=551>)
 but it just doesn't sort.  My column-header-click happens when a column gets 
clicked but it doesn't sort,  the actual sort method never gets pinged.  
Despite beng connect-before Gtk seems to be doing something before my 
column-header-clicked gets called.   Any pointers appreciated. 

What happens when a column header is clicked:
(Whitemice.Consonance:20431): Gtk-CRITICAL **:
gtk_tree_sortable_get_sort_column_id: assertion `GTK_IS_TREE_SORTABLE
(sortable)' failed
(Whitemice.Consonance:20431): Gtk-CRITICAL **:
gtk_tree_sortable_has_default_sort_func: assertion `GTK_IS_TREE_SORTABLE
(sortable)' failed
(Whitemice.Consonance:20431): Gtk-CRITICAL **:
gtk_tree_sortable_set_sort_column_id: assertion `GTK_IS_TREE_SORTABLE
(sortable)' failed
ColumnClicked
Sort Column:4 Order:Ascending

The actual sort method never gets called

<object>

      TreeView view;
      ListStore taskStore;
      TreeModelSort sortAdapter;
      TreeModelFilter  taskFilter;
                  int             sortColumn;
                  SortType        sortOrder;

    <ctor>
                        taskStore = new Gtk.ListStore();
                  ...
                        objectIdColumn = new Gtk.TreeViewColumn ();
                        objectIdColumn.Title = "Object Id";
                        objectIdColumn.Reorderable = true;
                        objectIdColumn.Resizable = true;
                        objectIdColumn.Clickable = true;
                        cell = new Gtk.CellRendererText ();
                        objectIdColumn.PackStart(cell, true);
                        objectIdColumn.SetCellDataFunc(cell, new
Gtk.TreeCellDataFunc(RenderObjectId));
                        objectIdColumn.SortColumnId = 0;
                        objectIdColumn.Clicked += new 
EventHandler(ColumnClicked);
                        view.AppendColumn(objectIdColumn);
      ...
                  sortAdapter = new TreeModelSort(taskStore);
                  sortAdapter.SetSortFunc(-2, OrderTasks);
                        taskFilter = new TreeModelFilter(sortAdapter, null);
                        taskFilter.VisibleFunc = new
Gtk.TreeModelFilterVisibleFunc(TaskFilter);
                        view.Model = taskFilter;
    </ctor>

                [GLib.ConnectBefore]
                protected void ColumnClicked(object sender, EventArgs args)
                {
                  TreeViewColumn column;

      Console.WriteLine("ColumnClicked");
                  if (sender is Gtk.TreeViewColumn)
                  {
                    column = (sender as Gtk.TreeViewColumn);
                    if (column.SortColumnId == sortColumn)
                    {
                      if (sortOrder == SortType.Ascending)
                        sortOrder = SortType.Descending;
                      else sortOrder = SortType.Ascending;
                      column.SortOrder = sortOrder;
                      column.SortIndicator = true;
                    } else 
                      {
                        sortColumn = column.SortColumnId;
                        sortOrder = SortType.Ascending;
                        column.SortIndicator = true;
                      }
                    Console.WriteLine("Sort Column:{0} Order:{1}", sortColumn,
sortOrder);
                    sortAdapter.SetSortColumnId(sortColumn, sortOrder);
                    sortAdapter.ChangeSortColumn ();
                  }
                } // end ColumnClicked
                
protected int OrderTasks(TreeModel model, TreeIter t1, TreeIter t2)
{ 
//  ObjectId    0   Title 1     Project 2   Start       3
//  Creator     4   Status 5 Priority 6 End 7
//  Executant   8 Completed     9
Console.WriteLine("SimpleTaskList.OrderTasks");
 return 0;
}
    ...
</object>

_______________________________________________
Gtk-sharp-list maillist  -  Gtk-sharp-list@lists.ximian.com
http://lists.ximian.com/mailman/listinfo/gtk-sharp-list

Reply via email to