sorting support for generic version (patch 1765087 from Bo)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@47863 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -97,7 +97,7 @@ public:
|
|||||||
virtual bool ValueChanged( const wxDataViewItem &item, unsigned int col ) = 0;
|
virtual bool ValueChanged( const wxDataViewItem &item, unsigned int col ) = 0;
|
||||||
virtual bool Cleared() = 0;
|
virtual bool Cleared() = 0;
|
||||||
|
|
||||||
virtual void Resort() { }
|
virtual void Resort() = 0;
|
||||||
|
|
||||||
void SetOwner( wxDataViewModel *owner ) { m_owner = owner; }
|
void SetOwner( wxDataViewModel *owner ) { m_owner = owner; }
|
||||||
wxDataViewModel *GetOwner() { return m_owner; }
|
wxDataViewModel *GetOwner() { return m_owner; }
|
||||||
|
@@ -161,11 +161,11 @@ public:
|
|||||||
{
|
{
|
||||||
MyMusicModelNode *node = (MyMusicModelNode*) item.GetID();
|
MyMusicModelNode *node = (MyMusicModelNode*) item.GetID();
|
||||||
wxDataViewItem parent( node->GetParent() );
|
wxDataViewItem parent( node->GetParent() );
|
||||||
node->GetParent()->GetChildren().Remove( node );
|
|
||||||
delete node;
|
|
||||||
|
|
||||||
// notify control
|
// notify control
|
||||||
ItemDeleted( parent, item );
|
ItemDeleted( parent, item );
|
||||||
|
node->GetParent()->GetChildren().Remove( node );
|
||||||
|
delete node;
|
||||||
}
|
}
|
||||||
|
|
||||||
// override sorting to always sort branches ascendingly
|
// override sorting to always sort branches ascendingly
|
||||||
|
@@ -246,8 +246,8 @@ void wxDataViewIndexListModel::RowAppended()
|
|||||||
void wxDataViewIndexListModel::RowDeleted( unsigned int row )
|
void wxDataViewIndexListModel::RowDeleted( unsigned int row )
|
||||||
{
|
{
|
||||||
wxDataViewItem item( m_hash[row] );
|
wxDataViewItem item( m_hash[row] );
|
||||||
m_hash.RemoveAt( row );
|
|
||||||
wxDataViewModel::ItemDeleted( wxDataViewItem(0), item );
|
wxDataViewModel::ItemDeleted( wxDataViewItem(0), item );
|
||||||
|
m_hash.RemoveAt( row );
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDataViewIndexListModel::RowChanged( unsigned int row )
|
void wxDataViewIndexListModel::RowChanged( unsigned int row )
|
||||||
|
@@ -347,6 +347,30 @@ public:
|
|||||||
parent->ChangeSubTreeCount(num);
|
parent->ChangeSubTreeCount(num);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Resort()
|
||||||
|
{
|
||||||
|
wxDataViewTreeNodes nds = nodes;
|
||||||
|
wxDataViewTreeLeaves lvs = leaves;
|
||||||
|
nodes.Empty();
|
||||||
|
leaves.Empty();
|
||||||
|
|
||||||
|
int len = nds.GetCount();
|
||||||
|
if(len > 0)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < len; i ++)
|
||||||
|
nodes.Add(nds[i]);
|
||||||
|
for(int i = 0; i < len; i ++)
|
||||||
|
nodes[i]->Resort();
|
||||||
|
}
|
||||||
|
|
||||||
|
len = lvs.GetCount();
|
||||||
|
if(len > 0)
|
||||||
|
{
|
||||||
|
for(int i = 0; i < len; i++)
|
||||||
|
leaves.Add(lvs[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxDataViewTreeNode * parent;
|
wxDataViewTreeNode * parent;
|
||||||
wxDataViewTreeNodes nodes;
|
wxDataViewTreeNodes nodes;
|
||||||
@@ -398,6 +422,8 @@ public:
|
|||||||
bool ItemChanged( const wxDataViewItem &item );
|
bool ItemChanged( const wxDataViewItem &item );
|
||||||
bool ValueChanged( const wxDataViewItem &item, unsigned int col );
|
bool ValueChanged( const wxDataViewItem &item, unsigned int col );
|
||||||
bool Cleared();
|
bool Cleared();
|
||||||
|
void Resort()
|
||||||
|
{ g_model = GetOwner()->GetModel(); m_root->Resort(); UpdateDisplay(); }
|
||||||
|
|
||||||
void SetOwner( wxDataViewCtrl* owner ) { m_owner = owner; }
|
void SetOwner( wxDataViewCtrl* owner ) { m_owner = owner; }
|
||||||
wxDataViewCtrl *GetOwner() { return m_owner; }
|
wxDataViewCtrl *GetOwner() { return m_owner; }
|
||||||
@@ -528,6 +554,8 @@ public:
|
|||||||
{ return m_mainWindow->ValueChanged( item, col ); }
|
{ return m_mainWindow->ValueChanged( item, col ); }
|
||||||
virtual bool Cleared()
|
virtual bool Cleared()
|
||||||
{ return m_mainWindow->Cleared(); }
|
{ return m_mainWindow->Cleared(); }
|
||||||
|
virtual void Resort()
|
||||||
|
{ return m_mainWindow->Resort(); }
|
||||||
|
|
||||||
wxDataViewMainWindow *m_mainWindow;
|
wxDataViewMainWindow *m_mainWindow;
|
||||||
};
|
};
|
||||||
@@ -1149,6 +1177,7 @@ void wxDataViewHeaderWindowMSW::UpdateDisplay()
|
|||||||
// add the updated array of columns to the header control
|
// add the updated array of columns to the header control
|
||||||
unsigned int cols = GetOwner()->GetColumnCount();
|
unsigned int cols = GetOwner()->GetColumnCount();
|
||||||
unsigned int added = 0;
|
unsigned int added = 0;
|
||||||
|
wxDataViewModel * model = GetOwner()->GetModel();
|
||||||
for (unsigned int i = 0; i < cols; i++)
|
for (unsigned int i = 0; i < cols; i++)
|
||||||
{
|
{
|
||||||
wxDataViewColumn *col = GetColumn( i );
|
wxDataViewColumn *col = GetColumn( i );
|
||||||
@@ -1282,6 +1311,30 @@ bool wxDataViewHeaderWindowMSW::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARA
|
|||||||
case HDN_ITEMCLICK:
|
case HDN_ITEMCLICK:
|
||||||
{
|
{
|
||||||
unsigned int idx = GetColumnIdxFromHeader(nmHDR);
|
unsigned int idx = GetColumnIdxFromHeader(nmHDR);
|
||||||
|
wxDataViewModel * model = GetOwner()->GetModel();
|
||||||
|
|
||||||
|
if(nmHDR->iButton == 0)
|
||||||
|
{
|
||||||
|
wxDataViewColumn *col = GetColumn(idx);
|
||||||
|
if(col->IsSortable())
|
||||||
|
{
|
||||||
|
if(model && model->GetSortingColumn() == idx)
|
||||||
|
{
|
||||||
|
bool order = col->IsSortOrderAscending();
|
||||||
|
col->SetSortOrder(!order);
|
||||||
|
model->SetSortOrderAscending(!order);
|
||||||
|
}
|
||||||
|
else if(model)
|
||||||
|
{
|
||||||
|
model->SetSortingColumn(idx);
|
||||||
|
model->SetSortOrderAscending(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
UpdateDisplay();
|
||||||
|
if(model)
|
||||||
|
model->Resort();
|
||||||
|
}
|
||||||
|
|
||||||
wxEventType evt = nmHDR->iButton == 0 ?
|
wxEventType evt = nmHDR->iButton == 0 ?
|
||||||
wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK :
|
wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK :
|
||||||
wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK;
|
wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_RIGHT_CLICK;
|
||||||
@@ -1923,8 +1976,7 @@ bool wxDataViewMainWindow::ItemDeleted(const wxDataViewItem& parent,
|
|||||||
g_model = GetOwner()->GetModel();
|
g_model = GetOwner()->GetModel();
|
||||||
|
|
||||||
wxDataViewTreeNode * node;
|
wxDataViewTreeNode * node;
|
||||||
wxDataViewItem parent_item = g_model->GetParent( item );
|
node = FindNode(parent);
|
||||||
node = FindNode(parent_item);
|
|
||||||
|
|
||||||
if( node == NULL || node->GetChildren().Index( item.GetID() ) == wxNOT_FOUND )
|
if( node == NULL || node->GetChildren().Index( item.GetID() ) == wxNOT_FOUND )
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user