Refactor wxDataViewEvent constructors
Take care of all the common stuff such as setting the event object and the model, which is used for all events, in the ctor. Also set both the column pointer and the column index at once instead of having two separate setters for them which could result in inconsistent event objects (and did, as sometimes only one or only the other field was set). This makes the code shorter (we save 160 lines) and more clear and ensures that everything is always initialized. Closes #12649.
This commit is contained in:
@@ -293,12 +293,7 @@ private:
|
||||
bool SendEvent(wxEventType type, unsigned int n)
|
||||
{
|
||||
wxDataViewCtrl * const owner = GetOwner();
|
||||
wxDataViewEvent event(type, owner->GetId());
|
||||
|
||||
event.SetEventObject(owner);
|
||||
event.SetColumn(n);
|
||||
event.SetDataViewColumn(owner->GetColumn(n));
|
||||
event.SetModel(owner->GetModel());
|
||||
wxDataViewEvent event(type, owner, owner->GetColumn(n));
|
||||
|
||||
// for events created by wxDataViewHeaderWindow the
|
||||
// row / value fields are not valid
|
||||
@@ -1658,12 +1653,7 @@ wxDragResult wxDataViewMainWindow::OnDragOver( wxDataFormat format, wxCoord x,
|
||||
if ( row < GetRowCount() && xx <= GetEndOfLastCol() )
|
||||
item = GetItemByRow( row );
|
||||
|
||||
wxDataViewModel *model = GetModel();
|
||||
|
||||
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, m_owner->GetId() );
|
||||
event.SetEventObject( m_owner );
|
||||
event.SetItem( item );
|
||||
event.SetModel( model );
|
||||
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, m_owner, item);
|
||||
event.SetDataFormat( format );
|
||||
event.SetDropEffect( def );
|
||||
if ( !m_owner->HandleWindowEvent( event ) || !event.IsAllowed() )
|
||||
@@ -1702,12 +1692,7 @@ bool wxDataViewMainWindow::OnDrop( wxDataFormat format, wxCoord x, wxCoord y )
|
||||
if ( row < GetRowCount() && xx <= GetEndOfLastCol())
|
||||
item = GetItemByRow( row );
|
||||
|
||||
wxDataViewModel *model = GetModel();
|
||||
|
||||
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, m_owner->GetId() );
|
||||
event.SetEventObject( m_owner );
|
||||
event.SetItem( item );
|
||||
event.SetModel( model );
|
||||
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_DROP_POSSIBLE, m_owner, item);
|
||||
event.SetDataFormat( format );
|
||||
if (!m_owner->HandleWindowEvent( event ) || !event.IsAllowed())
|
||||
return false;
|
||||
@@ -1728,14 +1713,9 @@ wxDragResult wxDataViewMainWindow::OnData( wxDataFormat format, wxCoord x, wxCoo
|
||||
if ( row < GetRowCount() && xx <= GetEndOfLastCol() )
|
||||
item = GetItemByRow( row );
|
||||
|
||||
wxDataViewModel *model = GetModel();
|
||||
|
||||
wxCustomDataObject *obj = (wxCustomDataObject *) GetDropTarget()->GetDataObject();
|
||||
|
||||
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_DROP, m_owner->GetId() );
|
||||
event.SetEventObject( m_owner );
|
||||
event.SetItem( item );
|
||||
event.SetModel( model );
|
||||
wxDataViewEvent event(wxEVT_DATAVIEW_ITEM_DROP, m_owner, item);
|
||||
event.SetDataFormat( format );
|
||||
event.SetDataSize( obj->GetSize() );
|
||||
event.SetDataBuffer( obj->GetData() );
|
||||
@@ -1851,11 +1831,9 @@ void wxDataViewMainWindow::OnPaint( wxPaintEvent &WXUNUSED(event) )
|
||||
unsigned int item_last = item_start + item_count;
|
||||
|
||||
// Send the event to wxDataViewCtrl itself.
|
||||
wxWindow * const parent = GetParent();
|
||||
wxDataViewEvent cache_event(wxEVT_DATAVIEW_CACHE_HINT, parent->GetId());
|
||||
cache_event.SetEventObject(parent);
|
||||
wxDataViewEvent cache_event(wxEVT_DATAVIEW_CACHE_HINT, m_owner, NULL);
|
||||
cache_event.SetCache(item_start, item_last - 1);
|
||||
parent->ProcessWindowEvent(cache_event);
|
||||
m_owner->ProcessWindowEvent(cache_event);
|
||||
|
||||
// compute which columns needs to be redrawn
|
||||
unsigned int cols = GetOwner()->GetColumnCount();
|
||||
@@ -2537,12 +2515,8 @@ bool wxDataViewMainWindow::ItemChanged(const wxDataViewItem & item)
|
||||
GetOwner()->InvalidateColBestWidths();
|
||||
|
||||
// Send event
|
||||
wxWindow *parent = GetParent();
|
||||
wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, parent->GetId());
|
||||
le.SetEventObject(parent);
|
||||
le.SetModel(GetModel());
|
||||
le.SetItem(item);
|
||||
parent->ProcessWindowEvent(le);
|
||||
wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, m_owner, item);
|
||||
m_owner->ProcessWindowEvent(le);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -2568,14 +2542,9 @@ bool wxDataViewMainWindow::ValueChanged( const wxDataViewItem & item, unsigned i
|
||||
GetOwner()->InvalidateColBestWidth(view_column);
|
||||
|
||||
// Send event
|
||||
wxWindow *parent = GetParent();
|
||||
wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, parent->GetId());
|
||||
le.SetEventObject(parent);
|
||||
le.SetModel(GetModel());
|
||||
le.SetItem(item);
|
||||
le.SetColumn(view_column);
|
||||
le.SetDataViewColumn(GetOwner()->GetColumn(view_column));
|
||||
parent->ProcessWindowEvent(le);
|
||||
wxDataViewColumn* const column = m_owner->GetColumn(view_column);
|
||||
wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_VALUE_CHANGED, m_owner, column, item);
|
||||
m_owner->ProcessWindowEvent(le);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -2824,14 +2793,8 @@ bool wxDataViewMainWindow::IsRowSelected( unsigned int row )
|
||||
|
||||
void wxDataViewMainWindow::SendSelectionChangedEvent( const wxDataViewItem& item)
|
||||
{
|
||||
wxWindow *parent = GetParent();
|
||||
wxDataViewEvent le(wxEVT_DATAVIEW_SELECTION_CHANGED, parent->GetId());
|
||||
|
||||
le.SetEventObject(parent);
|
||||
le.SetModel(GetModel());
|
||||
le.SetItem( item );
|
||||
|
||||
parent->ProcessWindowEvent(le);
|
||||
wxDataViewEvent le(wxEVT_DATAVIEW_SELECTION_CHANGED, m_owner, item);
|
||||
m_owner->ProcessWindowEvent(le);
|
||||
}
|
||||
|
||||
void wxDataViewMainWindow::RefreshRow( unsigned int row )
|
||||
@@ -3122,14 +3085,8 @@ bool
|
||||
wxDataViewMainWindow::SendExpanderEvent(wxEventType type,
|
||||
const wxDataViewItem& item)
|
||||
{
|
||||
wxWindow *parent = GetParent();
|
||||
wxDataViewEvent le(type, parent->GetId());
|
||||
|
||||
le.SetEventObject(parent);
|
||||
le.SetModel(GetModel());
|
||||
le.SetItem( item );
|
||||
|
||||
return !parent->ProcessWindowEvent(le) || le.IsAllowed();
|
||||
wxDataViewEvent le(type, m_owner, item);
|
||||
return !m_owner->ProcessWindowEvent(le) || le.IsAllowed();
|
||||
}
|
||||
|
||||
bool wxDataViewMainWindow::IsExpanded( unsigned int row ) const
|
||||
@@ -3709,13 +3666,8 @@ void wxDataViewMainWindow::OnChar( wxKeyEvent &event )
|
||||
|
||||
const wxDataViewItem item = GetItemByRow(m_currentRow);
|
||||
|
||||
wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_ACTIVATED,
|
||||
parent->GetId());
|
||||
le.SetItem(item);
|
||||
le.SetEventObject(parent);
|
||||
le.SetModel(GetModel());
|
||||
|
||||
if ( parent->ProcessWindowEvent(le) )
|
||||
wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_ACTIVATED, m_owner, item);
|
||||
if ( m_owner->ProcessWindowEvent(le) )
|
||||
break;
|
||||
// else: fall through to WXK_SPACE handling
|
||||
}
|
||||
@@ -4121,19 +4073,8 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
||||
// the other ones.
|
||||
if (event.RightUp())
|
||||
{
|
||||
wxWindow *parent = GetParent();
|
||||
wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_CONTEXT_MENU, parent->GetId());
|
||||
le.SetEventObject(parent);
|
||||
le.SetModel(model);
|
||||
|
||||
if ( item.IsOk() && col )
|
||||
{
|
||||
le.SetItem( item );
|
||||
le.SetColumn( col->GetModelColumn() );
|
||||
le.SetDataViewColumn( col );
|
||||
}
|
||||
|
||||
parent->ProcessWindowEvent(le);
|
||||
wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_CONTEXT_MENU, m_owner, col, item);
|
||||
m_owner->ProcessWindowEvent(le);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -4162,10 +4103,7 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
||||
wxDataViewItem itemDragged = GetItemByRow( drag_item_row );
|
||||
|
||||
// Notify cell about drag
|
||||
wxDataViewEvent evt( wxEVT_DATAVIEW_ITEM_BEGIN_DRAG, m_owner->GetId() );
|
||||
evt.SetEventObject( m_owner );
|
||||
evt.SetItem( itemDragged );
|
||||
evt.SetModel( model );
|
||||
wxDataViewEvent evt(wxEVT_DATAVIEW_ITEM_BEGIN_DRAG, m_owner, itemDragged);
|
||||
if (!m_owner->HandleWindowEvent( evt ))
|
||||
return;
|
||||
|
||||
@@ -4279,15 +4217,8 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
|
||||
{
|
||||
if ( !hoverOverExpander && (current == m_lineLastClicked) )
|
||||
{
|
||||
wxWindow *parent = GetParent();
|
||||
wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_ACTIVATED, parent->GetId());
|
||||
le.SetItem( item );
|
||||
le.SetColumn( col->GetModelColumn() );
|
||||
le.SetDataViewColumn( col );
|
||||
le.SetEventObject(parent);
|
||||
le.SetModel(GetModel());
|
||||
|
||||
if ( parent->ProcessWindowEvent(le) )
|
||||
wxDataViewEvent le(wxEVT_DATAVIEW_ITEM_ACTIVATED, m_owner, col, item);
|
||||
if ( m_owner->ProcessWindowEvent(le) )
|
||||
{
|
||||
// Item activation was handled from the user code.
|
||||
return;
|
||||
|
Reference in New Issue
Block a user