#include "wx/frame.h"
+class WXDLLIMPEXP_FWD_CORE wxAcceleratorTable;
+
// ---------------------------------------------------------------------------
// wxMDIParentFrame
// ---------------------------------------------------------------------------
class WXDLLIMPEXP_CORE wxMDIParentFrame : public wxMDIParentFrameBase
{
public:
- wxMDIParentFrame();
+ wxMDIParentFrame() { Init(); }
wxMDIParentFrame(wxWindow *parent,
wxWindowID id,
const wxString& title,
long style = wxDEFAULT_FRAME_STYLE | wxVSCROLL | wxHSCROLL,
const wxString& name = wxFrameNameStr)
{
+ Init();
+
Create(parent, id, title, pos, size, style, name);
}
virtual void SetWindowMenu(wxMenu* menu);
virtual void DoMenuUpdates(wxMenu* menu = NULL);
+
+ // return the active child menu, if any
+ virtual WXHMENU MSWGetActiveMenu() const;
#endif // wxUSE_MENUS
+
// implementation only from now on
// MDI helpers
// -----------
+#if wxUSE_MENUS
// called by wxMDIChildFrame after it was successfully created
virtual void AddMDIChild(wxMDIChildFrame *child);
// called by wxMDIChildFrame just before it is destroyed
virtual void RemoveMDIChild(wxMDIChildFrame *child);
+#endif // wxUSE_MENUS
// handlers
// --------
void OnIconized(wxIconizeEvent& event);
bool HandleActivate(int state, bool minimized, WXHWND activate);
- bool HandleCommand(WXWORD id, WXWORD cmd, WXHWND control);
// override window proc for MDI-specific message processing
virtual WXLRESULT MSWWindowProc(WXUINT nMsg, WXWPARAM wParam, WXLPARAM lParam);
virtual WXLRESULT MSWDefWindowProc(WXUINT, WXWPARAM, WXLPARAM);
virtual bool MSWTranslateMessage(WXMSG* msg);
+#if wxUSE_MENUS
// override wxFrameBase function to also look in the active child menu bar
- virtual const wxMenuItem *FindItemInMenuBar(int menuId) const;
+ // and the "Window" menu
+ virtual wxMenuItem *FindItemInMenuBar(int menuId) const;
+#endif // wxUSE_MENUS
protected:
+ // override to pass menu/toolbar events to the active child first
+ virtual bool TryBefore(wxEvent& event);
+
#if wxUSE_MENUS_NATIVE
virtual void InternalSetMenuBar();
#endif // wxUSE_MENUS_NATIVE
// set the size of the MDI client window to match the frame size
void UpdateClientSize();
+private:
+ // common part of all ctors
+ void Init();
+
+#if wxUSE_MENUS
+ // "Window" menu commands event handlers
+ void OnMDICommand(wxCommandEvent& event);
+ void OnMDIChild(wxCommandEvent& event);
- // true if MDI Frame is intercepting commands, not child
- bool m_parentFrameActive;
-private:
// add/remove window menu if we have it (i.e. m_windowMenu != NULL)
void AddWindowMenu();
void RemoveWindowMenu();
+ // update the window menu (if we have it) to enable or disable the commands
+ // which only make sense when we have more than one child
+ void UpdateWindowMenu(bool enable);
+
+#if wxUSE_ACCEL
+ wxAcceleratorTable *m_accelWindowMenu;
+#endif // wxUSE_ACCEL
+#endif // wxUSE_MENUS
+
// return the number of child frames we currently have (maybe 0)
int GetChildFramesCount() const;
+
friend class WXDLLIMPEXP_FWD_CORE wxMDIChildFrame;
DECLARE_EVENT_TABLE()
DECLARE_DYNAMIC_CLASS(wxMDIParentFrame)
- DECLARE_NO_COPY_CLASS(wxMDIParentFrame)
+ wxDECLARE_NO_COPY_CLASS(wxMDIParentFrame);
};
// ---------------------------------------------------------------------------
// Handlers
bool HandleMDIActivate(long bActivate, WXHWND, WXHWND);
bool HandleWindowPosChanging(void *lpPos);
- bool HandleCommand(WXWORD id, WXWORD cmd, WXHWND control);
bool HandleGetMinMaxInfo(void *mmInfo);
virtual WXLRESULT MSWWindowProc(WXUINT message, WXWPARAM wParam, WXLPARAM lParam);
protected:
virtual void DoGetScreenPosition(int *x, int *y) const;
virtual void DoGetPosition(int *x, int *y) const;
+ virtual void DoSetSize(int x, int y, int width, int height, int sizeFlags);
virtual void DoSetClientSize(int width, int height);
virtual void InternalSetMenuBar();
virtual bool IsMDIChild() const { return true; }