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.
|
// wxDVR_DEFAULT_ALIGNMENT.
|
||||||
int GetEffectiveAlignment() const;
|
int GetEffectiveAlignment() const;
|
||||||
|
|
||||||
|
// Send wxEVT_DATAVIEW_ITEM_EDITING_STARTED event.
|
||||||
|
void NotifyEditingStarted(const wxDataViewItem& item);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// These methods are called from PrepareForItem() and should do whatever is
|
// These methods are called from PrepareForItem() and should do whatever is
|
||||||
// needed for the current platform to ensure that the item is rendered
|
// 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();
|
m_editorCtrl->SetFocus();
|
||||||
#endif
|
#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() );
|
wxDataViewEvent event( wxEVT_DATAVIEW_ITEM_EDITING_STARTED, dv_ctrl->GetId() );
|
||||||
event.SetDataViewColumn( GetOwner() );
|
event.SetDataViewColumn( column );
|
||||||
event.SetModel( dv_ctrl->GetModel() );
|
event.SetModel( dv_ctrl->GetModel() );
|
||||||
event.SetItem( item );
|
event.SetItem( item );
|
||||||
event.SetEventObject( dv_ctrl );
|
event.SetEventObject( dv_ctrl );
|
||||||
dv_ctrl->GetEventHandler()->ProcessEvent( event );
|
dv_ctrl->GetEventHandler()->ProcessEvent( event );
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxDataViewRendererBase::DestroyEditControl()
|
void wxDataViewRendererBase::DestroyEditControl()
|
||||||
|
@@ -1767,12 +1767,8 @@ wxgtk_renderer_editing_started( GtkCellRenderer *WXUNUSED(cell), GtkCellEditable
|
|||||||
|
|
||||||
wxDataViewColumn *column = wxrenderer->GetOwner();
|
wxDataViewColumn *column = wxrenderer->GetOwner();
|
||||||
wxDataViewCtrl *dv = column->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)));
|
wxDataViewItem item(dv->GTKPathToItem(wxGtkTreePath(path)));
|
||||||
event.SetItem( item );
|
wxrenderer->NotifyEditingStarted(item);
|
||||||
dv->HandleWindowEvent( event );
|
|
||||||
|
|
||||||
if (GTK_IS_CELL_EDITABLE(editable))
|
if (GTK_IS_CELL_EDITABLE(editable))
|
||||||
{
|
{
|
||||||
|
@@ -1886,22 +1886,20 @@ outlineView:(NSOutlineView*)outlineView
|
|||||||
wxDataViewColumn* const
|
wxDataViewColumn* const
|
||||||
col([static_cast<wxDVCNSTableColumn*>(tableColumn) getColumnPointer]);
|
col([static_cast<wxDVCNSTableColumn*>(tableColumn) getColumnPointer]);
|
||||||
|
|
||||||
wxDataViewCtrl* const dvc = implementation->GetDataViewCtrl();
|
|
||||||
|
|
||||||
|
|
||||||
// stop editing of a custom item first (if necessary)
|
// stop editing of a custom item first (if necessary)
|
||||||
dvc->FinishCustomItemEditing();
|
dvc->FinishCustomItemEditing();
|
||||||
|
|
||||||
// now, send the event:
|
// now, send the event:
|
||||||
wxDataViewEvent
|
wxDataViewRenderer* const renderer = col->GetRenderer();
|
||||||
event(wxEVT_DATAVIEW_ITEM_EDITING_STARTED,dvc->GetId());
|
if ( renderer )
|
||||||
|
{
|
||||||
event.SetEventObject(dvc);
|
renderer->NotifyEditingStarted
|
||||||
event.SetItem(
|
(
|
||||||
wxDataViewItemFromItem([self itemAtRow:currentlyEditedRow]));
|
wxDataViewItemFromItem([self itemAtRow:currentlyEditedRow])
|
||||||
event.SetColumn(dvc->GetColumnPosition(col));
|
);
|
||||||
event.SetDataViewColumn(col);
|
}
|
||||||
dvc->GetEventHandler()->ProcessEvent(event);
|
//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
|
-(void) textDidEndEditing:(NSNotification*)notification
|
||||||
|
Reference in New Issue
Block a user