From 0ed0bcc87376ee8760d09193b2de35510291f3b8 Mon Sep 17 00:00:00 2001 From: Vadim Zeitlin Date: Thu, 24 Mar 2005 10:27:27 +0000 Subject: [PATCH] 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 --- contrib/include/wx/gizmos/dynamicsash.h | 75 ++++++++++++++++------ contrib/samples/gizmos/dynsash/dynsash.cpp | 58 ++++++++++------- contrib/src/gizmos/dynamicsash.cpp | 6 +- 3 files changed, 92 insertions(+), 47 deletions(-) diff --git a/contrib/include/wx/gizmos/dynamicsash.h b/contrib/include/wx/gizmos/dynamicsash.h index c94fc3ee2b..617463e76c 100644 --- a/contrib/include/wx/gizmos/dynamicsash.h +++ b/contrib/include/wx/gizmos/dynamicsash.h @@ -61,18 +61,14 @@ */ -#include -#include -class wxScrollBar; +#include "wx/event.h" +#include "wx/window.h" +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) -#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)) - +// ---------------------------------------------------------------------------- +// dynamic sash styles +// ---------------------------------------------------------------------------- /* wxDS_MANAGE_SCROLLBARS is a default style of wxDynamicSashWindow which @@ -89,6 +85,26 @@ class wxScrollBar; */ #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 @@ -97,10 +113,12 @@ class wxScrollBar; a child of the wxDynamicSashWindow. wxDynamicSashWindow will automatically reparent it to the proper place in its window hierarchy. */ -class WXDLLIMPEXP_GIZMOS wxDynamicSashSplitEvent : public wxCommandEvent { +class WXDLLIMPEXP_GIZMOS wxDynamicSashSplitEvent : public wxCommandEvent +{ public: wxDynamicSashSplitEvent(); - wxDynamicSashSplitEvent(const wxDynamicSashSplitEvent& event): wxCommandEvent(event) { } + wxDynamicSashSplitEvent(const wxDynamicSashSplitEvent& event) + : wxCommandEvent(event) { } wxDynamicSashSplitEvent(wxObject *target); virtual wxEvent* Clone() const { return new wxDynamicSashSplitEvent(*this); } @@ -119,7 +137,8 @@ private: the scrollbars' event handlers connected to your view's event handler class. */ -class WXDLLIMPEXP_GIZMOS wxDynamicSashUnifyEvent : public wxCommandEvent { +class WXDLLIMPEXP_GIZMOS wxDynamicSashUnifyEvent : public wxCommandEvent +{ public: wxDynamicSashUnifyEvent(); wxDynamicSashUnifyEvent(const wxDynamicSashUnifyEvent& event): wxCommandEvent(event) {} @@ -134,23 +153,37 @@ private: typedef void (wxEvtHandler::*wxDynamicSashSplitEventFunction)(wxDynamicSashSplitEvent&); typedef void (wxEvtHandler::*wxDynamicSashUnifyEventFunction)(wxDynamicSashUnifyEvent&); -/* - wxDynamicSashWindow. See above. -*/ +#define wxDynamicSashSplitEventHandler(func) \ + (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; -class WXDLLIMPEXP_GIZMOS wxDynamicSashWindow : public wxWindow { +class WXDLLIMPEXP_GIZMOS wxDynamicSashWindow : public wxWindow +{ public: wxDynamicSashWindow(); wxDynamicSashWindow(wxWindow *parent, wxWindowID id, 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); virtual ~wxDynamicSashWindow(); virtual bool Create(wxWindow *parent, wxWindowID id, - const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = wxCLIP_CHILDREN | wxDS_MANAGE_SCROLLBARS | wxDS_DRAG_CORNER, + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxDS_DEFAULT, const wxString& name = wxDynamicSashWindowNameStr); virtual wxScrollBar *GetHScrollBar(const wxWindow *child) const; virtual wxScrollBar *GetVScrollBar(const wxWindow *child) const; @@ -165,5 +198,5 @@ private: DECLARE_DYNAMIC_CLASS(wxDynamicSashWindow) }; +#endif // _WX_DYNAMICSASH_H_ -#endif diff --git a/contrib/samples/gizmos/dynsash/dynsash.cpp b/contrib/samples/gizmos/dynsash/dynsash.cpp index 1623553548..e24229b4c3 100644 --- a/contrib/samples/gizmos/dynsash/dynsash.cpp +++ b/contrib/samples/gizmos/dynsash/dynsash.cpp @@ -23,23 +23,27 @@ #include "wx/wx.h" #endif -#include -#include -#include -#include -#include -#include - -class Demo : public wxApp { +#include "wx/app.h" +#include "wx/frame.h" +#include "wx/gizmos/dynamicsash.h" +#include "wx/html/htmlwin.h" +#include "wx/image.h" +#include "wx/cmdline.h" + +class Demo : public wxApp +{ public: bool OnInit(); }; -class SashHtmlWindow : public wxHtmlWindow { +class SashHtmlWindow : public wxHtmlWindow +{ public: SashHtmlWindow(wxWindow *parent, wxWindowID id = wxID_ANY, - const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, - long style = wxHW_SCROLLBAR_NEVER, const wxString& name = wxT("sashHtmlWindow")); + const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, + long style = wxHW_SCROLLBAR_NEVER, + const wxString& name = wxT("sashHtmlWindow")); wxSize DoGetBestSize() const; @@ -51,7 +55,7 @@ private: IMPLEMENT_APP(Demo) -wxChar *HTML_content = +const wxChar *HTML_content = wxT("

wxDynamicSashWindow demo

") wxT("

Here is an example of how you can use wxDynamicSashWindow to allow your users to ") 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("

Also, see the dynsash_switch sample for an example of an application which ") wxT("manages the scrollbars provided by wxDynamicSashWindow itself."); -bool Demo::OnInit() { +bool Demo::OnInit() +{ wxInitAllImageHandlers(); wxFrame *frame = new wxFrame(NULL, wxID_ANY, wxT("Dynamic Sash Demo")); @@ -76,27 +81,34 @@ bool Demo::OnInit() { SashHtmlWindow::SashHtmlWindow(wxWindow *parent, wxWindowID id, - const wxPoint& pos, const wxSize& size, long style, const wxString& name) : - wxHtmlWindow(parent, id, pos, size, style, name) { - Connect(wxID_ANY, wxEVT_DYNAMIC_SASH_SPLIT, (wxObjectEventFunction) - (wxEventFunction) - (wxDynamicSashSplitEventFunction)&SashHtmlWindow::OnSplit); + const wxPoint& pos, + const wxSize& size, + long style, + const wxString& name) + : wxHtmlWindow(parent, id, pos, size, style, name) +{ + Connect(wxEVT_DYNAMIC_SASH_SPLIT, + wxDynamicSashSplitEventHandler(SashHtmlWindow::OnSplit)); m_dyn_sash = parent; } -wxSize SashHtmlWindow::DoGetBestSize() const { +wxSize SashHtmlWindow::DoGetBestSize() const +{ wxHtmlContainerCell *cell = GetInternalRepresentation(); wxSize size = GetSize(); - if (cell) { + if (cell) + { cell->Layout(size.GetWidth()); 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); html->SetPage(HTML_content); } diff --git a/contrib/src/gizmos/dynamicsash.cpp b/contrib/src/gizmos/dynamicsash.cpp index ea93094de6..0ca0c59e3c 100644 --- a/contrib/src/gizmos/dynamicsash.cpp +++ b/contrib/src/gizmos/dynamicsash.cpp @@ -92,9 +92,9 @@ const wxChar* wxDynamicSashWindowNameStr = wxT("dynamicSashWindow"); #include -#define wxEVT_DYNAMIC_SASH_PRIVATE (wxEVT_DYNAMIC_SASH_BASE + 8) -#define wxEVT_DYNAMIC_SASH_REPARENT (wxEVT_DYNAMIC_SASH_PRIVATE + 1) - +const wxEventType wxEVT_DYNAMIC_SASH_SPLIT = wxNewEventType(); +const wxEventType wxEVT_DYNAMIC_SASH_UNIFY = wxNewEventType(); +const wxEventType wxEVT_DYNAMIC_SASH_REPARENT = wxNewEventType(); /* wxDynamicSashReparentEvent is generated by the AddChild() method of -- 2.45.2