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
This commit is contained in:
Vadim Zeitlin
2006-10-22 23:23:12 +00:00
parent ff928a273c
commit 2cbf701441
3 changed files with 51 additions and 52 deletions

View File

@@ -12,24 +12,14 @@
#ifndef _WX_COLLAPSABLE_PANE_H_GENERIC_ #ifndef _WX_COLLAPSABLE_PANE_H_GENERIC_
#define _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 // forward declared
class WXDLLEXPORT wxButton;
class WXDLLEXPORT wxStaticLine; class WXDLLEXPORT wxStaticLine;
// class name // class name
extern WXDLLEXPORT_DATA(const wxChar) wxGenericCollapsiblePaneNameStr[]; extern WXDLLEXPORT_DATA(const wxChar) wxGenericCollapsiblePaneNameStr[];
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
// wxGenericCollapsiblePane // wxGenericCollapsiblePane
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@@ -70,34 +60,28 @@ public:
const wxString& name = wxGenericCollapsiblePaneNameStr); 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); virtual bool IsCollapsed() const
void SetLabel(const wxString &label);
bool IsCollapsed() const
{ return m_pPane==NULL || !m_pPane->IsShown(); } { return m_pPane==NULL || !m_pPane->IsShown(); }
wxWindow *GetPane() const virtual wxWindow *GetPane() const
{ return m_pPane; } { return m_pPane; }
wxString GetLabel() const virtual wxString GetLabel() const
{ return m_strLabel; } { return m_strLabel; }
wxWindow *GetTopLevelParent(); protected:
// overridden methods
public: // event handlers virtual wxSize DoGetBestSize() const;
void OnButton(wxCommandEvent &ev);
void OnSize(wxSizeEvent &ev);
protected: // internal utils
// internal helpers
void LayoutChildren(); void LayoutChildren();
wxString GetBtnLabel() const; wxString GetBtnLabel() const;
virtual wxSize DoGetBestSize() const;
protected:
// child controls
wxButton *m_pButton; wxButton *m_pButton;
wxStaticLine *m_pStatLine; wxStaticLine *m_pStatLine;
wxWindow *m_pPane; wxWindow *m_pPane;
@@ -106,10 +90,14 @@ protected:
wxString m_strLabel; wxString m_strLabel;
private: private:
// event handlers
void OnButton(wxCommandEvent &ev);
void OnSize(wxSizeEvent &ev);
DECLARE_DYNAMIC_CLASS(wxGenericCollapsiblePane) DECLARE_DYNAMIC_CLASS(wxGenericCollapsiblePane)
DECLARE_EVENT_TABLE() DECLARE_EVENT_TABLE()
}; };
#endif #endif // _WX_COLLAPSABLE_PANE_H_GENERIC_
// _WX_COLLAPSABLE_PANE_H_GENERIC_

View File

@@ -16,9 +16,22 @@
// For compilers that support precompilation, includes "wx.h". // For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h" #include "wx/wxprec.h"
#ifndef WX_PRECOMP
#include "wx/button.h"
#endif // !WX_PRECOMP
#include "wx/collpane.h" #include "wx/collpane.h"
#include "wx/statline.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 // implementation
// ============================================================================ // ============================================================================
@@ -34,18 +47,19 @@ IMPLEMENT_DYNAMIC_CLASS(wxGenericCollapsiblePane, wxControl)
IMPLEMENT_DYNAMIC_CLASS(wxCollapsiblePaneEvent, wxCommandEvent) IMPLEMENT_DYNAMIC_CLASS(wxCollapsiblePaneEvent, wxCommandEvent)
BEGIN_EVENT_TABLE(wxGenericCollapsiblePane, wxControl) BEGIN_EVENT_TABLE(wxGenericCollapsiblePane, wxControl)
EVT_BUTTON(wxCP_BUTTON_ID, wxGenericCollapsiblePane::OnButton) EVT_BUTTON(wxID_ANY, wxGenericCollapsiblePane::OnButton)
EVT_SIZE(wxGenericCollapsiblePane::OnSize) EVT_SIZE(wxGenericCollapsiblePane::OnSize)
END_EVENT_TABLE() END_EVENT_TABLE()
bool wxGenericCollapsiblePane::Create( wxWindow *parent, wxWindowID id, bool wxGenericCollapsiblePane::Create(wxWindow *parent,
const wxString& label, wxWindowID id,
const wxPoint& pos, const wxString& label,
const wxSize& size, const wxPoint& pos,
long style, const wxSize& size,
const wxValidator& val, long style,
const wxString& name) const wxValidator& val,
const wxString& name)
{ {
if ( !wxControl::Create(parent, id, pos, size, style, val, name) ) if ( !wxControl::Create(parent, id, pos, size, style, val, name) )
return false; return false;
@@ -53,7 +67,7 @@ bool wxGenericCollapsiblePane::Create( wxWindow *parent, wxWindowID id,
m_strLabel = label; m_strLabel = label;
// create children; their size & position is set in OnSize() // 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); wxDefaultSize, wxBU_EXACTFIT);
m_pStatLine = new wxStaticLine(this, wxID_ANY); m_pStatLine = new wxStaticLine(this, wxID_ANY);
m_pPane = new wxWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, m_pPane = new wxWindow(this, wxID_ANY, wxDefaultPosition, wxDefaultSize,
@@ -106,7 +120,7 @@ void wxGenericCollapsiblePane::Collapse(bool collapse)
SetMinSize(sz); SetMinSize(sz);
SetSize(sz); SetSize(sz);
wxWindow *top = GetTopLevelParent(); wxWindow *top = wxGetTopLevelParent(this);
if (top) if (top)
{ {
// we've changed our size, thus our top level parent needs to relayout // 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) void wxGenericCollapsiblePane::SetLabel(const wxString &label)
{ {
m_strLabel = label; m_strLabel = label;
@@ -183,8 +188,14 @@ void wxGenericCollapsiblePane::LayoutChildren()
// wxGenericCollapsiblePane - event handlers // wxGenericCollapsiblePane - event handlers
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
void wxGenericCollapsiblePane::OnButton(wxCommandEvent &WXUNUSED(event)) void wxGenericCollapsiblePane::OnButton(wxCommandEvent& event)
{ {
if ( event.GetEventObject() != m_pButton )
{
event.Skip();
return;
}
Collapse(!IsCollapsed()); Collapse(!IsCollapsed());
// this change was generated by the user - send the event // this change was generated by the user - send the event

View File

@@ -20,9 +20,9 @@
#ifdef __WXGTK24__ #ifdef __WXGTK24__
#include "wx/collpane.h" #include "wx/collpane.h"
#include "wx/gtk/private.h"
#include <gtk/gtkexpander.h> #include <gtk/gtkexpander.h>
#include <gtk/gtk.h>
const wxChar wxCollapsiblePaneNameStr[] = wxT("CollapsiblePane"); const wxChar wxCollapsiblePaneNameStr[] = wxT("CollapsiblePane");
@@ -76,7 +76,7 @@ static void gtk_collapsiblepane_expanded_callback (GObject *object,
p->SetMinSize(sz); p->SetMinSize(sz);
p->SetSize(sz); p->SetSize(sz);
wxWindow *top = p->GetTopLevelParent(); wxWindow *top = wxGetTopLevelParent(p);
if (top) if (top)
{ {
// we've changed our size, thus our top level parent needs to relayout // we've changed our size, thus our top level parent needs to relayout