339 lines
13 KiB
C++
Executable file
339 lines
13 KiB
C++
Executable file
/*************************************************************************
|
|
*
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* Copyright 2000, 2010 Oracle and/or its affiliates.
|
|
*
|
|
* OpenOffice.org - a multi-platform office productivity suite
|
|
*
|
|
* This file is part of OpenOffice.org.
|
|
*
|
|
* OpenOffice.org is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License version 3
|
|
* only, as published by the Free Software Foundation.
|
|
*
|
|
* OpenOffice.org is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License version 3 for more details
|
|
* (a copy is included in the LICENSE file that accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* version 3 along with OpenOffice.org. If not, see
|
|
* <http://www.openoffice.org/license.html>
|
|
* for a copy of the LGPLv3 License.
|
|
*
|
|
************************************************************************/
|
|
|
|
#ifndef SD_DRAW_CONTROLLER_HXX
|
|
#define SD_DRAW_CONTROLLER_HXX
|
|
|
|
#include "ViewShell.hxx"
|
|
|
|
#include <osl/mutex.hxx>
|
|
#include <cppuhelper/propshlp.hxx>
|
|
#include <sfx2/sfxbasecontroller.hxx>
|
|
#include <com/sun/star/view/XSelectionSupplier.hpp>
|
|
#include <com/sun/star/view/XFormLayerAccess.hpp>
|
|
#include <com/sun/star/drawing/XDrawSubController.hpp>
|
|
#include <com/sun/star/drawing/XDrawView.hpp>
|
|
#include <com/sun/star/drawing/framework/XConfigurationController.hpp>
|
|
#include <com/sun/star/drawing/framework/XControllerManager.hpp>
|
|
#include <com/sun/star/drawing/framework/ModuleController.hpp>
|
|
#include <com/sun/star/lang/XServiceInfo.hpp>
|
|
#include <com/sun/star/lang/DisposedException.hpp>
|
|
#include <comphelper/uno3.hxx>
|
|
#include <cppuhelper/implbase7.hxx>
|
|
#include <tools/weakbase.hxx>
|
|
#include <memory>
|
|
#include <vector>
|
|
#include <boost/scoped_ptr.hpp>
|
|
|
|
class SfxViewShell;
|
|
class SdXImpressDocument;
|
|
|
|
namespace css = ::com::sun::star;
|
|
|
|
namespace sd {
|
|
|
|
typedef ::cppu::ImplInheritanceHelper7 <
|
|
SfxBaseController,
|
|
::com::sun::star::view::XSelectionSupplier,
|
|
::com::sun::star::lang::XServiceInfo,
|
|
::com::sun::star::drawing::XDrawView,
|
|
::com::sun::star::view::XSelectionChangeListener,
|
|
::com::sun::star::view::XFormLayerAccess,
|
|
::com::sun::star::drawing::framework::XControllerManager,
|
|
::com::sun::star::lang::XUnoTunnel
|
|
> DrawControllerInterfaceBase;
|
|
|
|
class BroadcastHelperOwner
|
|
{
|
|
public:
|
|
BroadcastHelperOwner (::osl::Mutex& rMutex) : maBroadcastHelper(rMutex) {};
|
|
::cppu::OBroadcastHelper maBroadcastHelper;
|
|
};
|
|
|
|
class DrawSubController;
|
|
class ViewShellBase;
|
|
class ViewShell;
|
|
class View;
|
|
|
|
|
|
/** The DrawController is the UNO controller for Impress and Draw. It
|
|
relies objects that implement the DrawSubController interface for view
|
|
specific behaviour. The life time of the DrawController is roughly that
|
|
of ViewShellBase but note that the DrawController can (in the case of a
|
|
reload) outlive the ViewShellBase.
|
|
|
|
The implementation of the XControllerManager interface is not yet in its
|
|
final form.
|
|
*/
|
|
class DrawController
|
|
: public DrawControllerInterfaceBase,
|
|
private BroadcastHelperOwner,
|
|
public ::cppu::OPropertySetHelper
|
|
{
|
|
public:
|
|
enum PropertyHandle {
|
|
PROPERTY_WORKAREA = 0,
|
|
PROPERTY_SUB_CONTROLLER = 1,
|
|
PROPERTY_CURRENTPAGE = 2,
|
|
PROPERTY_MASTERPAGEMODE = 3,
|
|
PROPERTY_LAYERMODE = 4,
|
|
PROPERTY_ACTIVE_LAYER = 5,
|
|
PROPERTY_ZOOMTYPE = 6,
|
|
PROPERTY_ZOOMVALUE = 7,
|
|
PROPERTY_VIEWOFFSET = 8,
|
|
PROPERTY_DRAWVIEWMODE = 9
|
|
};
|
|
|
|
/** Create a new DrawController object for the given ViewShellBase.
|
|
*/
|
|
DrawController (ViewShellBase& rBase) throw();
|
|
|
|
virtual ~DrawController (void) throw();
|
|
|
|
/** Replace the currently used sub controller with the given one. This
|
|
new sub controller is used from now on for the view (that is the
|
|
main view shell to be precise) specific tasks. Call this method
|
|
with a suitable sub controller whenever the view shell in the center
|
|
pane is exchanged.
|
|
@param pSubController
|
|
The ViewShell specific sub controller or NULL when (temporarily
|
|
while switching to another one) there is no ViewShell displayed
|
|
in the center pane.
|
|
*/
|
|
void SetSubController (
|
|
const css::uno::Reference<css::drawing::XDrawSubController>& rxSubController);
|
|
|
|
/** Call this method when the VisArea has changed.
|
|
*/
|
|
void FireVisAreaChanged (const Rectangle& rVisArea) throw();
|
|
|
|
/** Call this method when the selection has changed.
|
|
*/
|
|
void FireSelectionChangeListener (void) throw();
|
|
|
|
/** Call this method when the edit mode has changed.
|
|
*/
|
|
void FireChangeEditMode (bool bMasterPageMode) throw();
|
|
|
|
/** Call this method when the layer mode has changed.
|
|
*/
|
|
void FireChangeLayerMode (bool bLayerMode) throw();
|
|
|
|
/** Call this method when there is a new current page.
|
|
*/
|
|
void FireSwitchCurrentPage (SdPage* pCurrentPage) throw();
|
|
|
|
/** Return a pointer to the ViewShellBase object that the DrawController
|
|
is connected to.
|
|
@return
|
|
The returned pointer is <NULL/> after a call to
|
|
ReleaseViewShellBase().
|
|
*/
|
|
ViewShellBase* GetViewShellBase (void);
|
|
|
|
/** This method is typically called from the destructor of ViewShellBase
|
|
to tell the DrawController that it and its members must not access
|
|
the ViewShellBase anymore.
|
|
After this call the DrawController is semi-disposed.
|
|
*/
|
|
void ReleaseViewShellBase (void);
|
|
|
|
static const ::com::sun::star::uno::Sequence<sal_Int8>& getUnoTunnelId (void);
|
|
|
|
DECLARE_XINTERFACE()
|
|
DECLARE_XTYPEPROVIDER()
|
|
|
|
// XComponent
|
|
virtual void SAL_CALL dispose() throw( ::com::sun::star::uno::RuntimeException );
|
|
virtual void SAL_CALL addEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& xListener ) throw (::com::sun::star::uno::RuntimeException);
|
|
virtual void SAL_CALL removeEventListener( const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener >& aListener ) throw (::com::sun::star::uno::RuntimeException);
|
|
|
|
// XController
|
|
virtual ::sal_Bool SAL_CALL suspend( ::sal_Bool Suspend ) throw (::com::sun::star::uno::RuntimeException);
|
|
|
|
// XServiceInfo
|
|
virtual ::rtl::OUString SAL_CALL getImplementationName() throw(::com::sun::star::uno::RuntimeException);
|
|
virtual sal_Bool SAL_CALL supportsService( const ::rtl::OUString& ServiceName ) throw(::com::sun::star::uno::RuntimeException);
|
|
virtual ::com::sun::star::uno::Sequence< ::rtl::OUString > SAL_CALL getSupportedServiceNames() throw(::com::sun::star::uno::RuntimeException);
|
|
|
|
// XSelectionSupplier
|
|
virtual sal_Bool SAL_CALL select( const ::com::sun::star::uno::Any& aSelection ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException);
|
|
virtual ::com::sun::star::uno::Any SAL_CALL getSelection( ) throw(::com::sun::star::uno::RuntimeException);
|
|
virtual void SAL_CALL addSelectionChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::view::XSelectionChangeListener >& xListener ) throw(::com::sun::star::uno::RuntimeException);
|
|
virtual void SAL_CALL removeSelectionChangeListener( const ::com::sun::star::uno::Reference< ::com::sun::star::view::XSelectionChangeListener >& xListener ) throw(::com::sun::star::uno::RuntimeException);
|
|
|
|
// XPropertySet
|
|
virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo( ) throw(::com::sun::star::uno::RuntimeException);
|
|
|
|
// XFormLayerAccess
|
|
virtual ::com::sun::star::uno::Reference< ::com::sun::star::form::runtime::XFormController > SAL_CALL getFormController( const ::com::sun::star::uno::Reference< ::com::sun::star::form::XForm >& Form ) throw (::com::sun::star::uno::RuntimeException);
|
|
virtual ::sal_Bool SAL_CALL isFormDesignMode( ) throw (::com::sun::star::uno::RuntimeException);
|
|
virtual void SAL_CALL setFormDesignMode( ::sal_Bool DesignMode ) throw (::com::sun::star::uno::RuntimeException);
|
|
|
|
// XControlAccess
|
|
virtual ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControl > SAL_CALL getControl( const ::com::sun::star::uno::Reference< ::com::sun::star::awt::XControlModel >& xModel ) throw (::com::sun::star::container::NoSuchElementException, ::com::sun::star::uno::RuntimeException);
|
|
|
|
// XDrawView
|
|
virtual void SAL_CALL
|
|
setCurrentPage (
|
|
const ::com::sun::star::uno::Reference<
|
|
::com::sun::star::drawing::XDrawPage >& xPage)
|
|
throw(::com::sun::star::uno::RuntimeException);
|
|
|
|
virtual ::com::sun::star::uno::Reference<
|
|
::com::sun::star::drawing::XDrawPage > SAL_CALL
|
|
getCurrentPage (void)
|
|
throw(::com::sun::star::uno::RuntimeException);
|
|
|
|
|
|
// lang::XEventListener
|
|
virtual void SAL_CALL
|
|
disposing (const ::com::sun::star::lang::EventObject& rEventObject)
|
|
throw (::com::sun::star::uno::RuntimeException);
|
|
|
|
|
|
// view::XSelectionChangeListener
|
|
virtual void SAL_CALL
|
|
selectionChanged (const ::com::sun::star::lang::EventObject& rEvent)
|
|
throw (::com::sun::star::uno::RuntimeException);
|
|
|
|
|
|
// XControllerManager
|
|
|
|
virtual css::uno::Reference<css::drawing::framework::XConfigurationController> SAL_CALL
|
|
getConfigurationController (void)
|
|
throw (::com::sun::star::uno::RuntimeException);
|
|
|
|
virtual css::uno::Reference<css::drawing::framework::XModuleController> SAL_CALL
|
|
getModuleController (void)
|
|
throw (::com::sun::star::uno::RuntimeException);
|
|
|
|
|
|
// XUnoTunnel
|
|
|
|
virtual sal_Int64 SAL_CALL getSomething (const com::sun::star::uno::Sequence<sal_Int8>& rId)
|
|
throw (com::sun::star::uno::RuntimeException);
|
|
|
|
protected:
|
|
/** This method must return the name to index table. This table
|
|
contains all property names and types of this object.
|
|
*/
|
|
virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper();
|
|
|
|
virtual void FillPropertyTable (
|
|
::std::vector< ::com::sun::star::beans::Property>& rProperties);
|
|
|
|
/**
|
|
* The same as getFastProperyValue, but return the value through
|
|
* rValue and nHandle is always valid.
|
|
*/
|
|
virtual void SAL_CALL getFastPropertyValue(
|
|
::com::sun::star::uno::Any& rValue,
|
|
sal_Int32 nHandle ) const;
|
|
|
|
/** Convert the value rValue and return the result in rConvertedValue and the
|
|
old value in rOldValue.
|
|
After this call the vetoable listeners are notified.
|
|
|
|
@param rConvertedValue
|
|
The converted value. Only set if return is true.
|
|
@param rOldValue
|
|
The old value. Only set if return is true.
|
|
@param nHandle
|
|
The handle of the proberty.
|
|
@return
|
|
<TRUE/> if the value is converted successfully.
|
|
@throws IllegalArgumentException
|
|
*/
|
|
virtual sal_Bool SAL_CALL convertFastPropertyValue(
|
|
::com::sun::star::uno::Any & rConvertedValue,
|
|
::com::sun::star::uno::Any & rOldValue,
|
|
sal_Int32 nHandle,
|
|
const ::com::sun::star::uno::Any& rValue )
|
|
throw (::com::sun::star::lang::IllegalArgumentException);
|
|
|
|
/** The same as setFastProperyValue, but no exception is thrown and nHandle
|
|
is always valid. You must not broadcast the changes in this method.
|
|
*/
|
|
virtual void SAL_CALL setFastPropertyValue_NoBroadcast(
|
|
sal_Int32 nHandle,
|
|
const ::com::sun::star::uno::Any& rValue )
|
|
throw (::com::sun::star::uno::Exception);
|
|
|
|
/** When the called object has been disposed already this method throws
|
|
a Disposed exception and does not return.
|
|
*/
|
|
void ThrowIfDisposed (void) const
|
|
throw (::com::sun::star::lang::DisposedException);
|
|
|
|
using cppu::OPropertySetHelper::disposing;
|
|
using cppu::OPropertySetHelper::getFastPropertyValue;
|
|
|
|
private:
|
|
/** This pointer to the ViewShellBase can be NULL (after a call to
|
|
ReleaseViewShellBase()).
|
|
*/
|
|
ViewShellBase* mpBase;
|
|
|
|
Rectangle maLastVisArea;
|
|
::tools::WeakReference<SdrPage> mpCurrentPage;
|
|
bool mbMasterPageMode;
|
|
bool mbLayerMode;
|
|
|
|
/** This flag indicates whether the called DrawController is being
|
|
disposed or already has been disposed.
|
|
*/
|
|
bool mbDisposing;
|
|
|
|
::std::auto_ptr< ::cppu::IPropertyArrayHelper> mpPropertyArrayHelper;
|
|
|
|
/** The current sub controller. May be NULL.
|
|
*/
|
|
css::uno::Reference<css::drawing::XDrawSubController> mxSubController;
|
|
|
|
css::uno::Reference<
|
|
css::drawing::framework::XConfigurationController> mxConfigurationController;
|
|
css::uno::Reference<
|
|
css::drawing::framework::XModuleController> mxModuleController;
|
|
|
|
/** Send an event to all relevant property listeners that a
|
|
property has changed its value. The fire() method of the
|
|
OPropertySetHelper is wrapped by this method to handle
|
|
exceptions thrown by called listeners.
|
|
*/
|
|
void FirePropertyChange (
|
|
sal_Int32 nHandle,
|
|
const ::com::sun::star::uno::Any& rNewValue,
|
|
const ::com::sun::star::uno::Any& rOldValue);
|
|
|
|
void ProvideFrameworkControllers (void);
|
|
void DisposeFrameworkControllers (void);
|
|
};
|
|
|
|
} // end of namespace sd
|
|
|
|
#endif
|