cleanup: define events correctly, define type-safe event macros, reformatted

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@33017 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2005-03-24 10:27:27 +00:00
parent 85d8df29aa
commit 0ed0bcc873
3 changed files with 91 additions and 46 deletions

View File

@@ -61,18 +61,14 @@
*/ */
#include <wx/event.h> #include "wx/event.h"
#include <wx/window.h> #include "wx/window.h"
class wxScrollBar;
class WXDLLIMPEXP_CORE wxScrollBar;
#define wxEVT_DYNAMIC_SASH_BASE (((int)('d' - 'a') << 11) | ((int)('s' - 'a') << 6) | ((int)('h' - 'a') << 1)) // ----------------------------------------------------------------------------
#define wxEVT_DYNAMIC_SASH_SPLIT (wxEVT_DYNAMIC_SASH_BASE + 1) // dynamic sash styles
#define wxEVT_DYNAMIC_SASH_UNIFY (wxEVT_DYNAMIC_SASH_BASE + 2) // ----------------------------------------------------------------------------
#define EVT_DYNAMIC_SASH_SPLIT(id, func) EVT_CUSTOM(wxEVT_DYNAMIC_SASH_SPLIT, (id), (func))
#define EVT_DYNAMIC_SASH_UNIFY(id, func) EVT_CUSTOM(wxEVT_DYNAMIC_SASH_UNIFY, (id), (func))
/* /*
wxDS_MANAGE_SCROLLBARS is a default style of wxDynamicSashWindow which wxDS_MANAGE_SCROLLBARS is a default style of wxDynamicSashWindow which
@@ -89,6 +85,26 @@ class wxScrollBar;
*/ */
#define wxDS_DRAG_CORNER 0x0020 #define wxDS_DRAG_CORNER 0x0020
/*
Default style for wxDynamicSashWindow.
*/
#define wxDS_DEFAULT wxDS_MANAGE_SCROLLBARS | wxDS_DRAG_CORNER
// ----------------------------------------------------------------------------
// dynamic sash events
// ----------------------------------------------------------------------------
extern WXDLLIMPEXP_GIZMOS const wxEventType wxEVT_DYNAMIC_SASH_SPLIT;
extern WXDLLIMPEXP_GIZMOS const wxEventType wxEVT_DYNAMIC_SASH_UNIFY;
#define EVT_DYNAMIC_SASH_SPLIT(id, func) \
wx__DECLARE_EVT1(wxEVT_DYNAMIC_SASH_SPLIT, id, \
wxDynamicSashSplitEventHandler(func))
#define EVT_DYNAMIC_SASH_UNIFY(id, func) \
wx__DECLARE_EVT1(wxEVT_DYNAMIC_SASH_UNIFY, id, \
wxDynamicSashUnifyEventHandler(func))
/* /*
wxDynamicSashSplitEvents are sent to your view by wxDynamicSashWindow wxDynamicSashSplitEvents are sent to your view by wxDynamicSashWindow
@@ -97,10 +113,12 @@ class wxScrollBar;
a child of the wxDynamicSashWindow. wxDynamicSashWindow will a child of the wxDynamicSashWindow. wxDynamicSashWindow will
automatically reparent it to the proper place in its window hierarchy. automatically reparent it to the proper place in its window hierarchy.
*/ */
class WXDLLIMPEXP_GIZMOS wxDynamicSashSplitEvent : public wxCommandEvent { class WXDLLIMPEXP_GIZMOS wxDynamicSashSplitEvent : public wxCommandEvent
{
public: public:
wxDynamicSashSplitEvent(); wxDynamicSashSplitEvent();
wxDynamicSashSplitEvent(const wxDynamicSashSplitEvent& event): wxCommandEvent(event) { } wxDynamicSashSplitEvent(const wxDynamicSashSplitEvent& event)
: wxCommandEvent(event) { }
wxDynamicSashSplitEvent(wxObject *target); wxDynamicSashSplitEvent(wxObject *target);
virtual wxEvent* Clone() const { return new wxDynamicSashSplitEvent(*this); } virtual wxEvent* Clone() const { return new wxDynamicSashSplitEvent(*this); }
@@ -119,7 +137,8 @@ private:
the scrollbars' event handlers connected to your view's event handler the scrollbars' event handlers connected to your view's event handler
class. class.
*/ */
class WXDLLIMPEXP_GIZMOS wxDynamicSashUnifyEvent : public wxCommandEvent { class WXDLLIMPEXP_GIZMOS wxDynamicSashUnifyEvent : public wxCommandEvent
{
public: public:
wxDynamicSashUnifyEvent(); wxDynamicSashUnifyEvent();
wxDynamicSashUnifyEvent(const wxDynamicSashUnifyEvent& event): wxCommandEvent(event) {} wxDynamicSashUnifyEvent(const wxDynamicSashUnifyEvent& event): wxCommandEvent(event) {}
@@ -134,23 +153,37 @@ private:
typedef void (wxEvtHandler::*wxDynamicSashSplitEventFunction)(wxDynamicSashSplitEvent&); typedef void (wxEvtHandler::*wxDynamicSashSplitEventFunction)(wxDynamicSashSplitEvent&);
typedef void (wxEvtHandler::*wxDynamicSashUnifyEventFunction)(wxDynamicSashUnifyEvent&); typedef void (wxEvtHandler::*wxDynamicSashUnifyEventFunction)(wxDynamicSashUnifyEvent&);
/* #define wxDynamicSashSplitEventHandler(func) \
wxDynamicSashWindow. See above. (wxObjectEventFunction)(wxEventFunction) \
*/ wxStaticCastEvent(wxDynamicSashSplitEventFunction, &func)
#define wxDynamicSashUnifyEventHandler(func) \
(wxObjectEventFunction)(wxEventFunction) \
wxStaticCastEvent(wxDynamicSashUnifyEventFunction, &func)
#define wx__DECLARE_TREEEVT(evt, id, fn) \
wx__DECLARE_EVT1(wxEVT_COMMAND_TREE_ ## evt, id, wxTreeEventHandler(fn))
// ----------------------------------------------------------------------------
// wxDynamicSashWindow itself
// ----------------------------------------------------------------------------
WXDLLIMPEXP_GIZMOS extern const wxChar* wxDynamicSashWindowNameStr; WXDLLIMPEXP_GIZMOS extern const wxChar* wxDynamicSashWindowNameStr;
class WXDLLIMPEXP_GIZMOS wxDynamicSashWindow : public wxWindow { class WXDLLIMPEXP_GIZMOS wxDynamicSashWindow : public wxWindow
{
public: public:
wxDynamicSashWindow(); wxDynamicSashWindow();
wxDynamicSashWindow(wxWindow *parent, wxWindowID id, wxDynamicSashWindow(wxWindow *parent, wxWindowID id,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize,
long style = wxCLIP_CHILDREN | wxDS_MANAGE_SCROLLBARS | wxDS_DRAG_CORNER, long style = wxDS_DEFAULT,
const wxString& name = wxDynamicSashWindowNameStr); const wxString& name = wxDynamicSashWindowNameStr);
virtual ~wxDynamicSashWindow(); virtual ~wxDynamicSashWindow();
virtual bool Create(wxWindow *parent, wxWindowID id, virtual bool Create(wxWindow *parent, wxWindowID id,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, const wxPoint& pos = wxDefaultPosition,
long style = wxCLIP_CHILDREN | wxDS_MANAGE_SCROLLBARS | wxDS_DRAG_CORNER, const wxSize& size = wxDefaultSize,
long style = wxDS_DEFAULT,
const wxString& name = wxDynamicSashWindowNameStr); const wxString& name = wxDynamicSashWindowNameStr);
virtual wxScrollBar *GetHScrollBar(const wxWindow *child) const; virtual wxScrollBar *GetHScrollBar(const wxWindow *child) const;
virtual wxScrollBar *GetVScrollBar(const wxWindow *child) const; virtual wxScrollBar *GetVScrollBar(const wxWindow *child) const;
@@ -165,5 +198,5 @@ private:
DECLARE_DYNAMIC_CLASS(wxDynamicSashWindow) DECLARE_DYNAMIC_CLASS(wxDynamicSashWindow)
}; };
#endif // _WX_DYNAMICSASH_H_
#endif

View File

@@ -23,23 +23,27 @@
#include "wx/wx.h" #include "wx/wx.h"
#endif #endif
#include <wx/app.h> #include "wx/app.h"
#include <wx/frame.h> #include "wx/frame.h"
#include <wx/gizmos/dynamicsash.h> #include "wx/gizmos/dynamicsash.h"
#include <wx/html/htmlwin.h> #include "wx/html/htmlwin.h"
#include <wx/image.h> #include "wx/image.h"
#include <wx/cmdline.h> #include "wx/cmdline.h"
class Demo : public wxApp { class Demo : public wxApp
{
public: public:
bool OnInit(); bool OnInit();
}; };
class SashHtmlWindow : public wxHtmlWindow { class SashHtmlWindow : public wxHtmlWindow
{
public: public:
SashHtmlWindow(wxWindow *parent, wxWindowID id = wxID_ANY, SashHtmlWindow(wxWindow *parent, wxWindowID id = wxID_ANY,
const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, const wxPoint& pos = wxDefaultPosition,
long style = wxHW_SCROLLBAR_NEVER, const wxString& name = wxT("sashHtmlWindow")); const wxSize& size = wxDefaultSize,
long style = wxHW_SCROLLBAR_NEVER,
const wxString& name = wxT("sashHtmlWindow"));
wxSize DoGetBestSize() const; wxSize DoGetBestSize() const;
@@ -51,7 +55,7 @@ private:
IMPLEMENT_APP(Demo) IMPLEMENT_APP(Demo)
wxChar *HTML_content = const wxChar *HTML_content =
wxT("<P><H1>wxDynamicSashWindow demo</H1>") wxT("<P><H1>wxDynamicSashWindow demo</H1>")
wxT("<P>Here is an example of how you can use <TT>wxDynamicSashWindow</TT> to allow your users to ") wxT("<P>Here is an example of how you can use <TT>wxDynamicSashWindow</TT> to allow your users to ")
wxT("dynamically split and unify the views of your windows. Try dragging out a few splits ") wxT("dynamically split and unify the views of your windows. Try dragging out a few splits ")
@@ -59,7 +63,8 @@ wxT("and then reunifying the window.")
wxT("<P>Also, see the <TT>dynsash_switch</TT> sample for an example of an application which ") wxT("<P>Also, see the <TT>dynsash_switch</TT> sample for an example of an application which ")
wxT("manages the scrollbars provided by <TT>wxDynamicSashWindow</TT> itself."); wxT("manages the scrollbars provided by <TT>wxDynamicSashWindow</TT> itself.");
bool Demo::OnInit() { bool Demo::OnInit()
{
wxInitAllImageHandlers(); wxInitAllImageHandlers();
wxFrame *frame = new wxFrame(NULL, wxID_ANY, wxT("Dynamic Sash Demo")); wxFrame *frame = new wxFrame(NULL, wxID_ANY, wxT("Dynamic Sash Demo"));
@@ -76,27 +81,34 @@ bool Demo::OnInit() {
SashHtmlWindow::SashHtmlWindow(wxWindow *parent, wxWindowID id, SashHtmlWindow::SashHtmlWindow(wxWindow *parent, wxWindowID id,
const wxPoint& pos, const wxSize& size, long style, const wxString& name) : const wxPoint& pos,
wxHtmlWindow(parent, id, pos, size, style, name) { const wxSize& size,
Connect(wxID_ANY, wxEVT_DYNAMIC_SASH_SPLIT, (wxObjectEventFunction) long style,
(wxEventFunction) const wxString& name)
(wxDynamicSashSplitEventFunction)&SashHtmlWindow::OnSplit); : wxHtmlWindow(parent, id, pos, size, style, name)
{
Connect(wxEVT_DYNAMIC_SASH_SPLIT,
wxDynamicSashSplitEventHandler(SashHtmlWindow::OnSplit));
m_dyn_sash = parent; m_dyn_sash = parent;
} }
wxSize SashHtmlWindow::DoGetBestSize() const { wxSize SashHtmlWindow::DoGetBestSize() const
{
wxHtmlContainerCell *cell = GetInternalRepresentation(); wxHtmlContainerCell *cell = GetInternalRepresentation();
wxSize size = GetSize(); wxSize size = GetSize();
if (cell) { if (cell)
{
cell->Layout(size.GetWidth()); cell->Layout(size.GetWidth());
return wxSize(cell->GetWidth(), cell->GetHeight()); return wxSize(cell->GetWidth(), cell->GetHeight());
} else }
return wxHtmlWindow::GetBestSize();
return wxHtmlWindow::GetBestSize();
} }
void SashHtmlWindow::OnSplit(wxDynamicSashSplitEvent& WXUNUSED(event)) { void SashHtmlWindow::OnSplit(wxDynamicSashSplitEvent& WXUNUSED(event))
{
wxHtmlWindow *html = new SashHtmlWindow(m_dyn_sash, wxID_ANY); wxHtmlWindow *html = new SashHtmlWindow(m_dyn_sash, wxID_ANY);
html->SetPage(HTML_content); html->SetPage(HTML_content);
} }

View File

@@ -92,9 +92,9 @@ const wxChar* wxDynamicSashWindowNameStr = wxT("dynamicSashWindow");
#include <wx/settings.h> #include <wx/settings.h>
#define wxEVT_DYNAMIC_SASH_PRIVATE (wxEVT_DYNAMIC_SASH_BASE + 8) const wxEventType wxEVT_DYNAMIC_SASH_SPLIT = wxNewEventType();
#define wxEVT_DYNAMIC_SASH_REPARENT (wxEVT_DYNAMIC_SASH_PRIVATE + 1) const wxEventType wxEVT_DYNAMIC_SASH_UNIFY = wxNewEventType();
const wxEventType wxEVT_DYNAMIC_SASH_REPARENT = wxNewEventType();
/* /*
wxDynamicSashReparentEvent is generated by the AddChild() method of wxDynamicSashReparentEvent is generated by the AddChild() method of