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:
@@ -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
|
||||
|
@@ -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()
|
||||
|
@@ -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))
|
||||
{
|
||||
|
@@ -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
|
||||
|
Reference in New Issue
Block a user