#ifndef _WX_MDI_H_
#define _WX_MDI_H_
-#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
-#pragma interface "mdi.h"
-#endif
-
#include "wx/frame.h"
-WXDLLEXPORT_DATA(extern const wxChar*) wxFrameNameStr;
-WXDLLEXPORT_DATA(extern const wxChar*) wxStatusLineNameStr;
+WXDLLIMPEXP_DATA_CORE(extern const char) wxStatusLineNameStr[];
-class WXDLLEXPORT wxMDIClientWindow;
-class WXDLLEXPORT wxMDIChildFrame;
+class WXDLLIMPEXP_FWD_CORE wxMDIClientWindow;
+class WXDLLIMPEXP_FWD_CORE wxMDIChildFrame;
-class WXDLLEXPORT wxMDIParentFrame: public wxFrame
+class WXDLLIMPEXP_CORE wxMDIParentFrame: public wxFrame
{
DECLARE_DYNAMIC_CLASS(wxMDIParentFrame)
public:
- wxMDIParentFrame();
- inline 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)
+ 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);
}
- ~wxMDIParentFrame();
+ virtual ~wxMDIParentFrame();
bool Create(wxWindow *parent,
wxWindowID id,
virtual bool Show( bool show = true );
+ // overridden base clas virtuals
+ virtual void AddChild(wxWindowBase *child);
+ virtual void RemoveChild(wxWindowBase *child);
+
protected:
+ // common part of all ctors
+ void Init();
+
+ // returns true if this frame has some contents and so should be visible,
+ // false if it's used solely as container for its children
+ bool ShouldBeVisible() const;
+
- // TODO maybe have this member
- wxMDIClientWindow *m_clientWindow;
- wxMDIChildFrame * m_currentChild;
- wxMenu* m_windowMenu;
+ // TODO maybe have this member
+ wxMDIClientWindow *m_clientWindow;
+ wxMDIChildFrame *m_currentChild;
+ wxMenu *m_windowMenu;
- // TRUE if MDI Frame is intercepting commands, not child
+ // true if MDI Frame is intercepting commands, not child
bool m_parentFrameActive;
+ // true if the frame should be shown but is not because it is empty and
+ // useless otherwise than a container for its children
+ bool m_shouldBeShown;
+
private:
- friend class WXDLLEXPORT wxMDIChildFrame;
-DECLARE_EVENT_TABLE()
+ friend class WXDLLIMPEXP_FWD_CORE wxMDIChildFrame;
+ DECLARE_EVENT_TABLE()
};
-class WXDLLEXPORT wxMDIChildFrame: public wxFrame
+class WXDLLIMPEXP_CORE wxMDIChildFrame: public wxFrame
{
DECLARE_DYNAMIC_CLASS(wxMDIChildFrame)
public:
Create(parent, id, title, pos, size, style, name);
}
- ~wxMDIChildFrame();
+ virtual ~wxMDIChildFrame();
bool Create(wxMDIParentFrame *parent,
wxWindowID id,
* of the children. Phew! So the children are sort of 'adopted'...
*/
-class WXDLLEXPORT wxMDIClientWindow: public wxWindow
+class WXDLLIMPEXP_CORE wxMDIClientWindow: public wxWindow
{
DECLARE_DYNAMIC_CLASS(wxMDIClientWindow)
public:
CreateClient(parent, style);
}
- ~wxMDIClientWindow();
+ virtual ~wxMDIClientWindow();
// Note: this is virtual, to allow overridden behaviour.
virtual bool CreateClient(wxMDIParentFrame *parent, long style = wxVSCROLL | wxHSCROLL);
- // 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;
-
// Explicitly call default scroll behaviour
void OnScroll(wxScrollEvent& event);
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;
DECLARE_EVENT_TABLE()
};