+ g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (sortable), FALSE);
+
+ if (!wxtree_model->internal->IsSorted())
+ {
+ if (sort_column_id)
+ *sort_column_id = -1;
+
+ return TRUE;
+ }
+
+
+ if (sort_column_id)
+ *sort_column_id = wxtree_model->internal->GetSortColumn();
+
+ if (order)
+ *order = wxtree_model->internal->GetSortOrder();
+
+ return TRUE;
+}
+
+wxDataViewColumn *gs_lastLeftClickHeader = NULL;
+
+static void
+wxgtk_tree_model_set_sort_column_id (GtkTreeSortable *sortable,
+ gint sort_column_id,
+ GtkSortType order)
+{
+ GtkWxTreeModel *tree_model = (GtkWxTreeModel *) sortable;
+ g_return_if_fail (GTK_IS_WX_TREE_MODEL (sortable) );
+
+ tree_model->internal->SetDataViewSortColumn( gs_lastLeftClickHeader );
+
+ if ((sort_column_id != (gint) tree_model->internal->GetSortColumn()) ||
+ (order != tree_model->internal->GetSortOrder()))
+ {
+ tree_model->internal->SetSortColumn( sort_column_id );
+ tree_model->internal->SetSortOrder( order );
+
+ gtk_tree_sortable_sort_column_changed (sortable);
+
+ tree_model->internal->GetDataViewModel()->Resort();
+ }
+
+ if (gs_lastLeftClickHeader)
+ {
+ wxDataViewCtrl *dv = tree_model->internal->GetOwner();
+ wxDataViewEvent event( wxEVT_DATAVIEW_COLUMN_SORTED, dv->GetId() );
+ event.SetDataViewColumn( gs_lastLeftClickHeader );
+ event.SetModel( dv->GetModel() );
+ dv->HandleWindowEvent( event );
+ }
+
+ gs_lastLeftClickHeader = NULL;
+}
+
+static void
+wxgtk_tree_model_set_sort_func (GtkTreeSortable *sortable,
+ gint WXUNUSED(sort_column_id),
+ GtkTreeIterCompareFunc func,
+ gpointer WXUNUSED(data),
+ GDestroyNotify WXUNUSED(destroy))
+{
+ g_return_if_fail (GTK_IS_WX_TREE_MODEL (sortable) );
+ g_return_if_fail (func != NULL);
+}
+
+static void
+wxgtk_tree_model_set_default_sort_func (GtkTreeSortable *sortable,
+ GtkTreeIterCompareFunc func,
+ gpointer WXUNUSED(data),
+ GDestroyNotify WXUNUSED(destroy))
+{
+ g_return_if_fail (GTK_IS_WX_TREE_MODEL (sortable) );
+ g_return_if_fail (func != NULL);
+
+ //wxPrintf( "wxgtk_tree_model_set_default_sort_func\n" );
+ // TODO: remove this code
+}
+
+static gboolean
+wxgtk_tree_model_has_default_sort_func (GtkTreeSortable *sortable)
+{
+ g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (sortable), FALSE );
+
+ return FALSE;
+}
+
+//-----------------------------------------------------------------------------
+// define new GTK+ class GtkWxRendererText
+//-----------------------------------------------------------------------------
+
+extern "C" {
+
+#define GTK_TYPE_WX_CELL_RENDERER_TEXT (gtk_wx_cell_renderer_text_get_type ())
+#define GTK_WX_CELL_RENDERER_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GTK_TYPE_WX_CELL_RENDERER_TEXT, GtkWxCellRendererText))
+#define GTK_IS_WX_CELL_RENDERER_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GTK_TYPE_WX_CELL_RENDERER_TEXT))
+#define GTK_IS_WX_CELL_RENDERER_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_WX_CELL_RENDERER_TEXT))
+
+GType gtk_wx_cell_renderer_text_get_type (void);
+
+typedef struct _GtkWxCellRendererText GtkWxCellRendererText;
+
+struct _GtkWxCellRendererText
+{
+ GtkCellRendererText parent;
+
+ wxDataViewRenderer *wx_renderer;
+};
+
+static GtkWxCellRendererText *gtk_wx_cell_renderer_text_new (void);
+static void gtk_wx_cell_renderer_text_init (
+ GTypeInstance* instance, void*);
+static void gtk_wx_cell_renderer_text_class_init(
+ void* klass, void*);
+static GtkCellEditable *gtk_wx_cell_renderer_text_start_editing(
+ GtkCellRenderer *cell,
+ GdkEvent *event,
+ GtkWidget *widget,
+ const gchar *path,
+ wxConstGdkRect *background_area,
+ wxConstGdkRect *cell_area,
+ GtkCellRendererState flags );
+
+
+static GObjectClass *text_cell_parent_class = NULL;
+
+} // extern "C"
+
+GType
+gtk_wx_cell_renderer_text_get_type (void)
+{
+ static GType cell_wx_type = 0;
+
+ if (!cell_wx_type)
+ {
+ const GTypeInfo cell_wx_info =
+ {
+ sizeof (GtkCellRendererTextClass),
+ NULL, /* base_init */
+ NULL, /* base_finalize */
+ gtk_wx_cell_renderer_text_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (GtkWxCellRendererText),
+ 0, /* n_preallocs */
+ gtk_wx_cell_renderer_text_init,
+ };
+
+ cell_wx_type = g_type_register_static( GTK_TYPE_CELL_RENDERER_TEXT,
+ "GtkWxCellRendererText", &cell_wx_info, (GTypeFlags)0 );
+ }
+
+ return cell_wx_type;
+}
+
+static void
+gtk_wx_cell_renderer_text_init(GTypeInstance* instance, void*)
+{
+ GtkWxCellRendererText* cell = GTK_WX_CELL_RENDERER_TEXT(instance);
+ cell->wx_renderer = NULL;
+}
+
+static void
+gtk_wx_cell_renderer_text_class_init(void* klass, void*)
+{
+ GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS (klass);
+
+ text_cell_parent_class = (GObjectClass*) g_type_class_peek_parent (klass);
+
+ cell_class->start_editing = gtk_wx_cell_renderer_text_start_editing;
+}
+
+GtkWxCellRendererText*
+gtk_wx_cell_renderer_text_new (void)
+{
+ return (GtkWxCellRendererText*) g_object_new (GTK_TYPE_WX_CELL_RENDERER_TEXT, NULL);
+}
+
+static GtkCellEditable *gtk_wx_cell_renderer_text_start_editing(
+ GtkCellRenderer *gtk_renderer,
+ GdkEvent *gdk_event,
+ GtkWidget *widget,
+ const gchar *path,
+ wxConstGdkRect *background_area,
+ wxConstGdkRect *cell_area,
+ GtkCellRendererState flags )
+{
+ GtkWxCellRendererText *wxgtk_renderer = (GtkWxCellRendererText *) gtk_renderer;
+ wxDataViewRenderer *wx_renderer = wxgtk_renderer->wx_renderer;
+ wxDataViewColumn *column = wx_renderer->GetOwner();
+
+ wxDataViewItem
+ item(column->GetOwner()->GTKPathToItem(wxGtkTreePath(path)));
+
+ wxDataViewCtrl *dv = column->GetOwner();
+ wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_START_EDITING, dv->GetId() );
+ event.SetDataViewColumn( column );
+ event.SetModel( dv->GetModel() );
+ event.SetColumn( column->GetModelColumn() );
+ event.SetItem( item );
+ dv->HandleWindowEvent( event );
+
+ if (event.IsAllowed())
+ return GTK_CELL_RENDERER_CLASS(text_cell_parent_class)->
+ start_editing( gtk_renderer, gdk_event, widget, path, background_area, cell_area, flags );
+ else
+ return NULL;
+}
+
+//-----------------------------------------------------------------------------
+// define new GTK+ class GtkWxCellRenderer
+//-----------------------------------------------------------------------------
+
+extern "C" {