1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: PresentationFactory.cxx,v $
13 * This file is part of OpenOffice.org.
15 * OpenOffice.org is free software: you can redistribute it and/or modify
16 * it under the terms of the GNU Lesser General Public License version 3
17 * only, as published by the Free Software Foundation.
19 * OpenOffice.org is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU Lesser General Public License version 3 for more details
23 * (a copy is included in the LICENSE file that accompanied this code).
25 * You should have received a copy of the GNU Lesser General Public License
26 * version 3 along with OpenOffice.org. If not, see
27 * <http://www.openoffice.org/license.html>
28 * for a copy of the LGPLv3 License.
30 ************************************************************************/
32 #include "precompiled_sd.hxx"
34 #include "framework/PresentationFactory.hxx"
36 #include "framework/FrameworkHelper.hxx"
37 #include "DrawController.hxx"
38 #include "ViewShellBase.hxx"
39 #include <com/sun/star/drawing/framework/XControllerManager.hpp>
40 #include <cppuhelper/compbase1.hxx>
41 #include "slideshow.hxx"
43 using namespace ::com::sun::star
;
44 using namespace ::com::sun::star::uno
;
45 using namespace ::com::sun::star::drawing::framework
;
47 using ::rtl::OUString
;
48 using ::sd::framework::FrameworkHelper
;
51 namespace sd
{ namespace framework
{
55 typedef ::cppu::WeakComponentImplHelper1
<lang::XInitialization
> PresentationFactoryProviderInterfaceBase
;
57 class PresentationFactoryProvider
58 : protected MutexOwner
,
59 public PresentationFactoryProviderInterfaceBase
62 PresentationFactoryProvider (const Reference
<XComponentContext
>& rxContext
);
63 virtual ~PresentationFactoryProvider (void);
65 virtual void SAL_CALL
disposing (void);
69 virtual void SAL_CALL
initialize(
70 const ::com::sun::star::uno::Sequence
<com::sun::star::uno::Any
>& aArguments
)
71 throw (::com::sun::star::uno::Exception
, ::com::sun::star::uno::RuntimeException
);
77 typedef ::cppu::WeakComponentImplHelper1
<XView
> PresentationViewInterfaceBase
;
79 /** The PresentationView is not an actual view, it is a marker whose
80 existence in a configuration indicates that a slideshow is running
81 (in another application window).
83 class PresentationView
84 : protected MutexOwner
,
85 public PresentationViewInterfaceBase
88 PresentationView (const Reference
<XResourceId
>& rxViewId
)
89 : PresentationViewInterfaceBase(maMutex
),mxResourceId(rxViewId
) {};
90 virtual ~PresentationView (void) {};
94 virtual Reference
<XResourceId
> SAL_CALL
getResourceId (void) throw (RuntimeException
)
95 { return mxResourceId
; };
97 virtual sal_Bool SAL_CALL
isAnchorOnly (void) throw (RuntimeException
)
102 Reference
<XResourceId
> mxResourceId
;
105 } // end of anonymous namespace.
110 //===== PresentationFactoryProvider service ===================================
112 Reference
<XInterface
> SAL_CALL
PresentationFactoryProvider_createInstance (
113 const Reference
<XComponentContext
>& rxContext
)
115 return Reference
<XInterface
>(static_cast<XWeak
*>(new PresentationFactoryProvider(rxContext
)));
121 ::rtl::OUString
PresentationFactoryProvider_getImplementationName (void) throw(RuntimeException
)
123 return ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
124 "com.sun.star.comp.Draw.framework.PresentationFactoryProvider"));
130 Sequence
<rtl::OUString
> SAL_CALL
PresentationFactoryProvider_getSupportedServiceNames (void)
131 throw (RuntimeException
)
133 static const ::rtl::OUString
sServiceName(RTL_CONSTASCII_USTRINGPARAM(
134 "com.sun.star.drawing.framework.PresentationFactoryProvider"));
135 return Sequence
<rtl::OUString
>(&sServiceName
, 1);
141 //===== PresentationFactory ===================================================
143 const ::rtl::OUString
PresentationFactory::msPresentationViewURL(
144 OUString::createFromAscii("private:resource/view/Presentation"));
147 PresentationFactory::PresentationFactory (
148 const Reference
<frame::XController
>& rxController
)
149 : PresentationFactoryInterfaceBase(MutexOwner::maMutex
),
150 mxConfigurationController(),
151 mxController(rxController
)
155 // Get the XController from the first argument.
156 Reference
<XControllerManager
> xControllerManager(rxController
, UNO_QUERY_THROW
);
157 mxConfigurationController
= xControllerManager
->getConfigurationController();
159 catch (RuntimeException
&)
169 PresentationFactory::~PresentationFactory (void)
176 void SAL_CALL
PresentationFactory::disposing (void)
183 //----- XViewFactory ----------------------------------------------------------
185 Reference
<XResource
> SAL_CALL
PresentationFactory::createResource (
186 const Reference
<XResourceId
>& rxViewId
)
187 throw (RuntimeException
)
192 if ( ! rxViewId
->hasAnchor() && rxViewId
->getResourceURL().equals(msPresentationViewURL
))
193 return new PresentationView(rxViewId
);
195 return Reference
<XResource
>();
201 void SAL_CALL
PresentationFactory::releaseResource (
202 const Reference
<XResource
>& rxView
)
203 throw (RuntimeException
)
208 Reference
<lang::XUnoTunnel
> xTunnel (mxController
, UNO_QUERY
);
211 ::sd::DrawController
* pController
= reinterpret_cast<sd::DrawController
*>(
212 xTunnel
->getSomething(sd::DrawController::getUnoTunnelId()));
213 if (pController
!= NULL
)
215 ViewShellBase
* pBase
= pController
->GetViewShellBase();
217 SlideShow::Stop( *pBase
);
225 //===== XConfigurationChangeListener ==========================================
227 void SAL_CALL
PresentationFactory::notifyConfigurationChange (
228 const ConfigurationChangeEvent
& rEvent
)
229 throw (RuntimeException
)
237 //===== lang::XEventListener ==================================================
239 void SAL_CALL
PresentationFactory::disposing (
240 const lang::EventObject
& rEventObject
)
241 throw (RuntimeException
)
250 //-----------------------------------------------------------------------------
252 void PresentationFactory::ThrowIfDisposed (void) const
253 throw (lang::DisposedException
)
255 if (rBHelper
.bDisposed
|| rBHelper
.bInDispose
)
257 throw lang::DisposedException (
258 ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(
259 "PresentationFactory object has already been disposed")),
260 const_cast<uno::XWeak
*>(static_cast<const uno::XWeak
*>(this)));
268 //===== PresentationFactoryProvider ===========================================
270 PresentationFactoryProvider::PresentationFactoryProvider (
271 const Reference
<XComponentContext
>& rxContext
)
272 : PresentationFactoryProviderInterfaceBase(maMutex
)
280 PresentationFactoryProvider::~PresentationFactoryProvider (void)
287 void PresentationFactoryProvider::disposing (void)
296 void SAL_CALL
PresentationFactoryProvider::initialize(
297 const Sequence
<Any
>& aArguments
)
298 throw (Exception
, RuntimeException
)
300 if (aArguments
.getLength() > 0)
304 // Get the XController from the first argument.
305 Reference
<frame::XController
> xController (aArguments
[0], UNO_QUERY_THROW
);
306 Reference
<XControllerManager
> xCM (xController
, UNO_QUERY_THROW
);
307 Reference
<XConfigurationController
> xCC (xCM
->getConfigurationController());
309 xCC
->addResourceFactory(
310 PresentationFactory::msPresentationViewURL
,
311 new PresentationFactory(xController
));
313 catch (RuntimeException
&)
322 } // end of anonymous namespace.
325 } } // end of namespace sd::framework