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:
Vadim Zeitlin
2006-10-22 23:27:10 +00:00
parent 2cbf701441
commit 4223cec504
3 changed files with 22 additions and 40 deletions

View File

@@ -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;

View File

@@ -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;

View File

@@ -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 )
{ {