diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-10-04 12:41:22 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-11-01 22:12:33 +0100 |
commit | 26c375671aa362b2f59d84645784938677ae1719 (patch) | |
tree | 5ea3214bf75b3d612a6760597e16ab2cc041ce29 /include | |
parent | d611d5535b818854f9c6c6d4c144c2e5a9155a1a (diff) |
weld SwWordCountFloatDlg
enable modeless dialogs to emit a response so runAsync can be used with
them and get something called when the dialog is dismissed
Change-Id: Ie9603bcc063cefabbae635949671baf06620785d
Reviewed-on: https://gerrit.libreoffice.org/61383
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/sfx2/basedlgs.hxx | 43 | ||||
-rw-r--r-- | include/sfx2/childwin.hxx | 8 | ||||
-rw-r--r-- | include/vcl/dialog.hxx | 7 | ||||
-rw-r--r-- | include/vcl/weld.hxx | 6 |
4 files changed, 51 insertions, 13 deletions
diff --git a/include/sfx2/basedlgs.hxx b/include/sfx2/basedlgs.hxx index d4279599fe4b..1c3e2b37caa6 100644 --- a/include/sfx2/basedlgs.hxx +++ b/include/sfx2/basedlgs.hxx @@ -107,6 +107,41 @@ public: DECL_LINK(TimerHdl, Timer *, void); }; +class SFX2_DLLPUBLIC SfxDialogController : public weld::GenericDialogController +{ +private: + DECL_DLLPRIVATE_LINK(InstallLOKNotifierHdl, void*, vcl::ILibreOfficeKitNotifier*); +public: + SfxDialogController(weld::Widget* pParent, const OUString& rUIFile, const OString& rDialogId); +}; + +class SfxModelessDialog_Impl; +class SFX2_DLLPUBLIC SfxModelessDialogController : public SfxDialogController +{ + SfxBindings* m_pBindings; + std::unique_ptr<SfxModelessDialog_Impl> m_xImpl; + + SfxModelessDialogController(SfxModelessDialogController&) = delete; + void operator =(SfxModelessDialogController&) = delete; + + void Init(SfxBindings *pBindinx, SfxChildWindow *pCW); + + DECL_DLLPRIVATE_LINK(FocusInHdl, weld::Widget&, void); + DECL_DLLPRIVATE_LINK(FocusOutHdl, weld::Widget&, void); +protected: + SfxModelessDialogController(SfxBindings*, SfxChildWindow* pChildWin, + weld::Window* pParent, const OUString& rUIXMLDescription, const OString& rID); + virtual ~SfxModelessDialogController() override; + +public: + virtual void FillInfo(SfxChildWinInfo&) const; + void Initialize (SfxChildWinInfo const * pInfo); + void Close(); + void DeInit(); + void EndDialog(); + SfxBindings& GetBindings() { return *m_pBindings; } +}; + // class SfxFloatingWindow -------------------------------------------------- class SfxFloatingWindow_Impl; class SFX2_DLLPUBLIC SfxFloatingWindow: public FloatingWindow @@ -188,14 +223,6 @@ private: std::unique_ptr<SingleTabDlgImpl> pImpl; }; -class SFX2_DLLPUBLIC SfxDialogController : public weld::GenericDialogController -{ -private: - DECL_DLLPRIVATE_LINK(InstallLOKNotifierHdl, void*, vcl::ILibreOfficeKitNotifier*); -public: - SfxDialogController(weld::Widget* pParent, const OUString& rUIFile, const OString& rDialogId); -}; - class SFX2_DLLPUBLIC SfxSingleTabDialogController : public SfxDialogController { private: diff --git a/include/sfx2/childwin.hxx b/include/sfx2/childwin.hxx index 8c46889e533f..9a12bf896071 100644 --- a/include/sfx2/childwin.hxx +++ b/include/sfx2/childwin.hxx @@ -143,9 +143,10 @@ public: class SFX2_DLLPUBLIC SfxChildWindow { - VclPtr<vcl::Window> pParent; // parent window ( Topwindow ) - sal_uInt16 const nType; // ChildWindow-Id + VclPtr<vcl::Window> pParent; // parent window ( Topwindow ) + sal_uInt16 const nType; // ChildWindow-Id VclPtr<vcl::Window> pWindow; // actual contents + std::shared_ptr<SfxModelessDialogController> xController; // actual contents SfxChildAlignment eChildAlignment; // Current css::drawing::Alignment std::unique_ptr< SfxChildWindow_Impl> pImpl; // Implementation data std::unique_ptr<SfxChildWindowContext> pContext; // With context-sensitive ChildWindows: @@ -161,6 +162,9 @@ public: void Destroy(); vcl::Window* GetWindow() const { return pWindow; } + void SetController(std::shared_ptr<SfxModelessDialogController> controller) { xController = controller; } + void ClearController() { xController.reset(); } + std::shared_ptr<SfxModelessDialogController>& GetController() { return xController; } vcl::Window* GetParent() const { return pParent; } SfxChildAlignment GetAlignment() const diff --git a/include/vcl/dialog.hxx b/include/vcl/dialog.hxx index c5a3997566ff..b6d7bbdb110e 100644 --- a/include/vcl/dialog.hxx +++ b/include/vcl/dialog.hxx @@ -139,7 +139,7 @@ public: virtual FactoryFunction GetUITestFactory() const override; private: - bool ImplStartExecuteModal(); + bool ImplStartExecute(); static void ImplEndExecuteModal(); void ImplSetModalInputMode(bool bModal); public: @@ -174,6 +174,9 @@ public: void GrabFocusToFirstControl(); virtual void Resize() override; + void Activate() override; + + void SetInstallLOKNotifierHdl(const Link<void*, vcl::ILibreOfficeKitNotifier*>& rLink); void add_button(PushButton* pButton, int nResponse, bool bTransferOwnership); @@ -188,8 +191,6 @@ class VCL_DLLPUBLIC ModelessDialog : public Dialog public: explicit ModelessDialog( vcl::Window* pParent, const OUString& rID, const OUString& rUIXMLDescription, Dialog::InitFlag eFlag = Dialog::InitFlag::Default ); - - void Activate() override; }; class VCL_DLLPUBLIC ModalDialog : public Dialog diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index 7fcd7b884a52..fdb0cba3379e 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -196,8 +196,14 @@ public: virtual void set_busy_cursor(bool bBusy) = 0; virtual void window_move(int x, int y) = 0; virtual void set_modal(bool bModal) = 0; + virtual bool get_modal() const = 0; virtual bool get_extents_relative_to(Window& rRelative, int& x, int& y, int& width, int& height) = 0; + virtual bool get_resizable() const = 0; + virtual Size get_size() const = 0; + virtual Point get_position() const = 0; + virtual void set_window_state(const OString& rStr) = 0; + virtual OString get_window_state(WindowStateMask nMask) const = 0; virtual css::uno::Reference<css::awt::XWindow> GetXWindow() = 0; |