diff --git a/include/wx/osx/dvrenderers.h b/include/wx/osx/dvrenderers.h index c62a19ffb5..0aa10473dc 100644 --- a/include/wx/osx/dvrenderers.h +++ b/include/wx/osx/dvrenderers.h @@ -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"); } diff --git a/src/common/datavcmn.cpp b/src/common/datavcmn.cpp index 0f2ccc24b8..008a61ad3d 100644 --- a/src/common/datavcmn.cpp +++ b/src/common/datavcmn.cpp @@ -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 diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm index c48c9c976e..eac9a0fbda 100644 --- a/src/osx/cocoa/dataview.mm +++ b/src/osx/cocoa/dataview.mm @@ -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;