More work on sorting in wxDataViewCtrl
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47270 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -333,9 +333,9 @@ MyFrame::MyFrame(wxFrame *frame, wxChar *title, int x, int y, int w, int h):
|
|||||||
m_dataview->AssociateModel( model.get() );
|
m_dataview->AssociateModel( model.get() );
|
||||||
|
|
||||||
m_dataview->AppendTextColumn( "Title", 0, wxDATAVIEW_CELL_INERT, 200,
|
m_dataview->AppendTextColumn( "Title", 0, wxDATAVIEW_CELL_INERT, 200,
|
||||||
DEFAULT_ALIGN );
|
DEFAULT_ALIGN, wxDATAVIEW_COL_SORTABLE );
|
||||||
m_dataview->AppendTextColumn( "Artist", 1, wxDATAVIEW_CELL_INERT, 200,
|
m_dataview->AppendTextColumn( "Artist", 1, wxDATAVIEW_CELL_INERT, 200,
|
||||||
DEFAULT_ALIGN );
|
DEFAULT_ALIGN, wxDATAVIEW_COL_SORTABLE );
|
||||||
m_dataview->AppendTextColumn( "Year", 2, wxDATAVIEW_CELL_INERT, 50,
|
m_dataview->AppendTextColumn( "Year", 2, wxDATAVIEW_CELL_INERT, 50,
|
||||||
DEFAULT_ALIGN );
|
DEFAULT_ALIGN );
|
||||||
}
|
}
|
||||||
|
@@ -79,6 +79,7 @@ struct _GtkWxTreeModel
|
|||||||
gint sort_column_id;
|
gint sort_column_id;
|
||||||
GtkSortType order;
|
GtkSortType order;
|
||||||
GtkTreeIterCompareFunc default_sort_func;
|
GtkTreeIterCompareFunc default_sort_func;
|
||||||
|
GtkTreeIterCompareFunc sort_func;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GtkWxTreeModelClass
|
struct _GtkWxTreeModelClass
|
||||||
@@ -227,11 +228,11 @@ wxgtk_tree_model_tree_model_init (GtkTreeModelIface *iface)
|
|||||||
static void
|
static void
|
||||||
wxgtk_tree_model_sortable_init (GtkTreeSortableIface *iface)
|
wxgtk_tree_model_sortable_init (GtkTreeSortableIface *iface)
|
||||||
{
|
{
|
||||||
iface->get_sort_column_id = wxgtk_tree_model_get_sort_column_id;
|
iface->get_sort_column_id = wxgtk_tree_model_get_sort_column_id;
|
||||||
iface->set_sort_column_id = wxgtk_tree_model_set_sort_column_id;
|
iface->set_sort_column_id = wxgtk_tree_model_set_sort_column_id;
|
||||||
iface->set_sort_func = wxgtk_tree_model_set_sort_func;
|
iface->set_sort_func = wxgtk_tree_model_set_sort_func;
|
||||||
iface->set_default_sort_func = wxgtk_tree_model_set_default_sort_func;
|
iface->set_default_sort_func = wxgtk_tree_model_set_default_sort_func;
|
||||||
iface->has_default_sort_func = wxgtk_tree_model_has_default_sort_func;
|
iface->has_default_sort_func = wxgtk_tree_model_has_default_sort_func;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -241,6 +242,7 @@ wxgtk_tree_model_init (GtkWxTreeModel *tree_model)
|
|||||||
tree_model->stamp = g_random_int();
|
tree_model->stamp = g_random_int();
|
||||||
tree_model->sort_column_id = -2;
|
tree_model->sort_column_id = -2;
|
||||||
tree_model->order = GTK_SORT_ASCENDING;
|
tree_model->order = GTK_SORT_ASCENDING;
|
||||||
|
tree_model->sort_func = NULL;
|
||||||
tree_model->default_sort_func = NULL;
|
tree_model->default_sort_func = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -543,13 +545,46 @@ gboolean wxgtk_tree_model_get_sort_column_id (GtkTreeSortable *sortabl
|
|||||||
gint *sort_column_id,
|
gint *sort_column_id,
|
||||||
GtkSortType *order)
|
GtkSortType *order)
|
||||||
{
|
{
|
||||||
return FALSE;
|
GtkWxTreeModel *tree_model = (GtkWxTreeModel *) sortable;
|
||||||
|
|
||||||
|
g_return_val_if_fail (GTK_IS_WX_TREE_MODEL (sortable), FALSE);
|
||||||
|
|
||||||
|
if (tree_model->sort_column_id == GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (sort_column_id)
|
||||||
|
*sort_column_id = tree_model->sort_column_id;
|
||||||
|
|
||||||
|
if (order)
|
||||||
|
*order = tree_model->order;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxgtk_tree_model_set_sort_column_id (GtkTreeSortable *sortable,
|
void wxgtk_tree_model_set_sort_column_id (GtkTreeSortable *sortable,
|
||||||
gint sort_column_id,
|
gint sort_column_id,
|
||||||
GtkSortType order)
|
GtkSortType order)
|
||||||
{
|
{
|
||||||
|
GtkWxTreeModel *tree_model = (GtkWxTreeModel *) sortable;
|
||||||
|
|
||||||
|
g_return_if_fail (GTK_IS_WX_TREE_MODEL (sortable) );
|
||||||
|
|
||||||
|
if ((tree_model->sort_column_id == sort_column_id) &&
|
||||||
|
(tree_model->order == order))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (sort_column_id == GTK_TREE_SORTABLE_DEFAULT_SORT_COLUMN_ID)
|
||||||
|
{
|
||||||
|
g_return_if_fail (tree_model->default_sort_func != NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
tree_model->sort_column_id = sort_column_id;
|
||||||
|
tree_model->order = order;
|
||||||
|
|
||||||
|
gtk_tree_sortable_sort_column_changed (sortable);
|
||||||
|
|
||||||
|
wxPrintf( "wxgtk_tree_model_set_column_id, sort_column_id = %d, order = %d\n", sort_column_id, (int)order );
|
||||||
|
// sort
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxgtk_tree_model_set_sort_func (GtkTreeSortable *sortable,
|
void wxgtk_tree_model_set_sort_func (GtkTreeSortable *sortable,
|
||||||
@@ -558,6 +593,15 @@ void wxgtk_tree_model_set_sort_func (GtkTreeSortable *sortabl
|
|||||||
gpointer data,
|
gpointer data,
|
||||||
GtkDestroyNotify destroy)
|
GtkDestroyNotify destroy)
|
||||||
{
|
{
|
||||||
|
GtkWxTreeModel *tree_model = (GtkWxTreeModel *) sortable;
|
||||||
|
|
||||||
|
g_return_if_fail (GTK_IS_WX_TREE_MODEL (sortable) );
|
||||||
|
g_return_if_fail (func != NULL);
|
||||||
|
|
||||||
|
tree_model->sort_func = func;
|
||||||
|
|
||||||
|
wxPrintf( "wxgtk_tree_model_set_sort_func, sort_column_id = %d\n", sort_column_id );
|
||||||
|
// sort
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxgtk_tree_model_set_default_sort_func (GtkTreeSortable *sortable,
|
void wxgtk_tree_model_set_default_sort_func (GtkTreeSortable *sortable,
|
||||||
@@ -565,6 +609,15 @@ void wxgtk_tree_model_set_default_sort_func (GtkTreeSortable *sortabl
|
|||||||
gpointer data,
|
gpointer data,
|
||||||
GtkDestroyNotify destroy)
|
GtkDestroyNotify destroy)
|
||||||
{
|
{
|
||||||
|
GtkWxTreeModel *tree_model = (GtkWxTreeModel *) sortable;
|
||||||
|
|
||||||
|
g_return_if_fail (GTK_IS_WX_TREE_MODEL (sortable) );
|
||||||
|
|
||||||
|
g_return_if_fail (func != NULL);
|
||||||
|
|
||||||
|
tree_model->default_sort_func = func;
|
||||||
|
|
||||||
|
wxPrintf( "wxgtk_tree_model_set_default_sort_func\n" );
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean wxgtk_tree_model_has_default_sort_func (GtkTreeSortable *sortable)
|
gboolean wxgtk_tree_model_has_default_sort_func (GtkTreeSortable *sortable)
|
||||||
@@ -1723,7 +1776,7 @@ gtk_dataview_header_button_press_callback( GtkWidget *widget,
|
|||||||
wxDataViewColumn *column )
|
wxDataViewColumn *column )
|
||||||
{
|
{
|
||||||
if (gdk_event->type != GDK_BUTTON_PRESS)
|
if (gdk_event->type != GDK_BUTTON_PRESS)
|
||||||
return TRUE;
|
return FALSE;
|
||||||
|
|
||||||
if (gdk_event->button == 1)
|
if (gdk_event->button == 1)
|
||||||
{
|
{
|
||||||
@@ -1731,10 +1784,11 @@ gtk_dataview_header_button_press_callback( GtkWidget *widget,
|
|||||||
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, dv->GetId() );
|
wxDataViewEvent event( wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, dv->GetId() );
|
||||||
event.SetDataViewColumn( column );
|
event.SetDataViewColumn( column );
|
||||||
event.SetModel( dv->GetModel() );
|
event.SetModel( dv->GetModel() );
|
||||||
dv->GetEventHandler()->ProcessEvent( event );
|
if (dv->GetEventHandler()->ProcessEvent( event ))
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@@ -1975,13 +2029,17 @@ wxAlignment wxDataViewColumn::GetAlignment() const
|
|||||||
void wxDataViewColumn::SetSortable( bool sortable )
|
void wxDataViewColumn::SetSortable( bool sortable )
|
||||||
{
|
{
|
||||||
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
|
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
|
||||||
gtk_tree_view_column_set_sort_indicator( column, sortable );
|
|
||||||
|
if (sortable)
|
||||||
|
gtk_tree_view_column_set_sort_column_id( column, GetModelColumn() );
|
||||||
|
else
|
||||||
|
gtk_tree_view_column_set_sort_column_id( column, -1 );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxDataViewColumn::IsSortable() const
|
bool wxDataViewColumn::IsSortable() const
|
||||||
{
|
{
|
||||||
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
|
GtkTreeViewColumn *column = GTK_TREE_VIEW_COLUMN(m_column);
|
||||||
return gtk_tree_view_column_get_sort_indicator( column );
|
return (gtk_tree_view_column_get_sort_column_id( column ) != -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxDataViewColumn::IsResizeable() const
|
bool wxDataViewColumn::IsResizeable() const
|
||||||
|
Reference in New Issue
Block a user