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