]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/osx/carbon/mdi.h
Review/simplify/cleanup MDI classes for all platforms and introduce base
[wxWidgets.git] / include / wx / osx / carbon / mdi.h
index 39319b262b589b048dbc0ed8fa73f8b8697d53de..cea49387eb9b4cda50819b26e411332c043dcfd3 100644 (file)
@@ -1,88 +1,72 @@
 /////////////////////////////////////////////////////////////////////////////
-// Name:        mdi.h
+// Name:        wx/osx/carbon/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:      Stefan Csomor
-// Modified by:
+// Modified by: 2008-10-31 Vadim Zeitlin: derive from the base classes
 // Created:     1998-01-01
 // RCS-ID:      $Id$
 // Copyright:   (c) Stefan Csomor
+//              (c) 2008 Vadim Zeitlin
 // Licence:     wxWindows licence
 /////////////////////////////////////////////////////////////////////////////
 
-#ifndef _WX_MDI_H_
-#define _WX_MDI_H_
+#ifndef _WX_OSX_CARBON_MDI_H_
+#define _WX_OSX_CARBON_MDI_H_
 
-#include "wx/frame.h"
+class WXDLLIMPEXP_CORE wxMDIParentFrame : public wxMDIParentFrameBase
+{
+public:
+    wxMDIParentFrame() { Init(); }
+    wxMDIParentFrame(wxWindow *parent,
+                     wxWindowID id,
+                     const wxString& title,
+                     const wxPoint& pos = wxDefaultPosition,
+                     const wxSize& size = wxDefaultSize,
+                     long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
+                     const wxString& name = wxFrameNameStr)
+    {
+        Init();
+        Create(parent, id, title, pos, size, style, name);
+    }
 
-WXDLLIMPEXP_DATA_CORE(extern const char) wxStatusLineNameStr[];
+    bool Create(wxWindow *parent,
+                wxWindowID id,
+                const wxString& title,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize,
+                long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
+                const wxString& name = wxFrameNameStr);
 
-class WXDLLIMPEXP_FWD_CORE wxMDIClientWindow;
-class WXDLLIMPEXP_FWD_CORE wxMDIChildFrame;
+    virtual ~wxMDIParentFrame();
 
-class WXDLLIMPEXP_CORE wxMDIParentFrame: public wxFrame
-{
-  DECLARE_DYNAMIC_CLASS(wxMDIParentFrame)
+    // implement/override base class [pure] virtuals
+    // ---------------------------------------------
 
-public:
+    static bool IsTDI() { return false; }
+
+    virtual void AddChild(wxWindowBase *child);
+    virtual void RemoveChild(wxWindowBase *child);
+
+    virtual void ActivateNext() { /* TODO */ }
+    virtual void ActivatePrevious() { /* TODO */ }
+
+    virtual bool Show(bool show = true);
+
+
+    // Mac-specific implementation from now on
+    // ---------------------------------------
+
+    // Mac OS activate event
+    virtual void MacActivate(long timestamp, bool activating);
 
-  wxMDIParentFrame() { Init(); }
-  wxMDIParentFrame(wxWindow *parent,
-                   wxWindowID id,
-                   const wxString& title,
-                   const wxPoint& pos = wxDefaultPosition,
-                   const wxSize& size = wxDefaultSize,
-                   long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,  // Scrolling refers to client window
-                   const wxString& name = wxFrameNameStr)
-  {
-      Init();
-      Create(parent, id, title, pos, size, style, name);
-  }
-
-  virtual ~wxMDIParentFrame();
-
-  bool Create(wxWindow *parent,
-           wxWindowID id,
-           const wxString& title,
-           const wxPoint& pos = wxDefaultPosition,
-           const wxSize& size = wxDefaultSize,
-           long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
-           const wxString& name = wxFrameNameStr);
-
-  // Mac OS activate event
-  virtual void MacActivate(long timestamp, bool activating);
-
-  // wxWidgets activate event
-  void OnActivate(wxActivateEvent& event);
-  void OnSysColourChanged(wxSysColourChangedEvent& event);
-
-  void SetMenuBar(wxMenuBar *menu_bar);
-
-  // Get the active MDI child window (Windows only)
-  wxMDIChildFrame *GetActiveChild() const ;
-
-  // Get the client window
-  inline wxMDIClientWindow *GetClientWindow() const { return m_clientWindow; };
-  // Get rect to be used to center top-level children
-  virtual void GetRectForTopLevelChildren(int *x, int *y, int *w, int *h);
-
-  // Create the client window class (don't Create the window,
-  // just return a new class)
-  virtual wxMDIClientWindow *OnCreateClient() ;
-
-  // MDI operations
-  virtual void Cascade();
-  virtual void Tile(wxOrientation WXUNUSED(orient) = wxHORIZONTAL);
-  virtual void ArrangeIcons();
-  virtual void ActivateNext();
-  virtual void ActivatePrevious();
-
-  virtual bool Show( bool show = true );
-
-  // overridden base clas virtuals
-  virtual void AddChild(wxWindowBase *child);
-  virtual void RemoveChild(wxWindowBase *child);
+    // wxWidgets activate event
+    void OnActivate(wxActivateEvent& event);
+    void OnSysColourChanged(wxSysColourChangedEvent& event);
+
+    void SetMenuBar(wxMenuBar *menu_bar);
+
+    // Get rect to be used to center top-level children
+    virtual void GetRectForTopLevelChildren(int *x, int *y, int *w, int *h);
 
 protected:
     // common part of all ctors
@@ -93,9 +77,6 @@ protected:
     bool ShouldBeVisible() const;
 
 
-    // TODO maybe have this member
-    wxMDIClientWindow *m_clientWindow;
-    wxMDIChildFrame *m_currentChild;
     wxMenu *m_windowMenu;
 
     // true if MDI Frame is intercepting commands, not child
@@ -107,88 +88,67 @@ protected:
 
 private:
     friend class WXDLLIMPEXP_FWD_CORE wxMDIChildFrame;
+
     DECLARE_EVENT_TABLE()
+    DECLARE_DYNAMIC_CLASS(wxMDIParentFrame)
 };
 
-class WXDLLIMPEXP_CORE wxMDIChildFrame: public wxFrame
+class WXDLLIMPEXP_CORE wxMDIChildFrame : public wxMDIChildFrameBase
 {
-DECLARE_DYNAMIC_CLASS(wxMDIChildFrame)
 public:
+    wxMDIChildFrame() { Init(); }
+    wxMDIChildFrame(wxMDIParentFrame *parent,
+                    wxWindowID id,
+                    const wxString& title,
+                    const wxPoint& pos = wxDefaultPosition,
+                    const wxSize& size = wxDefaultSize,
+                    long style = wxDEFAULT_FRAME_STYLE,
+                    const wxString& name = wxFrameNameStr)
+    {
+        Init() ;
+        Create(parent, id, title, pos, size, style, name);
+    }
+
+    bool Create(wxMDIParentFrame *parent,
+                wxWindowID id,
+                const wxString& title,
+                const wxPoint& pos = wxDefaultPosition,
+                const wxSize& size = wxDefaultSize,
+                long style = wxDEFAULT_FRAME_STYLE,
+                const wxString& name = wxFrameNameStr);
+
+    virtual ~wxMDIChildFrame();
+
+    // un-override the base class override
+    virtual bool IsTopLevel() const { return true; }
+
+    // implement MDI operations
+    virtual void Activate();
+
+
+    // Mac OS activate event
+    virtual void MacActivate(long timestamp, bool activating);
 
-  wxMDIChildFrame();
-  inline wxMDIChildFrame(wxMDIParentFrame *parent,
-           wxWindowID id,
-           const wxString& title,
-           const wxPoint& pos = wxDefaultPosition,
-           const wxSize& size = wxDefaultSize,
-           long style = wxDEFAULT_FRAME_STYLE,
-           const wxString& name = wxFrameNameStr)
-  {
-      Init() ;
-      Create(parent, id, title, pos, size, style, name);
-  }
-
-  virtual ~wxMDIChildFrame();
-
-  bool Create(wxMDIParentFrame *parent,
-           wxWindowID id,
-           const wxString& title,
-           const wxPoint& pos = wxDefaultPosition,
-           const wxSize& size = wxDefaultSize,
-           long style = wxDEFAULT_FRAME_STYLE,
-           const wxString& name = wxFrameNameStr);
-
-  // Mac OS activate event
-  virtual void MacActivate(long timestamp, bool activating);
-
-  // Set menu bar
-  void SetMenuBar(wxMenuBar *menu_bar);
-
-  // MDI operations
-  virtual void Maximize();
-  virtual void Maximize( bool ){ Maximize() ; } // this one is inherited from wxFrame
-  virtual void Restore();
-  virtual void Activate();
 protected:
-
     // common part of all ctors
     void Init();
-};
 
-/* The client window is a child of the parent MDI frame, and itself
- * contains the child MDI frames.
- * However, you create the MDI children as children of the MDI parent:
- * only in the implementation does the client window become the parent
- * of the children. Phew! So the children are sort of 'adopted'...
- */
+    DECLARE_DYNAMIC_CLASS(wxMDIChildFrame)
+};
 
-class WXDLLIMPEXP_CORE wxMDIClientWindow: public wxWindow
+class WXDLLIMPEXP_CORE wxMDIClientWindow : public wxMDIClientWindowBase
 {
-  DECLARE_DYNAMIC_CLASS(wxMDIClientWindow)
- public:
-
-  wxMDIClientWindow() ;
-  inline wxMDIClientWindow(wxMDIParentFrame *parent, long style = 0)
-  {
-      CreateClient(parent, style);
-  }
-
-  virtual ~wxMDIClientWindow();
-
-  // Note: this is virtual, to allow overridden behaviour.
-  virtual bool CreateClient(wxMDIParentFrame *parent, long style = wxVSCROLL | wxHSCROLL);
+public:
+    wxMDIClientWindow() { }
+    virtual ~wxMDIClientWindow();
 
-  // Explicitly call default scroll behaviour
-  void OnScroll(wxScrollEvent& event);
+    virtual bool CreateClient(wxMDIParentFrame *parent,
+                              long style = wxVSCROLL | wxHSCROLL);
 
 protected:
-    // Gets the size available for subwindows after menu size, toolbar size
-    // and status bar size have been subtracted. If you want to manage your own
-    // toolbar(s), don't call SetToolBar.
-    void DoGetClientSize(int *width, int *height) const;
+    virtual void DoGetClientSize(int *width, int *height) const;
 
-DECLARE_EVENT_TABLE()
+    DECLARE_DYNAMIC_CLASS(wxMDIClientWindow)
 };
 
-#endif
-    // _WX_MDI_H_
+#endif // _WX_OSX_CARBON_MDI_H_