diff options
author | Juergen Funk <juergen.funk_ml@cib.de> | 2016-05-13 10:42:17 +0200 |
---|---|---|
committer | Thorsten Behrens <Thorsten.Behrens@CIB.de> | 2016-06-08 02:16:54 +0000 |
commit | f9bb13419549d621ffd55d9d81e0732a89560e2e (patch) | |
tree | f3f8a64fd254c5e466b466c12d0e627472ce7868 /include/framework | |
parent | 439b47e84bb12ec1c5cc2332b4c6a9ea59f462ad (diff) |
tdf#99815 use XNotifyingDispatch in sfx2
- move DispatchHelper somewhere public
- use it from generic dispatcher call sites in sfx2
- return result of dispatcher calls (conveyed via
XDispatchResultListener) to calling code, instead of faking it
Change-Id: Ie8041133e99dd99e45819f98798829b96532b9e6
Reviewed-on: https://gerrit.libreoffice.org/24953
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Diffstat (limited to 'include/framework')
-rw-r--r-- | include/framework/dispatchhelper.hxx | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/include/framework/dispatchhelper.hxx b/include/framework/dispatchhelper.hxx new file mode 100644 index 000000000000..2b4c79bf7c57 --- /dev/null +++ b/include/framework/dispatchhelper.hxx @@ -0,0 +1,123 @@ +/* -*- 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 . + */ + +#ifndef INCLUDED_FRAMEWORK_INC_SERVICES_DISPATCHHELPER_HXX +#define INCLUDED_FRAMEWORK_INC_SERVICES_DISPATCHHELPER_HXX + +#include <com/sun/star/uno/Any.hxx> +#include <com/sun/star/lang/XMultiServiceFactory.hpp> +#include <com/sun/star/uno/XComponentContext.hpp> +#include <com/sun/star/frame/XDispatchHelper.hpp> +#include <com/sun/star/frame/XDispatchResultListener.hpp> +#include <com/sun/star/lang/XSingleServiceFactory.hpp> +#include <com/sun/star/lang/XServiceInfo.hpp> + + +#include <cppuhelper/implbase.hxx> +#include <osl/conditn.hxx> +#include <framework/fwedllapi.h> + +namespace framework{ + +/** + @short implements an easy way for dispatches + @descr Dispatches are splitted into different parts: + - parsing of the URL + - searching for a dispatch object + - dispatching of the URL + All these steps are done inside one method call here. +*/ +class FWE_DLLPUBLIC DispatchHelper : public ::cppu::WeakImplHelper< css::lang::XServiceInfo,css::frame::XDispatchHelper,css::frame::XDispatchResultListener > +{ + + // member + + private: + + osl::Mutex m_mutex; + + /** global uno service manager. + Can be used to create own needed services. */ + css::uno::Reference< css::uno::XComponentContext > m_xContext; + + /** used to wait for asynchronous listener callbacks. */ + ::osl::Condition m_aBlock; + + css::uno::Any m_aResult; + + css::uno::Reference< css::uno::XInterface > m_xBroadcaster; + + // interface + + public: + + // ctor/dtor + + DispatchHelper( const css::uno::Reference< css::uno::XComponentContext >& xContext ); + virtual ~DispatchHelper( ); + + // XServiceInfo + virtual OUString SAL_CALL getImplementationName ( ) throw( css::uno::RuntimeException, std::exception ) override; + virtual sal_Bool SAL_CALL supportsService ( const OUString& sServiceName ) throw( css::uno::RuntimeException, std::exception ) override; + virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames ( ) throw( css::uno::RuntimeException, std::exception ) override; + + static css::uno::Sequence< OUString > SAL_CALL impl_getStaticSupportedServiceNames( ); + static OUString SAL_CALL impl_getStaticImplementationName ( ); + // Helper for initialization of service by using own reference! + void SAL_CALL impl_initService ( ); + + // Helper for registry + static css::uno::Reference< css::uno::XInterface > SAL_CALL impl_createInstance( const css::uno::Reference< css::lang::XMultiServiceFactory >& xServiceManager ) throw( css::uno::Exception ); + static css::uno::Reference< css::lang::XSingleServiceFactory > SAL_CALL impl_createFactory ( const css::uno::Reference< css::lang::XMultiServiceFactory >& xServiceManager ); + + + // XDispatchHelper + virtual css::uno::Any SAL_CALL executeDispatch( + const css::uno::Reference< css::frame::XDispatchProvider >& xDispatchProvider , + const OUString& sURL , + const OUString& sTargetFrameName , + sal_Int32 nSearchFlags , + const css::uno::Sequence< css::beans::PropertyValue >& lArguments ) + throw(css::uno::RuntimeException, std::exception) override; + + // not a public XDispatchHelper-method, need in sfx2/source/control/statcach.cxx for extentions + css::uno::Any SAL_CALL executeDispatch( + const css::uno::Reference< css::frame::XDispatch >& xDispatch , + const css::util::URL& aURL , + bool SyncronFlag , + const css::uno::Sequence< css::beans::PropertyValue >& lArguments ) + throw(css::uno::RuntimeException); + + + // XDispatchResultListener + virtual void SAL_CALL dispatchFinished( + const css::frame::DispatchResultEvent& aResult ) + throw(css::uno::RuntimeException, std::exception) override; + + // XEventListener + virtual void SAL_CALL disposing( + const css::lang::EventObject& aEvent ) + throw(css::uno::RuntimeException, std::exception) override; +}; + +} + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |