#include "wx/frame.h"
+class WXDLLIMPEXP_FWD_CORE wxAcceleratorTable;
+
// ---------------------------------------------------------------------------
// wxMDIParentFrame
// ---------------------------------------------------------------------------
class WXDLLIMPEXP_CORE wxMDIParentFrame : public wxMDIParentFrameBase
{
public:
- wxMDIParentFrame();
+ wxMDIParentFrame() { }
wxMDIParentFrame(wxWindow *parent,
wxWindowID id,
const wxString& title,
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
// --------
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:
#if wxUSE_MENUS_NATIVE
// set the size of the MDI client window to match the frame size
void UpdateClientSize();
+private:
+#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);