Fix activation handling in generic wxDataViewCtrl renderers.

Handling of activation in the generic implementation of standard renderers was
broken since r62589 which stopped calling their Activate() method. Restore it
by introducing a special WXOnActivate() replacing it (but clearly marked as
private and implementation-only) and calling it instead.

Closes #11460.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64654 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-06-20 17:43:30 +00:00
parent ed0a9eca57
commit 6218600646
3 changed files with 46 additions and 24 deletions

View File

@@ -844,12 +844,12 @@ bool wxDataViewToggleRenderer::Render( wxRect cell, wxDC *dc, int WXUNUSED(state
return true;
}
bool wxDataViewToggleRenderer::Activate( wxRect WXUNUSED(cell),
wxDataViewModel *model,
const wxDataViewItem & item, unsigned int col)
void wxDataViewToggleRenderer::WXOnActivate(wxDataViewModel *model,
const wxVariant& valueOld,
const wxDataViewItem & item,
unsigned int col)
{
model->ChangeValue(!m_toggle, item, col);
return true;
model->ChangeValue(!valueOld.GetBool(), item, col);
}
wxSize wxDataViewToggleRenderer::GetSize() const
@@ -1005,24 +1005,23 @@ wxSize wxDataViewDateRenderer::GetSize() const
return wxSize(x,y+d);
}
bool wxDataViewDateRenderer::Activate( wxRect WXUNUSED(cell), wxDataViewModel *model,
const wxDataViewItem & item, unsigned int col )
void wxDataViewDateRenderer::WXOnActivate(wxDataViewModel *model,
const wxVariant& valueOld,
const wxDataViewItem & item,
unsigned int col )
{
wxVariant variant;
model->GetValue( variant, item, col );
wxDateTime value = variant.GetDateTime();
wxDateTime dtOld = valueOld.GetDateTime();
#if wxUSE_DATE_RENDERER_POPUP
wxDataViewDateRendererPopupTransient *popup = new wxDataViewDateRendererPopupTransient(
GetOwner()->GetOwner()->GetParent(), &value, model, item, col);
GetOwner()->GetOwner()->GetParent(), &dtOld, model, item, col);
wxPoint pos = wxGetMousePosition();
popup->Move( pos );
popup->Layout();
popup->Popup( popup->m_cal );
#else // !wxUSE_DATE_RENDERER_POPUP
wxMessageBox(value.Format());
wxMessageBox(dtOld.Format());
#endif // wxUSE_DATE_RENDERER_POPUP/!wxUSE_DATE_RENDERER_POPUP
return true;
}
// ---------------------------------------------------------
@@ -3585,14 +3584,20 @@ void wxDataViewMainWindow::OnMouse( wxMouseEvent &event )
{
if ((!ignore_other_columns) && (cell->GetMode() == wxDATAVIEW_CELL_ACTIVATABLE))
{
const unsigned colIdx = col->GetModelColumn();
wxVariant value;
model->GetValue( value, item, colIdx );
cell->WXOnActivate(model, value, item, colIdx);
if ( wxDataViewCustomRenderer *custom = cell->WXGetAsCustom() )
{
wxVariant value;
model->GetValue( value, item, col->GetModelColumn() );
custom->SetValue( value );
cell->SetValue( value );
wxRect cell_rect( xpos, GetLineStart( current ),
col->GetWidth(), GetLineHeight( current ) );
custom->Activate( cell_rect, model, item, col->GetModelColumn() );
custom->Activate( cell_rect, model, item, colIdx );
}
}
else