X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/937cf827cae4537a354aec3db8a7c0f85fd3ca35..ca77701441e39245dcbfce903049e76f166979e5:/include/wx/generic/laywin.h diff --git a/include/wx/generic/laywin.h b/include/wx/generic/laywin.h index 49afa3d91b..76ec0a8f5a 100644 --- a/include/wx/generic/laywin.h +++ b/include/wx/generic/laywin.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: laywin.h +// Name: wx/generic/laywin.h // Purpose: Implements a simple layout algorithm, plus // wxSashLayoutWindow which is an example of a window with // layout-awareness (via event handlers). This is suited to @@ -9,32 +9,37 @@ // Created: 04/01/98 // RCS-ID: $Id$ // Copyright: (c) Julian Smart -// Licence: wxWindows licence +// Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_LAYWIN_H_G_ #define _WX_LAYWIN_H_G_ -#ifdef __GNUG__ -#pragma interface "laywin.h" -#endif +#if wxUSE_SASH + #include "wx/sashwin.h" +#endif // wxUSE_SASH + +#include "wx/event.h" -#include "wx/sashwin.h" +class WXDLLIMPEXP_FWD_ADV wxQueryLayoutInfoEvent; +class WXDLLIMPEXP_FWD_ADV wxCalculateLayoutEvent; -const wxEventType wxEVT_QUERY_LAYOUT_INFO = wxEVT_FIRST + 1500; -const wxEventType wxEVT_CALCULATE_LAYOUT = wxEVT_FIRST + 1501; +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_QUERY_LAYOUT_INFO, wxQueryLayoutInfoEvent ); +wxDECLARE_EXPORTED_EVENT( WXDLLIMPEXP_ADV, wxEVT_CALCULATE_LAYOUT, wxCalculateLayoutEvent ); -enum wxLayoutOrientation { +enum wxLayoutOrientation +{ wxLAYOUT_HORIZONTAL, wxLAYOUT_VERTICAL }; -enum wxLayoutAlignment { +enum wxLayoutAlignment +{ wxLAYOUT_NONE, wxLAYOUT_TOP, wxLAYOUT_LEFT, wxLAYOUT_RIGHT, - wxLAYOUT_BOTTOM, + wxLAYOUT_BOTTOM }; // Not sure this is necessary @@ -53,11 +58,9 @@ enum wxLayoutAlignment { * orientation and size. */ -class WXDLLEXPORT wxQueryLayoutInfoEvent: public wxEvent +class WXDLLIMPEXP_ADV wxQueryLayoutInfoEvent: public wxEvent { -DECLARE_DYNAMIC_CLASS(wxQueryLayoutInfoEvent) public: - wxQueryLayoutInfoEvent(wxWindowID id = 0) { SetEventType(wxEVT_QUERY_LAYOUT_INFO); @@ -67,22 +70,26 @@ public: m_alignment = wxLAYOUT_TOP; m_orientation = wxLAYOUT_HORIZONTAL; } -// Read by the app - inline void SetRequestedLength(int length) { m_requestedLength = length; } - inline int GetRequestedLength() const { return m_requestedLength; } - inline void SetFlags(int flags) { m_flags = flags; } - inline int GetFlags() const { return m_flags; } + // Read by the app + void SetRequestedLength(int length) { m_requestedLength = length; } + int GetRequestedLength() const { return m_requestedLength; } -// Set by the app - inline void SetSize(const wxSize& size) { m_size = size; } - inline wxSize GetSize() const { return m_size; } + void SetFlags(int flags) { m_flags = flags; } + int GetFlags() const { return m_flags; } - inline void SetOrientation(wxLayoutOrientation orient) { m_orientation = orient; } - inline wxLayoutOrientation GetOrientation() const { return m_orientation; } + // Set by the app + void SetSize(const wxSize& size) { m_size = size; } + wxSize GetSize() const { return m_size; } + + void SetOrientation(wxLayoutOrientation orient) { m_orientation = orient; } + wxLayoutOrientation GetOrientation() const { return m_orientation; } + + void SetAlignment(wxLayoutAlignment align) { m_alignment = align; } + wxLayoutAlignment GetAlignment() const { return m_alignment; } + + virtual wxEvent *Clone() const { return new wxQueryLayoutInfoEvent(*this); } - inline void SetAlignment(wxLayoutAlignment align) { m_alignment = align; } - inline wxLayoutAlignment GetAlignment() const { return m_alignment; } protected: int m_flags; int m_requestedLength; @@ -90,58 +97,85 @@ protected: wxLayoutOrientation m_orientation; wxLayoutAlignment m_alignment; +private: + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxQueryLayoutInfoEvent) }; typedef void (wxEvtHandler::*wxQueryLayoutInfoEventFunction)(wxQueryLayoutInfoEvent&); -#define EVT_QUERY_LAYOUT_INFO(func) { wxEVT_QUERY_LAYOUT_INFO, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxQueryLayoutInfoEventFunction) & func, NULL }, +#define wxQueryLayoutInfoEventHandler( func ) \ + wxEVENT_HANDLER_CAST( wxQueryLayoutInfoEventFunction, func ) + +#define EVT_QUERY_LAYOUT_INFO(func) \ + wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_QUERY_LAYOUT_INFO, wxID_ANY, wxID_ANY, wxQueryLayoutInfoEventHandler( func ), NULL ), /* * This event is used to take a bite out of the available client area. */ -class WXDLLEXPORT wxCalculateLayoutEvent: public wxEvent +class WXDLLIMPEXP_ADV wxCalculateLayoutEvent: public wxEvent { -DECLARE_DYNAMIC_CLASS(wxCalculateLayoutEvent) public: wxCalculateLayoutEvent(wxWindowID id = 0) { SetEventType(wxEVT_CALCULATE_LAYOUT); m_flags = 0; - m_id = id; + m_id = id; } -// Read by the app - inline void SetFlags(int flags) { m_flags = flags; } - inline int GetFlags() const { return m_flags; } -// Set by the app - inline void SetRect(const wxRect& rect) { m_rect = rect; } - inline wxRect GetRect() const { return m_rect; } + // Read by the app + void SetFlags(int flags) { m_flags = flags; } + int GetFlags() const { return m_flags; } + + // Set by the app + void SetRect(const wxRect& rect) { m_rect = rect; } + wxRect GetRect() const { return m_rect; } + + virtual wxEvent *Clone() const { return new wxCalculateLayoutEvent(*this); } + protected: int m_flags; wxRect m_rect; + +private: + DECLARE_DYNAMIC_CLASS_NO_ASSIGN(wxCalculateLayoutEvent) }; typedef void (wxEvtHandler::*wxCalculateLayoutEventFunction)(wxCalculateLayoutEvent&); -#define EVT_CALCULATE_LAYOUT(func) { wxEVT_CALCULATE_LAYOUT, -1, -1, (wxObjectEventFunction) (wxEventFunction) (wxCalculateLayoutEventFunction) & func, NULL }, +#define wxCalculateLayoutEventHandler( func ) wxEVENT_HANDLER_CAST(wxCalculateLayoutEventFunction, func) + +#define EVT_CALCULATE_LAYOUT(func) \ + wxDECLARE_EVENT_TABLE_ENTRY( wxEVT_CALCULATE_LAYOUT, wxID_ANY, wxID_ANY, wxCalculateLayoutEventHandler( func ), NULL ), + +#if wxUSE_SASH // This is window that can remember alignment/orientation, does its own layout, // and can provide sashes too. Useful for implementing docked windows with sashes in // an IDE-style interface. -class WXDLLEXPORT wxSashLayoutWindow: public wxSashWindow +class WXDLLIMPEXP_ADV wxSashLayoutWindow: public wxSashWindow { - DECLARE_CLASS(wxSashLayoutWindow) public: - wxSashLayoutWindow(wxWindow *parent, wxWindowID id = -1, const wxPoint& pos = wxDefaultPosition, - const wxSize& size = wxDefaultSize, long style = wxSW_3D|wxCLIP_CHILDREN, const wxString& name = "layoutWindow"); + wxSashLayoutWindow() + { + Init(); + } + + wxSashLayoutWindow(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = wxSW_3D|wxCLIP_CHILDREN, const wxString& name = wxT("layoutWindow")) + { + Create(parent, id, pos, size, style, name); + } + + bool Create(wxWindow *parent, wxWindowID id = wxID_ANY, const wxPoint& pos = wxDefaultPosition, + const wxSize& size = wxDefaultSize, long style = wxSW_3D|wxCLIP_CHILDREN, const wxString& name = wxT("layoutWindow")); // Accessors - inline wxLayoutAlignment GetAlignment() const { return m_alignment; }; - inline wxLayoutOrientation GetOrientation() const { return m_orientation; }; + inline wxLayoutAlignment GetAlignment() const { return m_alignment; } + inline wxLayoutOrientation GetOrientation() const { return m_orientation; } - inline void SetAlignment(wxLayoutAlignment align) { m_alignment = align; }; - inline void SetOrientation(wxLayoutOrientation orient) { m_orientation = orient; }; + inline void SetAlignment(wxLayoutAlignment align) { m_alignment = align; } + inline void SetOrientation(wxLayoutOrientation orient) { m_orientation = orient; } // Give the window default dimensions inline void SetDefaultSize(const wxSize& size) { m_defaultSize = size; } @@ -153,28 +187,41 @@ public: // Called by layout algorithm to retrieve information about the window. void OnQueryLayoutInfo(wxQueryLayoutInfoEvent& event); -protected: + +private: + void Init(); + wxLayoutAlignment m_alignment; wxLayoutOrientation m_orientation; wxSize m_defaultSize; -DECLARE_EVENT_TABLE() +private: + DECLARE_DYNAMIC_CLASS_NO_COPY(wxSashLayoutWindow) + DECLARE_EVENT_TABLE() }; -class WXDLLEXPORT wxMDIParentFrame; -class WXDLLEXPORT wxFrame; +#endif // wxUSE_SASH + +class WXDLLIMPEXP_FWD_CORE wxMDIParentFrame; +class WXDLLIMPEXP_FWD_CORE wxFrame; // This class implements the layout algorithm -class WXDLLEXPORT wxLayoutAlgorithm: public wxObject +class WXDLLIMPEXP_ADV wxLayoutAlgorithm: public wxObject { public: wxLayoutAlgorithm() {} +#if wxUSE_MDI_ARCHITECTURE // The MDI client window is sized to whatever's left over. - bool LayoutMDIFrame(wxMDIParentFrame* frame, wxRect* rect = (wxRect*) NULL); + bool LayoutMDIFrame(wxMDIParentFrame* frame, wxRect* rect = NULL); +#endif // wxUSE_MDI_ARCHITECTURE + + // mainWindow is sized to whatever's left over. This function for backward + // compatibility; use LayoutWindow. + bool LayoutFrame(wxFrame* frame, wxWindow* mainWindow = NULL); // mainWindow is sized to whatever's left over. - bool LayoutFrame(wxFrame* frame, wxWindow* mainWindow = (wxWindow*) NULL); + bool LayoutWindow(wxWindow* frame, wxWindow* mainWindow = NULL); }; #endif