avoid code duplication between the generic and GTK versions, factor the common code out in OnStateChange()
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42264 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -71,6 +71,10 @@ public:
|
|||||||
virtual wxString GetLabel() const
|
virtual wxString GetLabel() const
|
||||||
{ return m_strLabel; }
|
{ return m_strLabel; }
|
||||||
|
|
||||||
|
|
||||||
|
// implementation only, don't use
|
||||||
|
void OnStateChange(const wxSize& sizeNew);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// overridden methods
|
// overridden methods
|
||||||
virtual wxSize DoGetBestSize() const;
|
virtual wxSize DoGetBestSize() const;
|
||||||
|
@@ -102,21 +102,9 @@ wxString wxGenericCollapsiblePane::GetBtnLabel() const
|
|||||||
return m_strLabel + (IsCollapsed() ? wxT(" >>") : wxT(" <<"));
|
return m_strLabel + (IsCollapsed() ? wxT(" >>") : wxT(" <<"));
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxGenericCollapsiblePane::Collapse(bool collapse)
|
void wxGenericCollapsiblePane::OnStateChange(const wxSize& sz)
|
||||||
{
|
{
|
||||||
// optimization
|
|
||||||
if ( IsCollapsed() == collapse )
|
|
||||||
return;
|
|
||||||
|
|
||||||
// update our state
|
|
||||||
m_pPane->Show(!collapse);
|
|
||||||
|
|
||||||
// update button label
|
|
||||||
// NB: this must be done after updating our "state"
|
|
||||||
m_pButton->SetLabel(GetBtnLabel());
|
|
||||||
|
|
||||||
// minimal size has priority over the best size so set here our min size
|
// minimal size has priority over the best size so set here our min size
|
||||||
wxSize sz = GetBestSize();
|
|
||||||
SetMinSize(sz);
|
SetMinSize(sz);
|
||||||
SetSize(sz);
|
SetSize(sz);
|
||||||
|
|
||||||
@@ -157,6 +145,22 @@ void wxGenericCollapsiblePane::Collapse(bool collapse)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxGenericCollapsiblePane::Collapse(bool collapse)
|
||||||
|
{
|
||||||
|
// optimization
|
||||||
|
if ( IsCollapsed() == collapse )
|
||||||
|
return;
|
||||||
|
|
||||||
|
// update our state
|
||||||
|
m_pPane->Show(!collapse);
|
||||||
|
|
||||||
|
// update button label
|
||||||
|
// NB: this must be done after updating our "state"
|
||||||
|
m_pButton->SetLabel(GetBtnLabel());
|
||||||
|
|
||||||
|
OnStateChange(GetBestSize());
|
||||||
|
}
|
||||||
|
|
||||||
void wxGenericCollapsiblePane::SetLabel(const wxString &label)
|
void wxGenericCollapsiblePane::SetLabel(const wxString &label)
|
||||||
{
|
{
|
||||||
m_strLabel = label;
|
m_strLabel = label;
|
||||||
|
@@ -72,33 +72,7 @@ static void gtk_collapsiblepane_expanded_callback (GObject *object,
|
|||||||
sz = p->m_szCollapsed;
|
sz = p->m_szCollapsed;
|
||||||
}
|
}
|
||||||
|
|
||||||
// minimal size has priority over the best size so set here our min size
|
p->OnStateChange(sz);
|
||||||
p->SetMinSize(sz);
|
|
||||||
p->SetSize(sz);
|
|
||||||
|
|
||||||
wxWindow *top = wxGetTopLevelParent(p);
|
|
||||||
if (top)
|
|
||||||
{
|
|
||||||
// we've changed our size, thus our top level parent needs to relayout
|
|
||||||
// itself
|
|
||||||
top->Layout();
|
|
||||||
|
|
||||||
if (p->IsExpanded())
|
|
||||||
{
|
|
||||||
// force our parent to "fit", i.e. expand so that it can honour
|
|
||||||
// our minimal size
|
|
||||||
top->Fit();
|
|
||||||
}
|
|
||||||
else // correctly
|
|
||||||
{
|
|
||||||
if (top->GetSizer())
|
|
||||||
top->GetSizer()->SetSizeHints(top);
|
|
||||||
|
|
||||||
// use SetClientSize() and not SetSize() otherwise the size for
|
|
||||||
// e.g. a wxFrame with a menubar wouldn't be correctly set
|
|
||||||
top->SetClientSize(sz);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( p->m_bIgnoreNextChange )
|
if ( p->m_bIgnoreNextChange )
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user