summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-11-13 21:28:12 +0000
committerCaolán McNamara <caolanm@redhat.com>2019-12-04 17:37:34 +0100
commit20d5f61abfd47fc76da3be8241653fdb7ae10491 (patch)
tree33ed974dc0e6a152f394b8260dd0237df83174d5 /include
parent1187e2b35bb864808d9d158f0b10d83ce75dbaa7 (diff)
factor out 'weld::Widget as XWindow'
Change-Id: I24b52c5b8908fdf1a66fd26b2dc438b9557afa6e Reviewed-on: https://gerrit.libreoffice.org/82641 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/vcl/weldutils.hxx128
1 files changed, 128 insertions, 0 deletions
diff --git a/include/vcl/weldutils.hxx b/include/vcl/weldutils.hxx
index 4144803e8b3d..764d343902df 100644
--- a/include/vcl/weldutils.hxx
+++ b/include/vcl/weldutils.hxx
@@ -10,8 +10,11 @@
#ifndef INCLUDED_VCL_WELDUTILS_HXX
#define INCLUDED_VCL_WELDUTILS_HXX
+#include <com/sun/star/awt/XWindow.hpp>
#include <com/sun/star/frame/XFrame.hpp>
#include <com/sun/star/uno/Reference.hxx>
+#include <comphelper/interfacecontainer2.hxx>
+#include <cppuhelper/compbase.hxx>
#include <tools/link.hxx>
#include <vcl/dllapi.h>
@@ -29,6 +32,131 @@ public:
// fill in the label and icons for actions and dispatch the action on item click
ToolbarUnoDispatcher(Toolbar& rToolbar, const css::uno::Reference<css::frame::XFrame>& rFrame);
};
+
+typedef cppu::WeakComponentImplHelper<css::awt::XWindow> TransportAsXWindow_Base;
+
+class VCL_DLLPUBLIC TransportAsXWindow : public TransportAsXWindow_Base
+{
+private:
+ osl::Mutex m_aHelperMtx;
+ weld::Widget* m_pWeldWidget;
+
+ comphelper::OInterfaceContainerHelper2 m_aWindowListeners;
+ comphelper::OInterfaceContainerHelper2 m_aKeyListeners;
+ comphelper::OInterfaceContainerHelper2 m_aFocusListeners;
+ comphelper::OInterfaceContainerHelper2 m_aMouseListeners;
+ comphelper::OInterfaceContainerHelper2 m_aMotionListeners;
+ comphelper::OInterfaceContainerHelper2 m_aPaintListeners;
+
+public:
+ TransportAsXWindow(weld::Widget* pWeldWidget)
+ : TransportAsXWindow_Base(m_aHelperMtx)
+ , m_pWeldWidget(pWeldWidget)
+ , m_aWindowListeners(m_aHelperMtx)
+ , m_aKeyListeners(m_aHelperMtx)
+ , m_aFocusListeners(m_aHelperMtx)
+ , m_aMouseListeners(m_aHelperMtx)
+ , m_aMotionListeners(m_aHelperMtx)
+ , m_aPaintListeners(m_aHelperMtx)
+ {
+ }
+
+ weld::Widget* getWidget() const { return m_pWeldWidget; }
+
+ virtual void clear() { m_pWeldWidget = nullptr; }
+
+ // css::awt::XWindow
+ void SAL_CALL setPosSize(sal_Int32, sal_Int32, sal_Int32, sal_Int32, sal_Int16) override
+ {
+ throw css::uno::RuntimeException("not implemented");
+ }
+
+ css::awt::Rectangle SAL_CALL getPosSize() override
+ {
+ throw css::uno::RuntimeException("not implemented");
+ }
+
+ void SAL_CALL setVisible(sal_Bool bVisible) override { m_pWeldWidget->set_visible(bVisible); }
+
+ void SAL_CALL setEnable(sal_Bool bSensitive) override
+ {
+ m_pWeldWidget->set_sensitive(bSensitive);
+ }
+
+ void SAL_CALL setFocus() override { m_pWeldWidget->grab_focus(); }
+
+ void SAL_CALL
+ addWindowListener(const css::uno::Reference<css::awt::XWindowListener>& rListener) override
+ {
+ m_aWindowListeners.addInterface(rListener);
+ }
+
+ void SAL_CALL
+ removeWindowListener(const css::uno::Reference<css::awt::XWindowListener>& rListener) override
+ {
+ m_aWindowListeners.removeInterface(rListener);
+ }
+
+ void SAL_CALL
+ addFocusListener(const css::uno::Reference<css::awt::XFocusListener>& rListener) override
+ {
+ m_aFocusListeners.addInterface(rListener);
+ }
+
+ void SAL_CALL
+ removeFocusListener(const css::uno::Reference<css::awt::XFocusListener>& rListener) override
+ {
+ m_aFocusListeners.removeInterface(rListener);
+ }
+
+ void SAL_CALL
+ addKeyListener(const css::uno::Reference<css::awt::XKeyListener>& rListener) override
+ {
+ m_aKeyListeners.addInterface(rListener);
+ }
+
+ void SAL_CALL
+ removeKeyListener(const css::uno::Reference<css::awt::XKeyListener>& rListener) override
+ {
+ m_aKeyListeners.removeInterface(rListener);
+ }
+
+ void SAL_CALL
+ addMouseListener(const css::uno::Reference<css::awt::XMouseListener>& rListener) override
+ {
+ m_aMouseListeners.addInterface(rListener);
+ }
+
+ void SAL_CALL
+ removeMouseListener(const css::uno::Reference<css::awt::XMouseListener>& rListener) override
+ {
+ m_aMouseListeners.removeInterface(rListener);
+ }
+
+ void SAL_CALL addMouseMotionListener(
+ const css::uno::Reference<css::awt::XMouseMotionListener>& rListener) override
+ {
+ m_aMotionListeners.addInterface(rListener);
+ }
+
+ void SAL_CALL removeMouseMotionListener(
+ const css::uno::Reference<css::awt::XMouseMotionListener>& rListener) override
+ {
+ m_aMotionListeners.removeInterface(rListener);
+ }
+
+ void SAL_CALL
+ addPaintListener(const css::uno::Reference<css::awt::XPaintListener>& rListener) override
+ {
+ m_aPaintListeners.addInterface(rListener);
+ }
+
+ void SAL_CALL
+ removePaintListener(const css::uno::Reference<css::awt::XPaintListener>& rListener) override
+ {
+ m_aPaintListeners.removeInterface(rListener);
+ }
+};
}
#endif