Factor out wxDataViewRendererBase::NotifyEditingStarted()

Reuse the same code from the generic and native GTK and OS X implementations
of wxDataViewCtrl instead of triplicating it.

This fixes a small discrepancy between the wxOSX version, which didn't see the
model pointer correctly in the generated event, and all the others, but mainly
paves way for future improvements.
This commit is contained in:
Vadim Zeitlin
2015-11-26 01:18:22 +01:00
parent 40502651f9
commit 235e8ebd1a
4 changed files with 25 additions and 21 deletions

View File

@@ -180,6 +180,9 @@ public:
// wxDVR_DEFAULT_ALIGNMENT.
int GetEffectiveAlignment() const;
// Send wxEVT_DATAVIEW_ITEM_EDITING_STARTED event.
void NotifyEditingStarted(const wxDataViewItem& item);
protected:
// These methods are called from PrepareForItem() and should do whatever is
// needed for the current platform to ensure that the item is rendered

View File

@@ -703,15 +703,22 @@ bool wxDataViewRendererBase::StartEditing( const wxDataViewItem &item, wxRect la
m_editorCtrl->SetFocus();
#endif
// Now we should send Editing Started event
NotifyEditingStarted(item);
return true;
}
void wxDataViewRendererBase::NotifyEditingStarted(const wxDataViewItem& item)
{
wxDataViewColumn* const column = GetOwner();
wxDataViewCtrl* const dv_ctrl = column->GetOwner();
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_EDITING_STARTED, dv_ctrl->GetId() );
event.SetDataViewColumn( GetOwner() );
event.SetDataViewColumn( column );
event.SetModel( dv_ctrl->GetModel() );
event.SetItem( item );
event.SetEventObject( dv_ctrl );
dv_ctrl->GetEventHandler()->ProcessEvent( event );
return true;
}
void wxDataViewRendererBase::DestroyEditControl()

View File

@@ -1767,12 +1767,8 @@ wxgtk_renderer_editing_started( GtkCellRenderer *WXUNUSED(cell), GtkCellEditable
wxDataViewColumn *column = wxrenderer->GetOwner();
wxDataViewCtrl *dv = column->GetOwner();
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_EDITING_STARTED, dv->GetId() );
event.SetDataViewColumn( column );
event.SetModel( dv->GetModel() );
wxDataViewItem item(dv->GTKPathToItem(wxGtkTreePath(path)));
event.SetItem( item );
dv->HandleWindowEvent( event );
wxrenderer->NotifyEditingStarted(item);
if (GTK_IS_CELL_EDITABLE(editable))
{

View File

@@ -1886,22 +1886,20 @@ outlineView:(NSOutlineView*)outlineView
wxDataViewColumn* const
col([static_cast<wxDVCNSTableColumn*>(tableColumn) getColumnPointer]);
wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl();
// stop editing of a custom item first (if necessary)
dvc->FinishCustomItemEditing();
// now, send the event:
wxDataViewEvent
event(wxEVT_DATAVIEW_ITEM_EDITING_STARTED,dvc->GetId());
event.SetEventObject(dvc);
event.SetItem(
wxDataViewItemFromItem([self itemAtRow:currentlyEditedRow]));
event.SetColumn(dvc->GetColumnPosition(col));
event.SetDataViewColumn(col);
dvc->GetEventHandler()->ProcessEvent(event);
wxDataViewRenderer* const renderer = col->GetRenderer();
if ( renderer )
{
renderer->NotifyEditingStarted
(
wxDataViewItemFromItem([self itemAtRow:currentlyEditedRow])
);
}
//else: we should always have a renderer but don't crash if for some
// unfathomable reason we don't have it
}
-(void) textDidEndEditing:(NSNotification*)notification