1 ///////////////////////////////////////////////////////////////////////////// 
   3 // Purpose:     MDI (Multiple Document Interface) classes. 
   4 //              This doesn't have to be implemented just like Windows, 
   5 //              it could be a tabbed design as in wxGTK. 
  10 // Copyright:   (c) AUTHOR 
  11 // Licence:     wxWindows licence 
  12 ///////////////////////////////////////////////////////////////////////////// 
  18 #pragma interface "mdi.h" 
  23 WXDLLEXPORT_DATA(extern const char*) wxFrameNameStr
; 
  24 WXDLLEXPORT_DATA(extern const char*) wxStatusLineNameStr
; 
  26 class WXDLLEXPORT wxMDIClientWindow
; 
  27 class WXDLLEXPORT wxMDIChildFrame
; 
  29 class WXDLLEXPORT wxMDIParentFrame
: public wxFrame
 
  31 DECLARE_DYNAMIC_CLASS(wxMDIParentFrame
) 
  33   friend class WXDLLEXPORT wxMDIChildFrame
; 
  37   inline wxMDIParentFrame(wxWindow 
*parent
, 
  39            const wxString
& title
, 
  40            const wxPoint
& pos 
= wxDefaultPosition
, 
  41            const wxSize
& size 
= wxDefaultSize
, 
  42            long style 
= wxDEFAULT_FRAME_STYLE 
| wxVSCROLL 
| wxHSCROLL
,  // Scrolling refers to client window 
  43            const wxString
& name 
= wxFrameNameStr
) 
  45       Create(parent
, id
, title
, pos
, size
, style
, name
); 
  50   bool Create(wxWindow 
*parent
, 
  52            const wxString
& title
, 
  53            const wxPoint
& pos 
= wxDefaultPosition
, 
  54            const wxSize
& size 
= wxDefaultSize
, 
  55            long style 
= wxDEFAULT_FRAME_STYLE 
| wxVSCROLL 
| wxHSCROLL
, 
  56            const wxString
& name 
= wxFrameNameStr
); 
  58   void OnSize(wxSizeEvent
& event
); 
  59   void OnActivate(wxActivateEvent
& event
); 
  60   void OnSysColourChanged(wxSysColourChangedEvent
& event
); 
  62   void SetMenuBar(wxMenuBar 
*menu_bar
); 
  64   // Gets the size available for subwindows after menu size, toolbar size 
  65   // and status bar size have been subtracted. If you want to manage your own 
  66   // toolbar(s), don't call SetToolBar. 
  67   void DoGetClientSize(int *width
, int *height
) const; 
  69   // Get the active MDI child window (Windows only) 
  70   wxMDIChildFrame 
*GetActiveChild() const ; 
  72   // Get the client window 
  73   inline wxMDIClientWindow 
*GetClientWindow() const { return m_clientWindow
; }; 
  75   // Create the client window class (don't Create the window, 
  76   // just return a new class) 
  77   virtual wxMDIClientWindow 
*OnCreateClient() ; 
  80   virtual void Cascade(); 
  82   virtual void ArrangeIcons(); 
  83   virtual void ActivateNext(); 
  84   virtual void ActivatePrevious(); 
  88   // TODO maybe have this member 
  89   wxMDIClientWindow     
*m_clientWindow
; 
  94 class WXDLLEXPORT wxMDIChildFrame
: public wxFrame
 
  96 DECLARE_DYNAMIC_CLASS(wxMDIChildFrame
) 
 100   inline wxMDIChildFrame(wxMDIParentFrame 
*parent
, 
 102            const wxString
& title
, 
 103            const wxPoint
& pos 
= wxDefaultPosition
, 
 104            const wxSize
& size 
= wxDefaultSize
, 
 105            long style 
= wxDEFAULT_FRAME_STYLE
, 
 106            const wxString
& name 
= wxFrameNameStr
) 
 108       Create(parent
, id
, title
, pos
, size
, style
, name
); 
 113   bool Create(wxMDIParentFrame 
*parent
, 
 115            const wxString
& title
, 
 116            const wxPoint
& pos 
= wxDefaultPosition
, 
 117            const wxSize
& size 
= wxDefaultSize
, 
 118            long style 
= wxDEFAULT_FRAME_STYLE
, 
 119            const wxString
& name 
= wxFrameNameStr
); 
 122   void SetMenuBar(wxMenuBar 
*menu_bar
); 
 123   void SetClientSize(int width
, int height
); 
 124   void GetPosition(int *x
, int *y
) const ; 
 127   virtual void Maximize(); 
 128   virtual void Maximize( bool ){ Maximize() ; } // this one is inherited from wxFrame 
 129   virtual void Restore(); 
 130   virtual void Activate(); 
 133 /* The client window is a child of the parent MDI frame, and itself 
 134  * contains the child MDI frames. 
 135  * However, you create the MDI children as children of the MDI parent: 
 136  * only in the implementation does the client window become the parent 
 137  * of the children. Phew! So the children are sort of 'adopted'... 
 140 class WXDLLEXPORT wxMDIClientWindow
: public wxWindow
 
 142   DECLARE_DYNAMIC_CLASS(wxMDIClientWindow
) 
 145   wxMDIClientWindow() ; 
 146   inline wxMDIClientWindow(wxMDIParentFrame 
*parent
, long style 
= 0) 
 148       CreateClient(parent
, style
); 
 151   ~wxMDIClientWindow(); 
 153   // Note: this is virtual, to allow overridden behaviour. 
 154   virtual bool CreateClient(wxMDIParentFrame 
*parent
, long style 
= wxVSCROLL 
| wxHSCROLL
); 
 156   // Explicitly call default scroll behaviour 
 157   void OnScroll(wxScrollEvent
& event
); 
 161 DECLARE_EVENT_TABLE()