Kaydet (Commit) 2dd1645d authored tarafından Markus Mohrhard's avatar Markus Mohrhard

allow adding a menu to a modal dialog

Change-Id: I3da2ec747f73c44bf7bcb8a7ec3d116272dc806f
Reviewed-on: https://gerrit.libreoffice.org/43252Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarMarkus Mohrhard <markus.mohrhard@googlemail.com>
üst 4d1ee296
...@@ -54,6 +54,7 @@ private: ...@@ -54,6 +54,7 @@ private:
bool mbInClose; bool mbInClose;
bool mbModalMode; bool mbModalMode;
bool mbPaintComplete; bool mbPaintComplete;
bool mbForceBorderWindow;
InitFlag mnInitFlag; // used for deferred init InitFlag mnInitFlag; // used for deferred init
VclPtr<VclButtonBox> mpActionArea; VclPtr<VclButtonBox> mpActionArea;
...@@ -63,6 +64,7 @@ private: ...@@ -63,6 +64,7 @@ private:
SAL_DLLPRIVATE void ImplInitDialogData(); SAL_DLLPRIVATE void ImplInitDialogData();
SAL_DLLPRIVATE void ImplInitSettings(); SAL_DLLPRIVATE void ImplInitSettings();
SAL_DLLPRIVATE VclPtr<vcl::Window> AddBorderWindow(vcl::Window* pParent, WinBits nBits);
virtual void ApplySettings(vcl::RenderContext& rRenderContext) override; virtual void ApplySettings(vcl::RenderContext& rRenderContext) override;
...@@ -100,7 +102,7 @@ public: ...@@ -100,7 +102,7 @@ public:
protected: protected:
explicit Dialog( WindowType nType ); explicit Dialog( WindowType nType );
explicit Dialog( vcl::Window* pParent, const OUString& rID, const OUString& rUIXMLDescription, WindowType nType, InitFlag eFlag = InitFlag::Default ); explicit Dialog( vcl::Window* pParent, const OUString& rID, const OUString& rUIXMLDescription, WindowType nType, InitFlag eFlag = InitFlag::Default, bool bBorder = false );
virtual void Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize, DrawFlags nFlags ) override; virtual void Draw( OutputDevice* pDev, const Point& rPos, const Size& rSize, DrawFlags nFlags ) override;
virtual void settingOptimalLayoutSize(Window *pBox) override; virtual void settingOptimalLayoutSize(Window *pBox) override;
...@@ -189,7 +191,7 @@ class VCL_DLLPUBLIC ModalDialog : public Dialog ...@@ -189,7 +191,7 @@ class VCL_DLLPUBLIC ModalDialog : public Dialog
{ {
public: public:
explicit ModalDialog( vcl::Window* pParent, WinBits nStyle = WB_STDMODAL ); explicit ModalDialog( vcl::Window* pParent, WinBits nStyle = WB_STDMODAL );
explicit ModalDialog( vcl::Window* pParent, const OUString& rID, const OUString& rUIXMLDescription ); explicit ModalDialog( vcl::Window* pParent, const OUString& rID, const OUString& rUIXMLDescription, bool bBorder = false );
protected: protected:
using Window::Show; using Window::Show;
......
...@@ -389,6 +389,18 @@ vcl::Window* Dialog::GetDefaultParent(WinBits nStyle) ...@@ -389,6 +389,18 @@ vcl::Window* Dialog::GetDefaultParent(WinBits nStyle)
return pParent; return pParent;
} }
VclPtr<vcl::Window> Dialog::AddBorderWindow(vcl::Window* pParent, WinBits nStyle)
{
VclPtrInstance<ImplBorderWindow> pBorderWin( pParent, nStyle, BorderWindowStyle::Frame );
SystemWindow::ImplInit( pBorderWin, nStyle & ~WB_BORDER, nullptr );
pBorderWin->mpWindowImpl->mpClientWindow = this;
pBorderWin->GetBorder( mpWindowImpl->mnLeftBorder, mpWindowImpl->mnTopBorder, mpWindowImpl->mnRightBorder, mpWindowImpl->mnBottomBorder );
mpWindowImpl->mpBorderWindow = pBorderWin;
mpWindowImpl->mpRealParent = pParent;
return pBorderWin;
}
void Dialog::ImplInit( vcl::Window* pParent, WinBits nStyle, InitFlag eFlag ) void Dialog::ImplInit( vcl::Window* pParent, WinBits nStyle, InitFlag eFlag )
{ {
SystemWindowFlags nSysWinMode = Application::GetSystemWindowMode(); SystemWindowFlags nSysWinMode = Application::GetSystemWindowMode();
...@@ -414,14 +426,9 @@ void Dialog::ImplInit( vcl::Window* pParent, WinBits nStyle, InitFlag eFlag ) ...@@ -414,14 +426,9 @@ void Dialog::ImplInit( vcl::Window* pParent, WinBits nStyle, InitFlag eFlag )
(nSysWinMode & SystemWindowFlags::DIALOG) ) (nSysWinMode & SystemWindowFlags::DIALOG) )
{ {
// create window with a small border ? // create window with a small border ?
if ( (nStyle & (WB_BORDER | WB_NOBORDER | WB_MOVEABLE | WB_SIZEABLE | WB_CLOSEABLE)) == WB_BORDER ) if (mbForceBorderWindow || ((nStyle & (WB_BORDER | WB_NOBORDER | WB_MOVEABLE | WB_SIZEABLE | WB_CLOSEABLE)) == WB_BORDER ))
{ {
VclPtrInstance<ImplBorderWindow> pBorderWin( pParent, nStyle, BorderWindowStyle::Frame ); AddBorderWindow(pParent, nStyle);
SystemWindow::ImplInit( pBorderWin, nStyle & ~WB_BORDER, nullptr );
pBorderWin->mpWindowImpl->mpClientWindow = this;
pBorderWin->GetBorder( mpWindowImpl->mnLeftBorder, mpWindowImpl->mnTopBorder, mpWindowImpl->mnRightBorder, mpWindowImpl->mnBottomBorder );
mpWindowImpl->mpBorderWindow = pBorderWin;
mpWindowImpl->mpRealParent = pParent;
} }
else else
{ {
...@@ -509,12 +516,13 @@ void Dialog::doDeferredInit(WinBits nBits) ...@@ -509,12 +516,13 @@ void Dialog::doDeferredInit(WinBits nBits)
{ {
VclPtr<vcl::Window> pParent = mpDialogParent; VclPtr<vcl::Window> pParent = mpDialogParent;
mpDialogParent = nullptr; mpDialogParent = nullptr;
ImplInit(pParent, nBits, mnInitFlag); ImplInit(pParent, nBits | WB_BORDER, mnInitFlag);
mbIsDeferredInit = false; mbIsDeferredInit = false;
} }
Dialog::Dialog(vcl::Window* pParent, const OUString& rID, const OUString& rUIXMLDescription) Dialog::Dialog(vcl::Window* pParent, const OUString& rID, const OUString& rUIXMLDescription)
: SystemWindow(WindowType::DIALOG) : SystemWindow(WindowType::DIALOG)
, mbForceBorderWindow(false)
, mnInitFlag(InitFlag::Default) , mnInitFlag(InitFlag::Default)
, maID(rID) , maID(rID)
{ {
...@@ -522,8 +530,9 @@ Dialog::Dialog(vcl::Window* pParent, const OUString& rID, const OUString& rUIXML ...@@ -522,8 +530,9 @@ Dialog::Dialog(vcl::Window* pParent, const OUString& rID, const OUString& rUIXML
loadUI(pParent, OUStringToOString(rID, RTL_TEXTENCODING_UTF8), rUIXMLDescription); loadUI(pParent, OUStringToOString(rID, RTL_TEXTENCODING_UTF8), rUIXMLDescription);
} }
Dialog::Dialog(vcl::Window* pParent, const OUString& rID, const OUString& rUIXMLDescription, WindowType nType, InitFlag eFlag) Dialog::Dialog(vcl::Window* pParent, const OUString& rID, const OUString& rUIXMLDescription, WindowType nType, InitFlag eFlag, bool bBorder)
: SystemWindow(nType) : SystemWindow(nType)
, mbForceBorderWindow(bBorder)
, mnInitFlag(eFlag) , mnInitFlag(eFlag)
, maID(rID) , maID(rID)
{ {
...@@ -533,6 +542,7 @@ Dialog::Dialog(vcl::Window* pParent, const OUString& rID, const OUString& rUIXML ...@@ -533,6 +542,7 @@ Dialog::Dialog(vcl::Window* pParent, const OUString& rID, const OUString& rUIXML
Dialog::Dialog(vcl::Window* pParent, WinBits nStyle, InitFlag eFlag) Dialog::Dialog(vcl::Window* pParent, WinBits nStyle, InitFlag eFlag)
: SystemWindow(WindowType::DIALOG) : SystemWindow(WindowType::DIALOG)
, mbForceBorderWindow(false)
, mnInitFlag(eFlag) , mnInitFlag(eFlag)
{ {
ImplInitDialogData(); ImplInitDialogData();
...@@ -1356,8 +1366,8 @@ ModalDialog::ModalDialog( vcl::Window* pParent, WinBits nStyle ) : ...@@ -1356,8 +1366,8 @@ ModalDialog::ModalDialog( vcl::Window* pParent, WinBits nStyle ) :
ImplInit( pParent, nStyle ); ImplInit( pParent, nStyle );
} }
ModalDialog::ModalDialog( vcl::Window* pParent, const OUString& rID, const OUString& rUIXMLDescription ) : ModalDialog::ModalDialog( vcl::Window* pParent, const OUString& rID, const OUString& rUIXMLDescription, bool bBorder ) :
Dialog(pParent, rID, rUIXMLDescription, WindowType::MODALDIALOG) Dialog(pParent, rID, rUIXMLDescription, WindowType::MODALDIALOG, InitFlag::Default, bBorder)
{ {
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment