initial draft of wxCollapsiblePane (patch 1577412 by Francesco)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42259 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2006-10-22 22:28:37 +00:00
parent 187d815255
commit 3c1f8cb1f5
11 changed files with 1208 additions and 2 deletions

94
include/wx/collpane.h Normal file
View File

@@ -0,0 +1,94 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/collpane.h
// Purpose: wxCollapsiblePane
// Author: Francesco Montorsi
// Modified by:
// Created: 8/10/2006
// RCS-ID: $Id$
// Copyright: (c) Francesco Montorsi
// Licence: wxWindows Licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_COLLAPSABLE_PANE_H_BASE_
#define _WX_COLLAPSABLE_PANE_H_BASE_
#include "wx/control.h"
// ----------------------------------------------------------------------------
// wxCollapsiblePaneBase: interface for wxCollapsiblePane
// ----------------------------------------------------------------------------
#define wxCP_DEFAULT_STYLE (0)
class WXDLLEXPORT wxCollapsiblePaneBase : public wxControl
{
public:
wxCollapsiblePaneBase() {}
virtual void Expand()
{ Collapse(false); }
virtual void Collapse(bool collapse = true) = 0;
virtual bool IsCollapsed() const = 0;
virtual wxWindow *GetPane() const = 0;
virtual wxString GetLabel() const = 0;
virtual void SetLabel(const wxString &label) = 0;
};
// ----------------------------------------------------------------------------
// event types and macros
// ----------------------------------------------------------------------------
BEGIN_DECLARE_EVENT_TYPES()
DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_CORE, wxEVT_COMMAND_COLLPANE_CHANGED, 1102)
END_DECLARE_EVENT_TYPES()
class WXDLLIMPEXP_CORE wxCollapsiblePaneEvent : public wxCommandEvent
{
public:
wxCollapsiblePaneEvent() {}
wxCollapsiblePaneEvent(wxObject *generator, int id, bool collapsed)
: wxCommandEvent(wxEVT_COMMAND_COLLPANE_CHANGED, id),
m_bCollapsed(collapsed)
{
SetEventObject(generator);
}
bool GetCollapsed() const { return m_bCollapsed; }
void SetCollapsed(bool c) { m_bCollapsed = c; }
// default copy ctor, assignment operator and dtor are ok
virtual wxEvent *Clone() const { return new wxCollapsiblePaneEvent(*this); }
private:
bool m_bCollapsed;
DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCollapsiblePaneEvent)
};
// ----------------------------------------------------------------------------
// event types and macros
// ----------------------------------------------------------------------------
typedef void (wxEvtHandler::*wxCollapsiblePaneEventFunction)(wxCollapsiblePaneEvent&);
#define wxCollapsiblePaneEventHandler(func) \
(wxObjectEventFunction)(wxEventFunction)wxStaticCastEvent(wxCollapsiblePaneEventFunction, &func)
#define EVT_COLLAPSIBLEPANE_CHANGED(id, fn) \
wx__DECLARE_EVT1(wxEVT_COMMAND_COLLPANE_CHANGED, id, wxCollapsiblePaneEventFunction(fn))
#if defined(__WXGTK24__)
#include "wx/gtk/collpane.h"
#else
#include "wx/generic/collpaneg.h"
#define wxCollapsiblePane wxGenericCollapsiblePane
#endif
#endif
// _WX_COLLAPSABLE_PANE_H_BASE_

View File

@@ -0,0 +1,115 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/generic/collpaneg.h
// Purpose: wxGenericCollapsiblePane
// Author: Francesco Montorsi
// Modified by:
// Created: 8/10/2006
// RCS-ID: $Id$
// Copyright: (c) Francesco Montorsi
// Licence: wxWindows Licence
/////////////////////////////////////////////////////////////////////////////
#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 wxStaticLine;
// class name
extern WXDLLEXPORT_DATA(const wxChar) wxGenericCollapsiblePaneNameStr[];
// ----------------------------------------------------------------------------
// wxGenericCollapsiblePane
// ----------------------------------------------------------------------------
class WXDLLEXPORT wxGenericCollapsiblePane : public wxCollapsiblePaneBase
{
public:
wxGenericCollapsiblePane() { Init(); }
wxGenericCollapsiblePane(wxWindow *parent,
wxWindowID winid,
const wxString& label,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxTAB_TRAVERSAL | wxNO_BORDER,
const wxValidator& val = wxDefaultValidator,
const wxString& name = wxGenericCollapsiblePaneNameStr)
{
Init();
Create(parent, winid, label, pos, size, style, val, name);
}
void Init()
{
m_pButton = NULL;
m_pStatLine = NULL;
m_pPane = NULL;
}
bool Create(wxWindow *parent,
wxWindowID winid,
const wxString& label,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxTAB_TRAVERSAL | wxNO_BORDER,
const wxValidator& val = wxDefaultValidator,
const wxString& name = wxGenericCollapsiblePaneNameStr);
public: // public API
void Collapse(bool collapse = true);
void SetLabel(const wxString &label);
bool IsCollapsed() const
{ return m_pPane==NULL || !m_pPane->IsShown(); }
wxWindow *GetPane() const
{ return m_pPane; }
wxString GetLabel() const
{ return m_strLabel; }
wxWindow *GetTopLevelParent();
public: // event handlers
void OnButton(wxCommandEvent &ev);
void OnSize(wxSizeEvent &ev);
protected: // internal utils
void LayoutChildren();
wxString GetBtnLabel() const;
virtual wxSize DoGetBestSize() const;
protected:
wxButton *m_pButton;
wxStaticLine *m_pStatLine;
wxWindow *m_pPane;
// the button label without ">>" or "<<"
wxString m_strLabel;
private:
DECLARE_DYNAMIC_CLASS(wxGenericCollapsiblePane)
DECLARE_EVENT_TABLE()
};
#endif
// _WX_COLLAPSABLE_PANE_H_GENERIC_

77
include/wx/gtk/collpane.h Normal file
View File

@@ -0,0 +1,77 @@
/////////////////////////////////////////////////////////////////////////////
// Name: wx/gtk/collpane.h
// Purpose: wxCollapsiblePane
// Author: Francesco Montorsi
// Modified by:
// Created: 8/10/2006
// RCS-ID: $Id$
// Copyright: (c) Francesco Montorsi
// Licence: wxWindows Licence
/////////////////////////////////////////////////////////////////////////////
#ifndef _WX_COLLAPSABLE_PANEL_H_GTK_
#define _WX_COLLAPSABLE_PANEL_H_GTK_
#include "wx/generic/collpaneg.h"
extern WXDLLEXPORT_DATA(const wxChar) wxCollapsiblePaneNameStr[];
// ----------------------------------------------------------------------------
// wxCollapsiblePane
// ----------------------------------------------------------------------------
class WXDLLEXPORT wxCollapsiblePane : public wxGenericCollapsiblePane
{
public:
wxCollapsiblePane() { Init(); }
wxCollapsiblePane(wxWindow *parent,
wxWindowID winid,
const wxString& label,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxTAB_TRAVERSAL | wxNO_BORDER,
const wxValidator& val = wxDefaultValidator,
const wxString& name = wxCollapsiblePaneNameStr)
{
Init();
Create(parent, winid, label, pos, size, style, val, name);
}
void Init()
{
m_bIgnoreNextChange = false;
}
bool Create(wxWindow *parent,
wxWindowID winid,
const wxString& label,
const wxPoint& pos = wxDefaultPosition,
const wxSize& size = wxDefaultSize,
long style = wxTAB_TRAVERSAL | wxNO_BORDER,
const wxValidator& val = wxDefaultValidator,
const wxString& name = wxCollapsiblePaneNameStr);
public: // public API
wxSize DoGetBestSize() const;
void Collapse(bool collapse = true);
bool IsCollapsed() const;
void SetLabel(const wxString &str);
void OnSize(wxSizeEvent&);
public: // used by GTK callbacks
bool m_bIgnoreNextChange;
wxSize m_szCollapsed;
private:
DECLARE_DYNAMIC_CLASS(wxCollapsiblePane)
DECLARE_EVENT_TABLE()
};
#endif
// _WX_COLLAPSABLE_PANEL_H_GTK_