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