Merge branch 'collpane-bestsize'

Fix generic collapsible pane best size determination.

See https://github.com/wxWidgets/wxWidgets/pull/1580
This commit is contained in:
Vadim Zeitlin
2019-10-01 20:17:52 +02:00
4 changed files with 31 additions and 13 deletions

View File

@@ -73,7 +73,7 @@ public:
protected:
// overridden methods
virtual wxSize DoGetBestSize() const wxOVERRIDE;
virtual wxSize DoGetBestClientSize() const wxOVERRIDE;
int GetBorder() const;

View File

@@ -77,17 +77,28 @@ bool wxGenericCollapsibleHeaderCtrl::Create(wxWindow *parent,
wxSize wxGenericCollapsibleHeaderCtrl::DoGetBestClientSize() const
{
wxClientDC dc(const_cast<wxGenericCollapsibleHeaderCtrl*>(this));
wxSize btnSize = wxRendererNative::Get().GetCollapseButtonSize(const_cast<wxGenericCollapsibleHeaderCtrl*>(this), dc);
wxGenericCollapsibleHeaderCtrl* const
self = const_cast<wxGenericCollapsibleHeaderCtrl*>(this);
// The code here parallels that of OnPaint() -- except without drawing.
wxClientDC dc(self);
wxSize size = wxRendererNative::Get().GetCollapseButtonSize(self, dc);
wxString text;
wxControl::FindAccelIndex(GetLabel(), &text);
wxSize textSize = dc.GetTextExtent(text);
// Add some padding if the label is not empty
if ( textSize.x > 0 )
textSize.x += FromDIP(4);
return wxSize(btnSize.x + textSize.x,
wxMax(textSize.y, btnSize.y));
const wxSize textSize = dc.GetTextExtent(text);
size.x += FromDIP(2) + textSize.x;
if ( textSize.y > size.y )
size.y = textSize.y;
#ifdef __WXMSW__
size.IncBy(1);
#endif // __WXMSW__
return size;
}
void wxGenericCollapsibleHeaderCtrl::SetCollapsed(bool collapsed)

View File

@@ -84,8 +84,7 @@ bool wxGenericCollapsiblePane::Create(wxWindow *parent,
m_pButton = new wxCollapsibleHeaderCtrl(this, wxID_ANY, label, wxPoint(0, 0),
wxDefaultSize);
// on other platforms we put the static line and the button horizontally
m_sz->Add(m_pButton, 0, wxLEFT|wxTOP|wxBOTTOM, GetBorder());
m_sz->Add(m_pButton, wxSizerFlags().Border(wxALL, GetBorder()));
// FIXME: at least under wxGTK1 the background is black if we don't do
// this, no idea why...
@@ -112,7 +111,7 @@ wxGenericCollapsiblePane::~wxGenericCollapsiblePane()
wxDELETE(m_sz);
}
wxSize wxGenericCollapsiblePane::DoGetBestSize() const
wxSize wxGenericCollapsiblePane::DoGetBestClientSize() const
{
// NB: do not use GetSize() but rather GetMinSize()
wxSize sz = m_sz->GetMinSize();

View File

@@ -220,7 +220,15 @@ bool wxOSXDataViewModelNotifier::ValueChanged(wxDataViewItem const& item, unsign
bool wxOSXDataViewModelNotifier::Cleared()
{
return m_DataViewCtrlPtr->GetDataViewPeer()->Reload();
// As when individual items are deleted, we must ensure that we don't touch
// the model item possibly being edited, as it's not valid any more.
m_DataViewCtrlPtr->SetDeleting(true);
const bool rc = m_DataViewCtrlPtr->GetDataViewPeer()->Reload();
m_DataViewCtrlPtr->SetDeleting(false);
return rc;
}
void wxOSXDataViewModelNotifier::Resort()