diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:06:44 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:06:44 +0000 |
commit | ed5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch) | |
tree | 7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /dbaccess/source/ui/inc/sbamultiplex.hxx | |
parent | Initial commit. (diff) | |
download | libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.tar.xz libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.zip |
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dbaccess/source/ui/inc/sbamultiplex.hxx')
-rw-r--r-- | dbaccess/source/ui/inc/sbamultiplex.hxx | 308 |
1 files changed, 308 insertions, 0 deletions
diff --git a/dbaccess/source/ui/inc/sbamultiplex.hxx b/dbaccess/source/ui/inc/sbamultiplex.hxx new file mode 100644 index 000000000..d48e3299e --- /dev/null +++ b/dbaccess/source/ui/inc/sbamultiplex.hxx @@ -0,0 +1,308 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#pragma once + +#include <com/sun/star/beans/XVetoableChangeListener.hpp> +#include <com/sun/star/form/XDatabaseParameterListener.hpp> +#include <com/sun/star/form/XLoadListener.hpp> +#include <com/sun/star/beans/XPropertiesChangeListener.hpp> +#include <com/sun/star/beans/XPropertyChangeListener.hpp> +#include <com/sun/star/form/XSubmitListener.hpp> +#include <com/sun/star/form/XResetListener.hpp> +#include <com/sun/star/sdb/XSQLErrorListener.hpp> +#include <com/sun/star/sdb/XRowSetApproveListener.hpp> +#include <com/sun/star/sdbc/XRowSetListener.hpp> +#include <com/sun/star/frame/XStatusListener.hpp> +#include <comphelper/uno3.hxx> +#include <comphelper/interfacecontainer3.hxx> +#include <comphelper/multiinterfacecontainer3.hxx> +#include <cppuhelper/weak.hxx> + +namespace dbaui +{ + // TODO : replace this class if MM provides a WeakSubObject in cppu + class OSbaWeakSubObject : public ::cppu::OWeakObject + { + protected: + ::cppu::OWeakObject& m_rParent; + + public: + OSbaWeakSubObject(::cppu::OWeakObject& rParent) : m_rParent(rParent) { } + + virtual void SAL_CALL acquire() noexcept override { m_rParent.acquire(); } + virtual void SAL_CALL release() noexcept override { m_rParent.release(); } + }; + + // some listener multiplexers + // css::frame::XStatusListener + class SbaXStatusMultiplexer + :public OSbaWeakSubObject + ,public css::frame::XStatusListener + ,public ::comphelper::OInterfaceContainerHelper3<css::frame::XStatusListener> + { + public: + SbaXStatusMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXStatusMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + + virtual void SAL_CALL statusChanged(const css::frame::FeatureStateEvent& e) override; + + private: + css::frame::FeatureStateEvent m_aLastKnownStatus; + public: + const css::frame::FeatureStateEvent& getLastEvent( ) const { return m_aLastKnownStatus; } + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; + + // css::form::XLoadListener + class SbaXLoadMultiplexer + :public OSbaWeakSubObject + ,public css::form::XLoadListener + ,public ::comphelper::OInterfaceContainerHelper3<css::form::XLoadListener> + { + public: + SbaXLoadMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXLoadMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + + virtual void SAL_CALL loaded(const css::lang::EventObject& e) override; + virtual void SAL_CALL unloaded(const css::lang::EventObject& e) override; + virtual void SAL_CALL unloading(const css::lang::EventObject& e) override; + virtual void SAL_CALL reloading(const css::lang::EventObject& e) override; + virtual void SAL_CALL reloaded(const css::lang::EventObject& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; + + // css::form::XDatabaseParameterListener + class SbaXParameterMultiplexer + :public OSbaWeakSubObject + ,public css::form::XDatabaseParameterListener + ,public ::comphelper::OInterfaceContainerHelper3<css::form::XDatabaseParameterListener> + { + public: + SbaXParameterMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXParameterMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + virtual sal_Bool SAL_CALL approveParameter(const css::form::DatabaseParameterEvent& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; + + // css::form::XSubmitListener + class SbaXSubmitMultiplexer + :public OSbaWeakSubObject + ,public css::form::XSubmitListener + ,public ::comphelper::OInterfaceContainerHelper3<css::form::XSubmitListener> + { + public: + SbaXSubmitMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXSubmitMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + virtual sal_Bool SAL_CALL approveSubmit(const css::lang::EventObject& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; + + // css::form::XResetListener + class SbaXResetMultiplexer + :public OSbaWeakSubObject + ,public css::form::XResetListener + ,public ::comphelper::OInterfaceContainerHelper3<css::form::XResetListener> + { + public: + SbaXResetMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXResetMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + virtual sal_Bool SAL_CALL approveReset(const css::lang::EventObject& e) override; + virtual void SAL_CALL resetted(const css::lang::EventObject& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; + + // css::sdbc::XRowSetListener + class SbaXRowSetMultiplexer + :public OSbaWeakSubObject + ,public css::sdbc::XRowSetListener + ,public ::comphelper::OInterfaceContainerHelper3<css::sdbc::XRowSetListener> + { + public: + SbaXRowSetMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXRowSetMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + virtual void SAL_CALL cursorMoved(const css::lang::EventObject& e) override; + virtual void SAL_CALL rowChanged(const css::lang::EventObject& e) override; + virtual void SAL_CALL rowSetChanged(const css::lang::EventObject& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; + + // css::sdb::XRowSetApproveListener + class SbaXRowSetApproveMultiplexer + :public OSbaWeakSubObject + ,public css::sdb::XRowSetApproveListener + ,public ::comphelper::OInterfaceContainerHelper3<css::sdb::XRowSetApproveListener> + { + public: + SbaXRowSetApproveMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXRowSetApproveMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + virtual sal_Bool SAL_CALL approveCursorMove(const css::lang::EventObject& e) override; + virtual sal_Bool SAL_CALL approveRowChange(const css::sdb::RowChangeEvent& e) override; + virtual sal_Bool SAL_CALL approveRowSetChange(const css::lang::EventObject& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; + + // css::sdb::XSQLErrorListener + class SbaXSQLErrorMultiplexer + :public OSbaWeakSubObject + ,public css::sdb::XSQLErrorListener + ,public ::comphelper::OInterfaceContainerHelper3<css::sdb::XSQLErrorListener> + { + public: + SbaXSQLErrorMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXSQLErrorMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + virtual void SAL_CALL errorOccured(const css::sdb::SQLErrorEvent& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; + + // css::beans::XPropertyChangeListener + class SbaXPropertyChangeMultiplexer final + :public OSbaWeakSubObject + ,public css::beans::XPropertyChangeListener + { + typedef ::comphelper::OMultiTypeInterfaceContainerHelperVar3<css::beans::XPropertyChangeListener, OUString> ListenerContainerMap; + ListenerContainerMap m_aListeners; + + public: + SbaXPropertyChangeMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex ); + DECLARE_UNO3_DEFAULTS(SbaXPropertyChangeMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + + virtual void SAL_CALL propertyChange(const css::beans::PropertyChangeEvent& e) override; + + void addInterface(const OUString& rName, const css::uno::Reference< css::beans::XPropertyChangeListener >& rListener); + void removeInterface(const OUString& rName, const css::uno::Reference< css::beans::XPropertyChangeListener >& rListener); + + void disposeAndClear(); + + sal_Int32 getOverallLen() const; + + ::comphelper::OInterfaceContainerHelper3<css::beans::XPropertyChangeListener>* getContainer(const OUString& rName) + { return m_aListeners.getContainer(rName); } + + private: + void Notify(::comphelper::OInterfaceContainerHelper3<css::beans::XPropertyChangeListener>& rListeners, const css::beans::PropertyChangeEvent& e); + }; + + // css::beans::XVetoableChangeListener + class SbaXVetoableChangeMultiplexer final + :public OSbaWeakSubObject + ,public css::beans::XVetoableChangeListener + { + typedef ::comphelper::OMultiTypeInterfaceContainerHelperVar3<css::beans::XVetoableChangeListener, OUString > ListenerContainerMap; + ListenerContainerMap m_aListeners; + + public: + SbaXVetoableChangeMultiplexer( ::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex ); + DECLARE_UNO3_DEFAULTS(SbaXVetoableChangeMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + + virtual void SAL_CALL vetoableChange(const css::beans::PropertyChangeEvent& e) override; + + void addInterface(const OUString& rName, const css::uno::Reference< css::beans::XVetoableChangeListener >& rListener); + void removeInterface(const OUString& rName, const css::uno::Reference< css::beans::XVetoableChangeListener >& rListener); + + void disposeAndClear(); + + sal_Int32 getOverallLen() const; + + ::comphelper::OInterfaceContainerHelper3<css::beans::XVetoableChangeListener>* getContainer(const OUString& rName) + { return m_aListeners.getContainer(rName); } + + private: + void Notify(::comphelper::OInterfaceContainerHelper3<css::beans::XVetoableChangeListener>& rListeners, const css::beans::PropertyChangeEvent& e); + }; + + // css::beans::XPropertiesChangeListener + class SbaXPropertiesChangeMultiplexer + :public OSbaWeakSubObject + ,public css::beans::XPropertiesChangeListener + ,public ::comphelper::OInterfaceContainerHelper3<css::beans::XPropertiesChangeListener> + { + public: + SbaXPropertiesChangeMultiplexer(::cppu::OWeakObject& rSource, ::osl::Mutex& rMutex); + DECLARE_UNO3_DEFAULTS(SbaXPropertiesChangeMultiplexer, OSbaWeakSubObject) + virtual css::uno::Any SAL_CALL queryInterface(const css::uno::Type& _rType) override; + + /* css::lang::XEventListener */ + virtual void SAL_CALL disposing(const css::lang::EventObject& Source) override; + virtual void SAL_CALL propertiesChange(const css::uno::Sequence< css::beans::PropertyChangeEvent >& e) override; + /* resolve ambiguity : both OWeakObject and OInterfaceContainerHelper2 have these memory operators */ + using OSbaWeakSubObject::operator new; + using OSbaWeakSubObject::operator delete; + }; + // the SbaXPropertiesChangeMultiplexer doesn't care about the property names a listener logs on for, it simply + // forwards _all_ changes to _all_ listeners +} + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |