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); 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 // wxDataViewTextRenderer
// --------------------------------------------------------- // ---------------------------------------------------------
@@ -97,7 +120,8 @@ private:
// wxDataViewChoiceRenderer // wxDataViewChoiceRenderer
// ------------------------------------- // -------------------------------------
class WXDLLIMPEXP_ADV wxDataViewChoiceRenderer: public wxDataViewRenderer class WXDLLIMPEXP_ADV wxDataViewChoiceRenderer
: public wxOSXDataViewDisabledInertRenderer
{ {
public: public:
wxDataViewChoiceRenderer(const wxArrayString& choices, wxDataViewChoiceRenderer(const wxArrayString& choices,
@@ -164,7 +188,8 @@ private:
// wxDataViewToggleRenderer // wxDataViewToggleRenderer
// --------------------------------------------------------- // ---------------------------------------------------------
class WXDLLIMPEXP_ADV wxDataViewToggleRenderer: public wxDataViewRenderer class WXDLLIMPEXP_ADV wxDataViewToggleRenderer
: public wxOSXDataViewDisabledInertRenderer
{ {
public: public:
static wxString GetDefaultType() { return wxS("bool"); } 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 // Finally determine the enabled/disabled state and apply it, even to the
// empty cells. // empty cells.
bool enabled = true; SetEnabled(model->IsEnabled(item, column));
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);
} }
wxCATCH_ALL wxCATCH_ALL

View File

@@ -2897,12 +2897,6 @@ void wxDataViewRenderer::SetAttr(const wxDataViewItemAttr& attr)
void wxDataViewRenderer::SetEnabled(bool enabled) 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]; [GetNativeData()->GetItemCell() setEnabled:enabled];
} }
@@ -3071,7 +3065,7 @@ wxIMPLEMENT_CLASS(wxDataViewBitmapRenderer, wxDataViewRenderer);
wxDataViewChoiceRenderer::wxDataViewChoiceRenderer(const wxArrayString& choices, wxDataViewChoiceRenderer::wxDataViewChoiceRenderer(const wxArrayString& choices,
wxDataViewCellMode mode, wxDataViewCellMode mode,
int alignment) int alignment)
: wxDataViewRenderer(wxT("string"), mode, alignment), : wxOSXDataViewDisabledInertRenderer(wxT("string"), mode, alignment),
m_choices(choices) m_choices(choices)
{ {
NSPopUpButtonCell* cell; NSPopUpButtonCell* cell;
@@ -3318,7 +3312,7 @@ wxIMPLEMENT_ABSTRACT_CLASS(wxDataViewIconTextRenderer,wxDataViewRenderer);
wxDataViewToggleRenderer::wxDataViewToggleRenderer(const wxString& varianttype, wxDataViewToggleRenderer::wxDataViewToggleRenderer(const wxString& varianttype,
wxDataViewCellMode mode, wxDataViewCellMode mode,
int align) int align)
: wxDataViewRenderer(varianttype,mode) : wxOSXDataViewDisabledInertRenderer(varianttype, mode, align)
{ {
NSButtonCell* cell; NSButtonCell* cell;