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:
94
include/wx/collpane.h
Normal file
94
include/wx/collpane.h
Normal 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_
|
||||
115
include/wx/generic/collpaneg.h
Normal file
115
include/wx/generic/collpaneg.h
Normal 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
77
include/wx/gtk/collpane.h
Normal 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_
|
||||
Reference in New Issue
Block a user