From 2cbf701441257a130ba79489dcdd37db518cc08e Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Sun, 22 Oct 2006 23:23:12 +0000 Subject: [PATCH] 1. We don't need GetTopLevelParent() here, we already have wxGetTopLevelParent() 2. Don't hardcode button id in the generic version 3. Don't include unneeded headers from the header git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42263 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/generic/collpaneg.h | 48 ++++++++++++-------------------- src/generic/collpaneg.cpp | 51 +++++++++++++++++++++------------- src/gtk/collpane.cpp | 4 +-- 3 files changed, 51 insertions(+), 52 deletions(-) diff --git a/include/wx/generic/collpaneg.h b/include/wx/generic/collpaneg.h index 32f26c17da..b58bf5a395 100644 --- a/include/wx/generic/collpaneg.h +++ b/include/wx/generic/collpaneg.h @@ -12,24 +12,14 @@ #ifndef _WX_COLLAPSABLE_PANE_H_GENERIC_ #define _WX_COLLAPSABLE_PANE_H_GENERIC_ -#include "wx/button.h" - - -// the ID of the wxButton used to collapse/expand the panel -#define wxCP_BUTTON_ID 12356 - -// the number of pixels to leave between the button and the static line and -// between the button and the pane -#define wxCP_MARGIN 10 - // forward declared +class WXDLLEXPORT wxButton; class WXDLLEXPORT wxStaticLine; // class name extern WXDLLEXPORT_DATA(const wxChar) wxGenericCollapsiblePaneNameStr[]; - // ---------------------------------------------------------------------------- // wxGenericCollapsiblePane // ---------------------------------------------------------------------------- @@ -70,34 +60,28 @@ public: const wxString& name = wxGenericCollapsiblePaneNameStr); -public: // public API + // public wxCollapsiblePane API + virtual void Collapse(bool collapse = true); + virtual void SetLabel(const wxString &label); - void Collapse(bool collapse = true); - void SetLabel(const wxString &label); - - bool IsCollapsed() const + virtual bool IsCollapsed() const { return m_pPane==NULL || !m_pPane->IsShown(); } - wxWindow *GetPane() const + virtual wxWindow *GetPane() const { return m_pPane; } - wxString GetLabel() const + virtual wxString GetLabel() const { return m_strLabel; } - wxWindow *GetTopLevelParent(); - -public: // event handlers - - void OnButton(wxCommandEvent &ev); - void OnSize(wxSizeEvent &ev); - -protected: // internal utils +protected: + // overridden methods + virtual wxSize DoGetBestSize() const; + // internal helpers void LayoutChildren(); wxString GetBtnLabel() const; - virtual wxSize DoGetBestSize() const; -protected: + // child controls wxButton *m_pButton; wxStaticLine *m_pStatLine; wxWindow *m_pPane; @@ -106,10 +90,14 @@ protected: wxString m_strLabel; private: + // event handlers + void OnButton(wxCommandEvent &ev); + void OnSize(wxSizeEvent &ev); + DECLARE_DYNAMIC_CLASS(wxGenericCollapsiblePane) DECLARE_EVENT_TABLE() }; -#endif - // _WX_COLLAPSABLE_PANE_H_GENERIC_ +#endif // _WX_COLLAPSABLE_PANE_H_GENERIC_ + diff --git a/src/generic/collpaneg.cpp b/src/generic/collpaneg.cpp index b7e0dd6e9e..962ccce105 100644 --- a/src/generic/collpaneg.cpp +++ b/src/generic/collpaneg.cpp @@ -16,9 +16,22 @@ // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" + +#ifndef WX_PRECOMP + #include "wx/button.h" +#endif // !WX_PRECOMP + #include "wx/collpane.h" #include "wx/statline.h" +// ---------------------------------------------------------------------------- +// constants +// ---------------------------------------------------------------------------- + +// the number of pixels to leave between the button and the static line and +// between the button and the pane +#define wxCP_MARGIN 10 + // ============================================================================ // implementation // ============================================================================ @@ -34,18 +47,19 @@ IMPLEMENT_DYNAMIC_CLASS(wxGenericCollapsiblePane, wxControl) IMPLEMENT_DYNAMIC_CLASS(wxCollapsiblePaneEvent, wxCommandEvent) BEGIN_EVENT_TABLE(wxGenericCollapsiblePane, wxControl) - EVT_BUTTON(wxCP_BUTTON_ID, wxGenericCollapsiblePane::OnButton) + EVT_BUTTON(wxID_ANY, wxGenericCollapsiblePane::OnButton) EVT_SIZE(wxGenericCollapsiblePane::OnSize) END_EVENT_TABLE() -bool wxGenericCollapsiblePane::Create( wxWindow *parent, wxWindowID id, - const wxString& label, - const wxPoint& pos, - const wxSize& size, - long style, - const wxValidator& val, - const wxString& name) +bool wxGenericCollapsiblePane::Create(wxWindow *parent, + wxWindowID id, + const wxString& label, + const wxPoint& pos, + const wxSize& size, + long style, + const wxValidator& val, + const wxString& name) { if ( !wxControl::Create(parent, id, pos, size, style, val, name) ) return false; @@ -53,7 +67,7 @@ bool wxGenericCollapsiblePane::Create( wxWindow *parent, wxWindowID id, m_strLabel = label; // create children; their size & position is set in OnSize() - m_pButton = new wxButton(this, wxCP_BUTTON_ID, GetBtnLabel(), wxPoint(0, 0), + m_pButton = new wxButton(this, wxID_ANY, GetBtnLabel(), wxPoint(0, 0), wxDefaultSize, wxBU_EXACTFIT); m_pStatLine = new wxStaticLine(this, wxID_ANY); m_pPane = new wxWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, @@ -106,7 +120,7 @@ void wxGenericCollapsiblePane::Collapse(bool collapse) SetMinSize(sz); SetSize(sz); - wxWindow *top = GetTopLevelParent(); + wxWindow *top = wxGetTopLevelParent(this); if (top) { // we've changed our size, thus our top level parent needs to relayout @@ -143,15 +157,6 @@ void wxGenericCollapsiblePane::Collapse(bool collapse) } } -wxWindow *wxGenericCollapsiblePane::GetTopLevelParent() -{ - wxWindow *parent = GetParent(); - while (parent && !parent->IsTopLevel()) - parent = parent->GetParent(); - - return parent; -} - void wxGenericCollapsiblePane::SetLabel(const wxString &label) { m_strLabel = label; @@ -183,8 +188,14 @@ void wxGenericCollapsiblePane::LayoutChildren() // wxGenericCollapsiblePane - event handlers //----------------------------------------------------------------------------- -void wxGenericCollapsiblePane::OnButton(wxCommandEvent &WXUNUSED(event)) +void wxGenericCollapsiblePane::OnButton(wxCommandEvent& event) { + if ( event.GetEventObject() != m_pButton ) + { + event.Skip(); + return; + } + Collapse(!IsCollapsed()); // this change was generated by the user - send the event diff --git a/src/gtk/collpane.cpp b/src/gtk/collpane.cpp index 24f0215b2d..9bd6522d51 100644 --- a/src/gtk/collpane.cpp +++ b/src/gtk/collpane.cpp @@ -20,9 +20,9 @@ #ifdef __WXGTK24__ #include "wx/collpane.h" +#include "wx/gtk/private.h" #include -#include const wxChar wxCollapsiblePaneNameStr[] = wxT("CollapsiblePane"); @@ -76,7 +76,7 @@ static void gtk_collapsiblepane_expanded_callback (GObject *object, p->SetMinSize(sz); p->SetSize(sz); - wxWindow *top = p->GetTopLevelParent(); + wxWindow *top = wxGetTopLevelParent(p); if (top) { // we've changed our size, thus our top level parent needs to relayout -- 2.45.2