164 lines
5.1 KiB
C++
164 lines
5.1 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
// Name: wx/qt/mdi.h
|
|
// Author: Peter Most, Mariano Reingart
|
|
// Copyright: (c) 2010 wxWidgets dev team
|
|
// Licence: wxWindows licence
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef _WX_QT_MDI_H_
|
|
#define _WX_QT_MDI_H_
|
|
|
|
class QMdiArea;
|
|
class QMdiSubWindow;
|
|
|
|
class WXDLLIMPEXP_CORE wxMDIParentFrame : public wxMDIParentFrameBase
|
|
{
|
|
public:
|
|
wxMDIParentFrame() = default;
|
|
|
|
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 = wxASCII_STR(wxFrameNameStr));
|
|
|
|
~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 = wxASCII_STR(wxFrameNameStr));
|
|
|
|
QMdiArea* GetQtMdiArea() const;
|
|
|
|
enum class Layout
|
|
{
|
|
MDI,
|
|
Tabbed
|
|
};
|
|
|
|
void QtSetPreferredDILayout(Layout layout);
|
|
|
|
// override/implement base class [pure] virtual methods
|
|
// ----------------------------------------------------
|
|
|
|
// The default is to return what wxMDIParentFrame::IsTDI() is supposed to
|
|
// return under the target platform. i.e. wxMSW and wxOSX return false,
|
|
// while wxGTK returns true. Use QtSetPreferredDILayout() to change that.
|
|
static bool IsTDI() { return ms_layout == Layout::Tabbed; }
|
|
|
|
virtual void Cascade() override;
|
|
virtual void Tile(wxOrientation orient = wxHORIZONTAL) override;
|
|
virtual void ActivateNext() override;
|
|
virtual void ActivatePrevious() override;
|
|
|
|
// implementation only from now on
|
|
|
|
// MDI helpers
|
|
// -----------
|
|
|
|
#if wxUSE_MENUS
|
|
// called by wxMDIChildFrame after it was successfully created
|
|
void AddMDIChild(wxMDIChildFrame* child);
|
|
|
|
// called by wxMDIChildFrame just before it is destroyed
|
|
void RemoveMDIChild(wxMDIChildFrame* child);
|
|
#endif // wxUSE_MENUS
|
|
|
|
private:
|
|
void OnMDICommand(wxCommandEvent& event);
|
|
|
|
// add/remove window menu if we have it (i.e. m_windowMenu != nullptr)
|
|
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);
|
|
|
|
// return the number of child frames we currently have (maybe 0)
|
|
int GetChildFramesCount() const;
|
|
|
|
// TDI=true, MDI=false
|
|
// Default to false under Windows, true otherwise.
|
|
static Layout ms_layout;
|
|
|
|
wxDECLARE_DYNAMIC_CLASS(wxMDIParentFrame);
|
|
};
|
|
|
|
|
|
|
|
class WXDLLIMPEXP_CORE wxMDIChildFrame : public wxMDIChildFrameBase
|
|
{
|
|
public:
|
|
wxMDIChildFrame() = default;
|
|
|
|
wxMDIChildFrame(wxMDIParentFrame *parent,
|
|
wxWindowID id,
|
|
const wxString& title,
|
|
const wxPoint& pos = wxDefaultPosition,
|
|
const wxSize& size = wxDefaultSize,
|
|
long style = wxDEFAULT_FRAME_STYLE,
|
|
const wxString& name = wxASCII_STR(wxFrameNameStr));
|
|
|
|
~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 = wxASCII_STR(wxFrameNameStr));
|
|
|
|
virtual void Activate() override;
|
|
|
|
virtual void SetMenuBar(wxMenuBar* menubar) override;
|
|
|
|
// This function is responsible for attaching/detaching this frame's menubar
|
|
// to m_mdiParent. i.e. the menubar is attached when this frame becomes active
|
|
// Otherwise, it will be detached and the m_mdiParent's menubar will be restored.
|
|
void InternalSetMenuBar();
|
|
|
|
// wxMDIChildFrame doesn't have toolbar nor statusbar
|
|
// --------------------------------------------------
|
|
|
|
#if wxUSE_STATUSBAR
|
|
virtual void SetStatusBar(wxStatusBar* WXUNUSED(statusBar)) override {}
|
|
#endif // wxUSE_STATUSBAR
|
|
|
|
#if wxUSE_TOOLBAR
|
|
virtual void SetToolBar(wxToolBar* WXUNUSED(toolbar)) override {}
|
|
#endif // wxUSE_TOOLBAR
|
|
|
|
virtual void SetWindowStyleFlag( long style ) override;
|
|
|
|
private:
|
|
void AttachWindowMenuTo(wxMenuBar* attachedMenuBar, wxMenuBar* detachedMenuBar);
|
|
|
|
wxMenuBar* m_menuBar = nullptr;
|
|
|
|
QMdiSubWindow* m_qtSubWindow = nullptr;
|
|
|
|
wxDECLARE_DYNAMIC_CLASS(wxMDIChildFrame);
|
|
};
|
|
|
|
|
|
|
|
class WXDLLIMPEXP_CORE wxMDIClientWindow : public wxMDIClientWindowBase
|
|
{
|
|
public:
|
|
wxMDIClientWindow() = default;
|
|
|
|
virtual bool CreateClient(wxMDIParentFrame *parent, long style = wxVSCROLL | wxHSCROLL) override;
|
|
|
|
wxDECLARE_DYNAMIC_CLASS(wxMDIClientWindow);
|
|
};
|
|
|
|
#endif // _WX_QT_MDI_H_
|