First work at resort with header click
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47547 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
9a45b5d576
commit
4508fcd20a
@ -126,7 +126,7 @@ public:
|
|||||||
|
|
||||||
void SetSortingColumn( unsigned int col ) { m_sortingColumn = col; }
|
void SetSortingColumn( unsigned int col ) { m_sortingColumn = col; }
|
||||||
unsigned int GetSortingColumn() { return m_sortingColumn; }
|
unsigned int GetSortingColumn() { return m_sortingColumn; }
|
||||||
void SetSortOrderAscending( bool ascending ) { m_ascending = true; }
|
void SetSortOrderAscending( bool ascending ) { m_ascending = ascending; }
|
||||||
bool GetSortOrderAscending() { return m_ascending; }
|
bool GetSortOrderAscending() { return m_ascending; }
|
||||||
|
|
||||||
|
|
||||||
|
@ -150,6 +150,14 @@ int wxDataViewModel::Compare( const wxDataViewItem &item1, const wxDataViewItem
|
|||||||
wxVariant value1,value2;
|
wxVariant value1,value2;
|
||||||
GetValue( value1, item1, m_sortingColumn );
|
GetValue( value1, item1, m_sortingColumn );
|
||||||
GetValue( value2, item2, m_sortingColumn );
|
GetValue( value2, item2, m_sortingColumn );
|
||||||
|
|
||||||
|
if (!m_ascending)
|
||||||
|
{
|
||||||
|
wxVariant temp = value1;
|
||||||
|
value1 = value2;
|
||||||
|
value2 = temp;
|
||||||
|
}
|
||||||
|
|
||||||
if (value1.GetType() == wxT("string"))
|
if (value1.GetType() == wxT("string"))
|
||||||
{
|
{
|
||||||
wxString str1 = value1.GetString();
|
wxString str1 = value1.GetString();
|
||||||
|
@ -56,35 +56,36 @@ class wxGtkTreeModelNode
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
wxGtkTreeModelNode( wxGtkTreeModelNode* parent, const wxDataViewItem &item,
|
wxGtkTreeModelNode( wxGtkTreeModelNode* parent, const wxDataViewItem &item,
|
||||||
wxDataViewModel *model ) :
|
wxDataViewModel *model )
|
||||||
m_children( wxGtkTreeModelNodeCmp )
|
|
||||||
{
|
{
|
||||||
m_parent = parent;
|
m_parent = parent;
|
||||||
m_item = item;
|
m_item = item;
|
||||||
m_model = model;
|
m_model = model;
|
||||||
|
m_children = new wxGtkTreeModelNodes( wxGtkTreeModelNodeCmp );
|
||||||
}
|
}
|
||||||
|
|
||||||
~wxGtkTreeModelNode()
|
~wxGtkTreeModelNode()
|
||||||
{
|
{
|
||||||
size_t count = m_children.GetCount();
|
size_t count = m_children->GetCount();
|
||||||
size_t i;
|
size_t i;
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
wxGtkTreeModelNode *child = m_children[i];
|
wxGtkTreeModelNode *child = m_children->Item( i );
|
||||||
delete child;
|
delete child;
|
||||||
}
|
}
|
||||||
|
delete m_children;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxGtkTreeModelNode* GetParent()
|
wxGtkTreeModelNode* GetParent()
|
||||||
{ return m_parent; }
|
{ return m_parent; }
|
||||||
wxGtkTreeModelNodes &GetChildren()
|
wxGtkTreeModelNodes &GetChildren()
|
||||||
{ return m_children; }
|
{ return *m_children; }
|
||||||
wxGtkTreeModelNode* GetNthChild( unsigned int n )
|
wxGtkTreeModelNode* GetNthChild( unsigned int n )
|
||||||
{ return m_children.Item( n ); }
|
{ return m_children->Item( n ); }
|
||||||
unsigned int Add( wxGtkTreeModelNode* child )
|
unsigned int Add( wxGtkTreeModelNode* child )
|
||||||
{ return m_children.Add( child ); }
|
{ return m_children->Add( child ); }
|
||||||
|
|
||||||
unsigned int GetChildCount() { return m_children.GetCount(); }
|
unsigned int GetChildCount() { return m_children->GetCount(); }
|
||||||
|
|
||||||
wxDataViewItem &GetItem() { return m_item; }
|
wxDataViewItem &GetItem() { return m_item; }
|
||||||
wxDataViewModel *GetModel() { return m_model; }
|
wxDataViewModel *GetModel() { return m_model; }
|
||||||
@ -92,9 +93,11 @@ public:
|
|||||||
bool HasChildren() { return m_hasChildren; }
|
bool HasChildren() { return m_hasChildren; }
|
||||||
void SetHasChildren( bool has ) { m_hasChildren = has; }
|
void SetHasChildren( bool has ) { m_hasChildren = has; }
|
||||||
|
|
||||||
|
void Resort();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxGtkTreeModelNode *m_parent;
|
wxGtkTreeModelNode *m_parent;
|
||||||
wxGtkTreeModelNodes m_children;
|
wxGtkTreeModelNodes *m_children;
|
||||||
wxDataViewItem m_item;
|
wxDataViewItem m_item;
|
||||||
bool m_hasChildren;
|
bool m_hasChildren;
|
||||||
wxDataViewModel *m_model;
|
wxDataViewModel *m_model;
|
||||||
@ -132,6 +135,8 @@ public:
|
|||||||
bool ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item );
|
bool ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item );
|
||||||
bool ItemDeleted( const wxDataViewItem &item );
|
bool ItemDeleted( const wxDataViewItem &item );
|
||||||
|
|
||||||
|
void Resort();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void InitTree();
|
void InitTree();
|
||||||
wxGtkTreeModelNode *FindNode( const wxDataViewItem &item );
|
wxGtkTreeModelNode *FindNode( const wxDataViewItem &item );
|
||||||
@ -553,8 +558,6 @@ void wxgtk_tree_model_set_sort_column_id (GtkTreeSortable *sortabl
|
|||||||
|
|
||||||
// TODO check for equality
|
// TODO check for equality
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
gtk_tree_sortable_sort_column_changed (sortable);
|
gtk_tree_sortable_sort_column_changed (sortable);
|
||||||
|
|
||||||
tree_model->internal->GetDataViewModel()->SetSortingColumn( sort_column_id );
|
tree_model->internal->GetDataViewModel()->SetSortingColumn( sort_column_id );
|
||||||
@ -965,6 +968,7 @@ public:
|
|||||||
virtual bool ItemChanged( const wxDataViewItem &item );
|
virtual bool ItemChanged( const wxDataViewItem &item );
|
||||||
virtual bool ValueChanged( const wxDataViewItem &item, unsigned int col );
|
virtual bool ValueChanged( const wxDataViewItem &item, unsigned int col );
|
||||||
virtual bool Cleared();
|
virtual bool Cleared();
|
||||||
|
virtual void Resort();
|
||||||
|
|
||||||
GtkWxTreeModel *m_wxgtk_model;
|
GtkWxTreeModel *m_wxgtk_model;
|
||||||
wxDataViewModel *m_wx_model;
|
wxDataViewModel *m_wx_model;
|
||||||
@ -1024,6 +1028,11 @@ bool wxGtkDataViewModelNotifier::ItemDeleted( const wxDataViewItem &item )
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxGtkDataViewModelNotifier::Resort()
|
||||||
|
{
|
||||||
|
m_owner->GtkGetInternal()->Resort();
|
||||||
|
}
|
||||||
|
|
||||||
bool wxGtkDataViewModelNotifier::ItemChanged( const wxDataViewItem &item )
|
bool wxGtkDataViewModelNotifier::ItemChanged( const wxDataViewItem &item )
|
||||||
{
|
{
|
||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
@ -2069,6 +2078,33 @@ void wxDataViewColumn::SetWidth( int width )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
// wxGtkTreeModelNode
|
||||||
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void wxGtkTreeModelNode::Resort()
|
||||||
|
{
|
||||||
|
wxGtkTreeModelNodes *new_array = new wxGtkTreeModelNodes( wxGtkTreeModelNodeCmp );
|
||||||
|
|
||||||
|
size_t pos;
|
||||||
|
size_t count = m_children->GetCount();
|
||||||
|
|
||||||
|
for (pos = 0; pos < count; pos++)
|
||||||
|
{
|
||||||
|
new_array->Add( m_children->Item( 0 ) );
|
||||||
|
m_children->RemoveAt( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
delete m_children;
|
||||||
|
m_children = new_array;
|
||||||
|
|
||||||
|
for (pos = 0; pos < count; pos++)
|
||||||
|
{
|
||||||
|
wxGtkTreeModelNode *node = m_children->Item( pos );
|
||||||
|
node->Resort();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
// wxDataViewCtrlInternal
|
// wxDataViewCtrlInternal
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
@ -2109,6 +2145,11 @@ void wxDataViewCtrlInternal::BuildBranch( wxGtkTreeModelNode *node )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxDataViewCtrlInternal::Resort()
|
||||||
|
{
|
||||||
|
m_root->Resort();
|
||||||
|
}
|
||||||
|
|
||||||
bool wxDataViewCtrlInternal::ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item )
|
bool wxDataViewCtrlInternal::ItemAdded( const wxDataViewItem &parent, const wxDataViewItem &item )
|
||||||
{
|
{
|
||||||
wxGtkTreeModelNode *parent_node = FindNode( parent );
|
wxGtkTreeModelNode *parent_node = FindNode( parent );
|
||||||
|
Loading…
Reference in New Issue
Block a user