Don't make inert toggle/choice wxDataViewCtrl cell editable in wxOSX

Don't disable all inert renderers as this results in ugly "disabled"
look for some of them (see 6e885992f5),
but do disable the renderers that would be editable otherwise, such as
wxDataViewChoiceRenderer and wxDataViewToggleRenderer, in wxOSX as it
shouldn't be possible to change value of the inert cells.

See https://github.com/wxWidgets/wxWidgets/pull/707

Closes #18056.
This commit is contained in:
Vadim Zeitlin
2018-01-31 03:11:07 +01:00
parent 2fb4e11174
commit 3a16250303
3 changed files with 30 additions and 24 deletions

View File

@@ -42,6 +42,29 @@ private:
wxDECLARE_DYNAMIC_CLASS_NO_COPY(wxDataViewCustomRenderer);
};
// ---------------------------------------------------------------------------
// This is a Mac-specific class that should be used as the base class for the
// renderers that should be disabled when they're inert, to prevent the user
// from editing them.
// ---------------------------------------------------------------------------
class wxOSXDataViewDisabledInertRenderer : public wxDataViewRenderer
{
protected:
wxOSXDataViewDisabledInertRenderer(const wxString& varianttype,
wxDataViewCellMode mode,
int alignment)
: wxDataViewRenderer(varianttype, mode, alignment)
{
}
virtual void SetEnabled(bool enabled) wxOVERRIDE
{
wxDataViewRenderer::SetEnabled(enabled &&
GetMode() != wxDATAVIEW_CELL_INERT);
}
};
// ---------------------------------------------------------
// wxDataViewTextRenderer
// ---------------------------------------------------------
@@ -97,7 +120,8 @@ private:
// wxDataViewChoiceRenderer
// -------------------------------------
class WXDLLIMPEXP_ADV wxDataViewChoiceRenderer: public wxDataViewRenderer
class WXDLLIMPEXP_ADV wxDataViewChoiceRenderer
: public wxOSXDataViewDisabledInertRenderer
{
public:
wxDataViewChoiceRenderer(const wxArrayString& choices,
@@ -164,7 +188,8 @@ private:
// wxDataViewToggleRenderer
// ---------------------------------------------------------
class WXDLLIMPEXP_ADV wxDataViewToggleRenderer: public wxDataViewRenderer
class WXDLLIMPEXP_ADV wxDataViewToggleRenderer
: public wxOSXDataViewDisabledInertRenderer
{
public:
static wxString GetDefaultType() { return wxS("bool"); }

View File

@@ -862,20 +862,7 @@ wxDataViewRendererBase::PrepareForItem(const wxDataViewModel *model,
// Finally determine the enabled/disabled state and apply it, even to the
// empty cells.
bool enabled = true;
switch ( GetMode() )
{
case wxDATAVIEW_CELL_INERT:
enabled = false;
break;
case wxDATAVIEW_CELL_ACTIVATABLE:
case wxDATAVIEW_CELL_EDITABLE:
enabled = model->IsEnabled(item, column);
break;
}
SetEnabled(enabled);
SetEnabled(model->IsEnabled(item, column));
}
wxCATCH_ALL

View File

@@ -2897,12 +2897,6 @@ void wxDataViewRenderer::SetAttr(const wxDataViewItemAttr& attr)
void wxDataViewRenderer::SetEnabled(bool enabled)
{
// setting the appearance to disabled grey should only be done for
// the active cells which are disabled, not for the cells which can
// never be edited at all
if ( GetMode() == wxDATAVIEW_CELL_INERT )
enabled = true;
[GetNativeData()->GetItemCell() setEnabled:enabled];
}
@@ -3071,7 +3065,7 @@ wxIMPLEMENT_CLASS(wxDataViewBitmapRenderer, wxDataViewRenderer);
wxDataViewChoiceRenderer::wxDataViewChoiceRenderer(const wxArrayString& choices,
wxDataViewCellMode mode,
int alignment)
: wxDataViewRenderer(wxT("string"), mode, alignment),
: wxOSXDataViewDisabledInertRenderer(wxT("string"), mode, alignment),
m_choices(choices)
{
NSPopUpButtonCell* cell;
@@ -3318,7 +3312,7 @@ wxIMPLEMENT_ABSTRACT_CLASS(wxDataViewIconTextRenderer,wxDataViewRenderer);
wxDataViewToggleRenderer::wxDataViewToggleRenderer(const wxString& varianttype,
wxDataViewCellMode mode,
int align)
: wxDataViewRenderer(varianttype,mode)
: wxOSXDataViewDisabledInertRenderer(varianttype, mode, align)
{
NSButtonCell* cell;