diff options
author | Matúš Kukan <matus.kukan@collabora.com> | 2014-01-09 16:28:38 +0100 |
---|---|---|
committer | Matúš Kukan <matus.kukan@collabora.com> | 2014-01-10 10:58:03 +0100 |
commit | 08940a0d21db8be76342e426c378b9f5c66ff624 (patch) | |
tree | 609e803e8e53638f0a0bf01a245058ddf67a8fe8 | |
parent | fd1d7b8742da03c7c9253150c4511c49703bdcca (diff) |
fwk: Use constructor feature for JobDispatch.
Change-Id: I49a09c4dd0550c318e9f263e9d1a8d0a5e0e15b5
-rw-r--r-- | framework/inc/jobs/jobdispatch.hxx | 140 | ||||
-rw-r--r-- | framework/source/jobs/jobdispatch.cxx | 121 | ||||
-rw-r--r-- | framework/source/register/registerservices.cxx | 2 | ||||
-rw-r--r-- | framework/util/fwk.component | 3 |
4 files changed, 117 insertions, 149 deletions
diff --git a/framework/inc/jobs/jobdispatch.hxx b/framework/inc/jobs/jobdispatch.hxx deleted file mode 100644 index 164df05daae3..000000000000 --- a/framework/inc/jobs/jobdispatch.hxx +++ /dev/null @@ -1,140 +0,0 @@ -/* -*- 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_JOBS_JOBDISPATCH_HXX -#define INCLUDED_FRAMEWORK_INC_JOBS_JOBDISPATCH_HXX - -#include <jobs/configaccess.hxx> -#include <threadhelp/threadhelpbase.hxx> -#include <macros/xinterface.hxx> -#include <macros/xtypeprovider.hxx> -#include <macros/xserviceinfo.hxx> -#include <stdtypes.h> -#include <general.h> - -#include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/frame/XNotifyingDispatch.hpp> -#include <com/sun/star/frame/XDispatch.hpp> -#include <com/sun/star/frame/XStatusListener.hpp> -#include <com/sun/star/frame/XDispatchResultListener.hpp> -#include <com/sun/star/task/XJobListener.hpp> -#include <com/sun/star/frame/XTerminateListener.hpp> -#include <com/sun/star/frame/XDispatchProvider.hpp> -#include <com/sun/star/frame/XDesktop.hpp> -#include <com/sun/star/uno/XInterface.hpp> -#include <com/sun/star/beans/NamedValue.hpp> -#include <com/sun/star/frame/FeatureStateEvent.hpp> -#include <com/sun/star/frame/DispatchResultEvent.hpp> -#include <com/sun/star/lang/XInitialization.hpp> - -#include <unotools/configpaths.hxx> -#include <cppuhelper/implbase4.hxx> -#include <rtl/ustring.hxx> - - -namespace framework{ - - -//_______________________________________ -/** - @short implements a dispatch object for jobs - @descr Such dispatch object will be used by the generic dispatch mechanism if - an URL "vnd.sun.star.job:alias=<name>" occurs. - Then an instance of this class will be created and used. - This new instance will be called within his method - dispatch() or dispatchWithNotification() for executing the - real job. We do it, control the life cycle of this internal - wrapped job and inform any interested listener if it finish. - */ -class JobDispatch : private ThreadHelpBase - , public ::cppu::WeakImplHelper4< - css::lang::XServiceInfo - , css::lang::XInitialization - , css::frame::XDispatchProvider - , css::frame::XNotifyingDispatch > // => XDispatch -{ - //___________________________________ - // member - - private: - - /** reference to the uno service manager */ - css::uno::Reference< css::uno::XComponentContext > m_xContext; - - /** reference to the frame, inside which this dispatch is used */ - css::uno::Reference< css::frame::XFrame > m_xFrame; - - /** name of module (writer, impress etc.) the frame is for */ - OUString m_sModuleIdentifier; - - //___________________________________ - // native interface methods - - public: - - JobDispatch( const css::uno::Reference< css::uno::XComponentContext >& xContext ); - virtual ~JobDispatch( ); - - void impl_dispatchEvent ( const OUString& sEvent , - const css::uno::Sequence< css::beans::PropertyValue >& lArgs , - const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ); - void impl_dispatchService( const OUString& sService , - const css::uno::Sequence< css::beans::PropertyValue >& lArgs , - const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ); - void impl_dispatchAlias ( const OUString& sAlias , - const css::uno::Sequence< css::beans::PropertyValue >& lArgs , - const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ); - - //___________________________________ - // uno interface methods - - public: - - // XInterface, XTypeProvider, XServiceInfo - DECLARE_XSERVICEINFO - - // Xinitialization - virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& lArguments ) throw(css::uno::Exception , - css::uno::RuntimeException); - - // XDispatchProvider - virtual css::uno::Reference< css::frame::XDispatch > SAL_CALL queryDispatch ( const css::util::URL& aURL , - const OUString& sTargetFrameName , - sal_Int32 nSearchFlags ) throw(css::uno::RuntimeException); - virtual css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > SAL_CALL queryDispatches( const css::uno::Sequence< css::frame::DispatchDescriptor >& lDescriptor ) throw(css::uno::RuntimeException); - - // XNotifyingDispatch - virtual void SAL_CALL dispatchWithNotification( const css::util::URL& aURL , - const css::uno::Sequence< css::beans::PropertyValue >& lArgs , - const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ) throw(css::uno::RuntimeException); - - // XDispatch - virtual void SAL_CALL dispatch ( const css::util::URL& aURL , - const css::uno::Sequence< css::beans::PropertyValue >& lArgs ) throw(css::uno::RuntimeException); - virtual void SAL_CALL addStatusListener ( const css::uno::Reference< css::frame::XStatusListener >& xListener , - const css::util::URL& aURL ) throw(css::uno::RuntimeException); - virtual void SAL_CALL removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xListener , - const css::util::URL& aURL ) throw(css::uno::RuntimeException); -}; - -} // namespace framework - -#endif // INCLUDED_FRAMEWORK_INC_JOBS_JOBDISPATCH_HXX - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/jobs/jobdispatch.cxx b/framework/source/jobs/jobdispatch.cxx index 4b069d93407a..3d730cd728f4 100644 --- a/framework/source/jobs/jobdispatch.cxx +++ b/framework/source/jobs/jobdispatch.cxx @@ -17,24 +17,118 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include <jobs/jobdispatch.hxx> +#include <jobs/configaccess.hxx> #include <jobs/joburl.hxx> #include <jobs/job.hxx> +#include <macros/xinterface.hxx> +#include <macros/xtypeprovider.hxx> +#include <macros/xserviceinfo.hxx> #include <threadhelp/readguard.hxx> -#include <threadhelp/writeguard.hxx> #include <threadhelp/resetableguard.hxx> +#include <threadhelp/threadhelpbase.hxx> +#include <threadhelp/writeguard.hxx> #include <classes/converter.hxx> #include <general.h> #include <services.h> -#include <com/sun/star/beans/XPropertySet.hpp> +#include <com/sun/star/frame/DispatchResultEvent.hpp> #include <com/sun/star/frame/DispatchResultState.hpp> #include <com/sun/star/frame/ModuleManager.hpp> - +#include <com/sun/star/frame/XNotifyingDispatch.hpp> +#include <com/sun/star/frame/XDispatch.hpp> +#include <com/sun/star/frame/XStatusListener.hpp> +#include <com/sun/star/frame/XDispatchResultListener.hpp> +#include <com/sun/star/frame/XDispatchProvider.hpp> +#include <com/sun/star/lang/XInitialization.hpp> + +#include <cppuhelper/implbase4.hxx> +#include <rtl/ref.hxx> #include <rtl/ustrbuf.hxx> +#include <unotools/configpaths.hxx> #include <vcl/svapp.hxx> -namespace framework{ +using namespace framework; + +namespace { + +//_______________________________________ +/** + @short implements a dispatch object for jobs + @descr Such dispatch object will be used by the generic dispatch mechanism if + an URL "vnd.sun.star.job:alias=<name>" occurs. + Then an instance of this class will be created and used. + This new instance will be called within his method + dispatch() or dispatchWithNotification() for executing the + real job. We do it, control the life cycle of this internal + wrapped job and inform any interested listener if it finish. + */ +class JobDispatch : private ThreadHelpBase + , public ::cppu::WeakImplHelper4< + css::lang::XServiceInfo + , css::lang::XInitialization + , css::frame::XDispatchProvider + , css::frame::XNotifyingDispatch > // => XDispatch +{ + private: + + /** reference to the uno service manager */ + css::uno::Reference< css::uno::XComponentContext > m_xContext; + + /** reference to the frame, inside which this dispatch is used */ + css::uno::Reference< css::frame::XFrame > m_xFrame; + + /** name of module (writer, impress etc.) the frame is for */ + OUString m_sModuleIdentifier; + + //___________________________________ + // native interface methods + + public: + + JobDispatch( const css::uno::Reference< css::uno::XComponentContext >& xContext ); + virtual ~JobDispatch( ); + + void impl_dispatchEvent ( const OUString& sEvent , + const css::uno::Sequence< css::beans::PropertyValue >& lArgs , + const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ); + void impl_dispatchService( const OUString& sService , + const css::uno::Sequence< css::beans::PropertyValue >& lArgs , + const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ); + void impl_dispatchAlias ( const OUString& sAlias , + const css::uno::Sequence< css::beans::PropertyValue >& lArgs , + const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ); + + //___________________________________ + // uno interface methods + + public: + + // XInterface, XTypeProvider, XServiceInfo + DECLARE_XSERVICEINFO + + // Xinitialization + virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& lArguments ) throw(css::uno::Exception , + css::uno::RuntimeException); + + // XDispatchProvider + virtual css::uno::Reference< css::frame::XDispatch > SAL_CALL queryDispatch ( const css::util::URL& aURL , + const OUString& sTargetFrameName , + sal_Int32 nSearchFlags ) throw(css::uno::RuntimeException); + virtual css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > SAL_CALL queryDispatches( const css::uno::Sequence< css::frame::DispatchDescriptor >& lDescriptor ) throw(css::uno::RuntimeException); + + // XNotifyingDispatch + virtual void SAL_CALL dispatchWithNotification( const css::util::URL& aURL , + const css::uno::Sequence< css::beans::PropertyValue >& lArgs , + const css::uno::Reference< css::frame::XDispatchResultListener >& xListener ) throw(css::uno::RuntimeException); + + // XDispatch + virtual void SAL_CALL dispatch ( const css::util::URL& aURL , + const css::uno::Sequence< css::beans::PropertyValue >& lArgs ) throw(css::uno::RuntimeException); + virtual void SAL_CALL addStatusListener ( const css::uno::Reference< css::frame::XStatusListener >& xListener , + const css::util::URL& aURL ) throw(css::uno::RuntimeException); + virtual void SAL_CALL removeStatusListener( const css::uno::Reference< css::frame::XStatusListener >& xListener , + const css::util::URL& aURL ) throw(css::uno::RuntimeException); +}; DEFINE_XSERVICEINFO_MULTISERVICE_2( JobDispatch , ::cppu::OWeakObject , @@ -440,6 +534,21 @@ void SAL_CALL JobDispatch::removeStatusListener( /*IN*/ const css::uno::Referenc { } -} // namespace framework +} + +extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * SAL_CALL +com_sun_star_comp_framework_jobs_JobDispatch_get_implementation( + css::uno::XComponentContext * context, + uno_Sequence * arguments) +{ + assert(arguments != 0); + rtl::Reference<JobDispatch> x(new JobDispatch(context)); + css::uno::Sequence<css::uno::Any> aArgs( + reinterpret_cast<css::uno::Any *>(arguments->elements), + arguments->nElements); + x->initialize(aArgs); + x->acquire(); + return static_cast<cppu::OWeakObject *>(x.get()); +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/register/registerservices.cxx b/framework/source/register/registerservices.cxx index df031d49c518..42db82e11db9 100644 --- a/framework/source/register/registerservices.cxx +++ b/framework/source/register/registerservices.cxx @@ -38,7 +38,6 @@ #include <services/frame.hxx> #include <services/modulemanager.hxx> #include <jobs/jobexecutor.hxx> -#include <jobs/jobdispatch.hxx> #include <services/layoutmanager.hxx> #include <uifactory/uielementfactorymanager.hxx> #include <uielement/objectmenucontroller.hxx> @@ -68,7 +67,6 @@ COMPONENTGETFACTORY ( fwk, IFFACTORY( ::framework::Desktop ) else IFFACTORY( ::framework::Frame ) else IFFACTORY( ::framework::JobExecutor ) else - IFFACTORY( ::framework::JobDispatch ) else IFFACTORY( ::framework::LayoutManager ) else IFFACTORY( ::framework::UIElementFactoryManager ) else IFFACTORY( ::framework::ObjectMenuController ) else diff --git a/framework/util/fwk.component b/framework/util/fwk.component index c51fc5b09405..a10ed9ecf5df 100644 --- a/framework/util/fwk.component +++ b/framework/util/fwk.component @@ -136,7 +136,8 @@ <implementation name="com.sun.star.comp.framework.WindowStateConfiguration"> <service name="com.sun.star.ui.WindowStateConfiguration"/> </implementation> - <implementation name="com.sun.star.comp.framework.jobs.JobDispatch"> + <implementation name="com.sun.star.comp.framework.jobs.JobDispatch" + constructor="com_sun_star_comp_framework_jobs_JobDispatch_get_implementation"> <service name="com.sun.star.frame.ProtocolHandler"/> </implementation> <implementation name="com.sun.star.comp.framework.TabWindowService" |