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:
@@ -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"); }
|
||||
|
@@ -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
|
||||
|
@@ -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;
|
||||
|
||||
|
Reference in New Issue
Block a user