X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9b6dbb09746f8f5ee0549a2ff39ae0ac4c725898..e0543d2a7000693be84cd8bb5cfa3a85b1ad457c:/include/wx/motif/mdi.h diff --git a/include/wx/motif/mdi.h b/include/wx/motif/mdi.h index fa1db5314c..557f0044db 100644 --- a/include/wx/motif/mdi.h +++ b/include/wx/motif/mdi.h @@ -1,8 +1,6 @@ ///////////////////////////////////////////////////////////////////////////// // Name: mdi.h // Purpose: MDI (Multiple Document Interface) classes. -// This doesn't have to be implemented just like Windows, -// it could be a tabbed design as in wxGTK. // Author: Julian Smart // Modified by: // Created: 17/09/98 @@ -18,7 +16,16 @@ #pragma interface "mdi.h" #endif +/* +New MDI scheme using tabs. We can use a wxNotebook to implement the client +window. wxMDIChildFrame can be implemented as an XmMainWindow widget +as before, and is a child of the notebook _and_ of the parent frame... +but wxMDIChildFrame::GetParent should return the parent frame. + +*/ + #include "wx/frame.h" +#include "wx/notebook.h" WXDLLEXPORT_DATA(extern const char*) wxFrameNameStr; WXDLLEXPORT_DATA(extern const char*) wxStatusLineNameStr; @@ -65,8 +72,9 @@ public: // and status bar size have been subtracted. If you want to manage your own // toolbar(s), don't call SetToolBar. void GetClientSize(int *width, int *height) const; + wxSize GetClientSize() const { return wxWindow::GetClientSize(); } - // Get the active MDI child window (Windows only) + // Get the active MDI child window wxMDIChildFrame *GetActiveChild() const ; // Get the client window @@ -83,10 +91,25 @@ public: virtual void ActivateNext(); virtual void ActivatePrevious(); +// Implementation + + // Set the active child + inline void SetActiveChild(wxMDIChildFrame* child) { m_activeChild = child; } + + // Set the child's menubar into the parent frame + void SetChildMenuBar(wxMDIChildFrame* frame); + + inline wxMenuBar* GetActiveMenuBar() const { return m_activeMenuBar; } + + // Redirect events to active child first + virtual bool ProcessEvent(wxEvent& event); + + protected: - // TODO maybe have this member - wxMDIClientWindow *m_clientWindow; + wxMDIClientWindow* m_clientWindow; + wxMDIChildFrame* m_activeChild; + wxMenuBar* m_activeMenuBar; DECLARE_EVENT_TABLE() }; @@ -120,13 +143,63 @@ public: // Set menu bar void SetMenuBar(wxMenuBar *menu_bar); + void SetTitle(const wxString& title); + void SetClientSize(int width, int height); + void SetClientSize(const wxSize& size) { wxWindow::SetClientSize(size); } + + void GetClientSize(int *width, int *height) const; + wxSize GetClientSize() const { return wxWindow::GetClientSize(); } + + void SetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); + virtual void SetSize(const wxRect& rect, int sizeFlags = wxSIZE_AUTO) + { wxWindow::SetSize(rect, sizeFlags); } + virtual void SetSize(const wxSize& size) { wxWindow::SetSize(size); } + + void GetSize(int *width, int *height) const; + wxSize GetSize() const { return wxWindow::GetSize(); } + void GetPosition(int *x, int *y) const ; + wxPoint GetPosition() const { return wxWindow::GetPosition(); } + + // Set icon + virtual void SetIcon(const wxIcon& icon); + + // Override wxFrame operations + void CaptureMouse(); + void ReleaseMouse(); + void Raise(); + void Lower(void); + void SetSizeHints(int minW = -1, int minH = -1, int maxW = -1, int maxH = -1, int incW = -1, int incH = -1); // MDI operations virtual void Maximize(); + inline void Minimize() { Iconize(TRUE); }; + virtual void Iconize(bool iconize); virtual void Restore(); virtual void Activate(); + virtual bool IsIconized() const ; + + // Is the frame maximized? Returns TRUE for + // wxMDIChildFrame due to the tabbed implementation. + virtual bool IsMaximized(void) const ; + + bool Show(bool show); + + inline WXWidget GetMainWidget() const { return m_mainWidget; }; + inline WXWidget GetTopWidget() const { return m_mainWidget; }; + inline WXWidget GetClientWidget() const { return m_mainWidget; }; + +/* + virtual void OnRaise(); + virtual void OnLower(); +*/ + + inline void SetMDIParentFrame(wxMDIParentFrame* parentFrame) { m_mdiParentFrame = parentFrame; } + inline wxMDIParentFrame* GetMDIParentFrame() const { return m_mdiParentFrame; } + +protected: + wxMDIParentFrame* m_mdiParentFrame; }; /* The client window is a child of the parent MDI frame, and itself @@ -136,7 +209,7 @@ public: * of the children. Phew! So the children are sort of 'adopted'... */ -class WXDLLEXPORT wxMDIClientWindow: public wxWindow +class WXDLLEXPORT wxMDIClientWindow: public wxNotebook { DECLARE_DYNAMIC_CLASS(wxMDIClientWindow) public: @@ -149,12 +222,32 @@ class WXDLLEXPORT wxMDIClientWindow: public wxWindow ~wxMDIClientWindow(); + void SetSize(int x, int y, int width, int height, int sizeFlags = wxSIZE_AUTO); + void SetSize(const wxRect& rect, int sizeFlags = wxSIZE_AUTO) + { wxWindow::SetSize(rect, sizeFlags); } + void SetSize(const wxSize& size) { wxWindow::SetSize(size); } + + void SetClientSize(int width, int height); + void SetClientSize(const wxSize& size) { wxWindow::SetClientSize(size); } + + void GetClientSize(int *width, int *height) const; + wxSize GetClientSize() const { return wxWindow::GetClientSize(); } + + void GetSize(int *width, int *height) const ; + wxSize GetSize() const { return wxWindow::GetSize(); } + + void GetPosition(int *x, int *y) const ; + wxPoint GetPosition() const { return wxWindow::GetPosition(); } + // Note: this is virtual, to allow overridden behaviour. virtual bool CreateClient(wxMDIParentFrame *parent, long style = wxVSCROLL | wxHSCROLL); // Explicitly call default scroll behaviour void OnScroll(wxScrollEvent& event); + // Implementation + void OnPageChanged(wxNotebookEvent& event); + protected: DECLARE_EVENT_TABLE()