LibreOffice Module sd (master) 1
unomodule.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20#include <com/sun/star/frame/DispatchResultState.hpp>
22
23#include <sddll.hxx>
24#include <sdmod.hxx>
25#include "unomodule.hxx"
26#include <sfx2/objface.hxx>
27#include <sfx2/bindings.hxx>
28#include <sfx2/request.hxx>
29#include <vcl/svapp.hxx>
30
31using namespace ::com::sun::star;
32
33 // XNotifyingDispatch
34void SAL_CALL SdUnoModule::dispatchWithNotification( const util::URL& aURL, const uno::Sequence< beans::PropertyValue >& aArgs, const uno::Reference< frame::XDispatchResultListener >& xListener )
35{
36 // there is no guarantee, that we are holded alive during this method!
37 // May the outside dispatch container will be updated by a CONTEXT_CHANGED
38 // asynchronous ...
39 uno::Reference< uno::XInterface > xThis(static_cast< frame::XNotifyingDispatch* >(this));
40
41 SolarMutexGuard aGuard;
43 const SfxSlot* pSlot = SD_MOD()->GetInterface()->GetSlot( aURL.Complete );
44
45 sal_Int16 aState = frame::DispatchResultState::DONTKNOW;
46 if ( !pSlot )
47 aState = frame::DispatchResultState::FAILURE;
48 else
49 {
50 SfxRequest aReq( pSlot, aArgs, SfxCallMode::SYNCHRON, SD_MOD()->GetPool() );
51 const SfxPoolItem* pResult = SD_MOD()->ExecuteSlot( aReq );
52 if ( pResult )
53 aState = frame::DispatchResultState::SUCCESS;
54 else
55 aState = frame::DispatchResultState::FAILURE;
56 }
57
58 if ( xListener.is() )
59 {
60 xListener->dispatchFinished(
61 frame::DispatchResultEvent(
62 xThis, aState, uno::Any()));
63 }
64}
65 // XDispatch
66void SAL_CALL SdUnoModule::dispatch( const util::URL& aURL, const uno::Sequence< beans::PropertyValue >& aArgs )
67{
68 dispatchWithNotification(aURL, aArgs, uno::Reference< frame::XDispatchResultListener >());
69}
70
71void SAL_CALL SdUnoModule::addStatusListener(const uno::Reference< frame::XStatusListener > &, const util::URL&)
72{
73}
74
75void SAL_CALL SdUnoModule::removeStatusListener(const uno::Reference< frame::XStatusListener > &, const util::URL&)
76{
77}
78
79uno::Sequence< uno::Reference< frame::XDispatch > > SAL_CALL SdUnoModule::queryDispatches( const uno::Sequence< frame::DispatchDescriptor >& seqDescripts )
80{
81 sal_Int32 nCount = seqDescripts.getLength();
82 uno::Sequence< uno::Reference< frame::XDispatch > > lDispatcher( nCount );
83
84 std::transform(seqDescripts.begin(), seqDescripts.end(), lDispatcher.getArray(),
85 [this](const frame::DispatchDescriptor& rDescr) -> uno::Reference<frame::XDispatch> {
86 return queryDispatch(rDescr.FeatureURL, rDescr.FrameName, rDescr.SearchFlags); });
87
88 return lDispatcher;
89}
90
91// XDispatchProvider
92uno::Reference< frame::XDispatch > SAL_CALL SdUnoModule::queryDispatch( const util::URL& aURL, const OUString&, sal_Int32 )
93{
94 SolarMutexGuard aGuard;
96 const SfxSlot* pSlot = SD_MOD()->GetInterface()->GetSlot( aURL.Complete );
97
98 uno::Reference< frame::XDispatch > xSlot;
99 if ( pSlot )
100 xSlot = this;
101
102 return xSlot;
103}
104
105// XServiceInfo
107{
108 return "com.sun.star.comp.Draw.DrawingModule";
109}
110
111sal_Bool SAL_CALL SdUnoModule::supportsService( const OUString& sServiceName )
112{
114}
115
116uno::Sequence< OUString > SAL_CALL SdUnoModule::getSupportedServiceNames( )
117{
118 return { "com.sun.star.drawing.ModuleDispatcher" };
119}
120
121
122extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface*
124 css::uno::Sequence<css::uno::Any> const &)
125{
126 SolarMutexGuard aGuard;
127
128 return cppu::acquire(new SdUnoModule);
129}
130
131
132/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
constexpr OUStringLiteral sServiceName
static void Init()
Definition: sddll.cxx:218
virtual css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > SAL_CALL queryDispatches(const css::uno::Sequence< css::frame::DispatchDescriptor > &seqDescriptor) override
Definition: unomodule.cxx:79
virtual css::uno::Reference< css::frame::XDispatch > SAL_CALL queryDispatch(const css::util::URL &aURL, const OUString &sTargetFrameName, sal_Int32 eSearchFlags) override
Definition: unomodule.cxx:92
virtual void SAL_CALL dispatch(const css::util::URL &aURL, const css::uno::Sequence< css::beans::PropertyValue > &aArgs) override
Definition: unomodule.cxx:66
virtual void SAL_CALL removeStatusListener(const css::uno::Reference< css::frame::XStatusListener > &xControl, const css::util::URL &aURL) override
Definition: unomodule.cxx:75
virtual sal_Bool SAL_CALL supportsService(const OUString &ServiceName) override
Definition: unomodule.cxx:111
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
Definition: unomodule.cxx:116
virtual OUString SAL_CALL getImplementationName() override
Definition: unomodule.cxx:106
virtual void SAL_CALL dispatchWithNotification(const css::util::URL &URL, const css::uno::Sequence< css::beans::PropertyValue > &Arguments, const css::uno::Reference< css::frame::XDispatchResultListener > &Listener) override
Definition: unomodule.cxx:34
virtual void SAL_CALL addStatusListener(const css::uno::Reference< css::frame::XStatusListener > &xControl, const css::util::URL &aURL) override
Definition: unomodule.cxx:71
int nCount
URL aURL
bool CPPUHELPER_DLLPUBLIC supportsService(css::lang::XServiceInfo *implementation, rtl::OUString const &name)
#define SD_MOD()
Definition: sdmod.hxx:184
unsigned char sal_Bool
SAL_DLLPUBLIC_EXPORT css::uno::XInterface * com_sun_star_comp_Draw_DrawingModule_get_implementation(css::uno::XComponentContext *, css::uno::Sequence< css::uno::Any > const &)
Definition: unomodule.cxx:123