Implement rest of MSW's wxDataViewCtrl's native column reordering

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@50940 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling 2007-12-28 23:07:30 +00:00
parent a5b4330420
commit fc8c1a15b2
2 changed files with 32 additions and 4 deletions

View File

@ -469,6 +469,9 @@ public: // utility functions not part of the API
return GetClientSize().GetWidth() / GetColumnCount();
}
// called by header window after reorder
void ColumnMoved( wxDataViewColumn* col, unsigned int new_pos );
// updates the header window after a change in a column setting
void OnColumnChange();

View File

@ -138,6 +138,8 @@ public:
// the column count
virtual void UpdateDisplay();
virtual void OnInternalIdle();
// called Refresh afterwards
virtual void ScrollWindow(int dx, int dy, const wxRect *rect = NULL);
@ -157,6 +159,7 @@ protected:
int m_scrollOffsetX;
int m_buttonHeight;
bool m_delayedUpdate;
private:
DECLARE_DYNAMIC_CLASS(wxDataViewHeaderWindowMSW)
@ -1281,6 +1284,7 @@ bool wxDataViewHeaderWindowMSW::Create( wxDataViewCtrl *parent, wxWindowID id,
m_owner = parent;
m_scrollOffsetX = 0;
m_delayedUpdate = false;
m_buttonHeight = wxRendererNative::Get().GetHeaderButtonHeight( this );
int x = pos.x == wxDefaultCoord ? 0 : pos.x,
@ -1333,7 +1337,16 @@ wxDataViewHeaderWindowMSW::~wxDataViewHeaderWindow()
wxSize wxDataViewHeaderWindowMSW::DoGetBestSize() const
{
return wxSize(80, m_buttonHeight );
return wxSize( 80, m_buttonHeight+2 );
}
void wxDataViewHeaderWindowMSW::OnInternalIdle()
{
if (m_delayedUpdate)
{
m_delayedUpdate = false;
UpdateDisplay();
}
}
void wxDataViewHeaderWindowMSW::UpdateDisplay()
@ -1456,7 +1469,10 @@ bool wxDataViewHeaderWindowMSW::MSWOnNotify(int idCtrl, WXLPARAM lParam, WXLPARA
case HDN_ENDDRAG: // user has finished reordering a column
{
// TODO: How to query the new position here?
wxDataViewColumn *col = GetColumn(nmHDR->iItem);
unsigned int new_pos = nmHDR->pitem->iOrder;
m_owner->ColumnMoved( col, new_pos );
m_delayedUpdate = true;
}
break;
@ -3965,6 +3981,15 @@ wxDataViewColumn* wxDataViewCtrl::GetColumn( unsigned int pos ) const
return NULL;
}
void wxDataViewCtrl::ColumnMoved( wxDataViewColumn* col, unsigned int new_pos )
{
if (new_pos > m_cols.GetCount()) return;
m_cols.DeleteObject( col );
m_cols.Insert( new_pos, col );
m_clientArea->UpdateDisplay();
}
bool wxDataViewCtrl::DeleteColumn( wxDataViewColumn *column )
{
wxDataViewColumnList::compatibility_iterator ret = m_cols.Find( column );