LCOV - code coverage report
Current view: top level - libreoffice/sd/source/ui/unoidl - DrawController.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 2 323 0.6 %
Date: 2012-12-27 Functions: 2 51 3.9 %
Legend: Lines: hit not hit

          Line data    Source code
       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             : 
      21             : #include "DrawController.hxx"
      22             : #include "DrawDocShell.hxx"
      23             : 
      24             : #include "DrawSubController.hxx"
      25             : #include "sdpage.hxx"
      26             : #include "ViewShellBase.hxx"
      27             : #include "ViewShellManager.hxx"
      28             : #include "FormShellManager.hxx"
      29             : #include "Window.hxx"
      30             : 
      31             : #include <comphelper/anytostring.hxx>
      32             : #include <comphelper/processfactory.hxx>
      33             : #include <comphelper/sequence.hxx>
      34             : #include <comphelper/stl_types.hxx>
      35             : #include <comphelper/servicehelper.hxx>
      36             : #include <cppuhelper/exc_hlp.hxx>
      37             : #include <cppuhelper/bootstrap.hxx>
      38             : 
      39             : #include <com/sun/star/beans/PropertyAttribute.hpp>
      40             : #include <com/sun/star/drawing/framework/ConfigurationController.hpp>
      41             : #include <com/sun/star/drawing/framework/ModuleController.hpp>
      42             : #include <com/sun/star/lang/XInitialization.hpp>
      43             : 
      44             : #include "slideshow.hxx"
      45             : 
      46             : #include <svx/fmshell.hxx>
      47             : #include <osl/mutex.hxx>
      48             : #include <vcl/svapp.hxx>
      49             : #include <boost/shared_ptr.hpp>
      50             : 
      51             : using namespace ::std;
      52             : using ::rtl::OUString;
      53             : using namespace ::cppu;
      54             : using namespace ::com::sun::star;
      55             : using namespace ::com::sun::star::uno;
      56             : using namespace ::com::sun::star::drawing::framework;
      57             : 
      58             : namespace sd {
      59             : 
      60           0 : DrawController::DrawController (ViewShellBase& rBase) throw()
      61             :     : DrawControllerInterfaceBase(&rBase),
      62             :       BroadcastHelperOwner(SfxBaseController::m_aMutex),
      63             :       OPropertySetHelper( static_cast<OBroadcastHelperVar<
      64             :           OMultiTypeInterfaceContainerHelper,
      65             :           OMultiTypeInterfaceContainerHelper::keyType>& >(
      66             :               BroadcastHelperOwner::maBroadcastHelper)),
      67             :       m_aSelectionTypeIdentifier(
      68           0 :         ::getCppuType( (Reference<view::XSelectionChangeListener > *)0 )),
      69             :       mpBase(&rBase),
      70             :       maLastVisArea(),
      71             :       mpCurrentPage(NULL),
      72             :       mbMasterPageMode(false),
      73             :       mbLayerMode(false),
      74             :       mbDisposing(false),
      75             :       mpPropertyArrayHelper(NULL),
      76             :       mxSubController(),
      77             :       mxConfigurationController(),
      78           0 :       mxModuleController()
      79             : {
      80           0 :     ProvideFrameworkControllers();
      81           0 : }
      82             : 
      83             : 
      84             : 
      85             : 
      86           0 : DrawController::~DrawController (void) throw()
      87             : {
      88           0 : }
      89             : 
      90             : 
      91             : 
      92             : 
      93           0 : void DrawController::SetSubController (
      94             :     const Reference<drawing::XDrawSubController>& rxSubController)
      95             : {
      96             :     // Update the internal state.
      97           0 :     mxSubController = rxSubController;
      98           0 :     mpPropertyArrayHelper.reset();
      99           0 :     maLastVisArea = Rectangle();
     100             : 
     101             :     // Inform listeners about the changed state.
     102           0 :     FireSelectionChangeListener();
     103           0 : }
     104             : 
     105             : 
     106             : 
     107             : 
     108             : // XInterface
     109             : 
     110           0 : IMPLEMENT_FORWARD_XINTERFACE2(
     111             :     DrawController,
     112             :     DrawControllerInterfaceBase,
     113             :     OPropertySetHelper);
     114             : 
     115             : 
     116             : // XTypeProvider
     117             : 
     118           0 : Sequence<Type> SAL_CALL DrawController::getTypes (void)
     119             :     throw (::com::sun::star::uno::RuntimeException)
     120             : {
     121           0 :     ThrowIfDisposed();
     122             :     // OPropertySetHelper does not provide getTypes, so we have to
     123             :     // implement this method manually and list its three interfaces.
     124             :     OTypeCollection aTypeCollection (
     125           0 :         ::getCppuType (( const Reference<beans::XMultiPropertySet>*)NULL),
     126           0 :         ::getCppuType (( const Reference<beans::XFastPropertySet>*)NULL),
     127           0 :         ::getCppuType (( const Reference<beans::XPropertySet>*)NULL));
     128             : 
     129             :     return ::comphelper::concatSequences(
     130             :         SfxBaseController::getTypes(),
     131             :         aTypeCollection.getTypes(),
     132           0 :         DrawControllerInterfaceBase::getTypes());
     133             : }
     134             : 
     135           0 : IMPLEMENT_GET_IMPLEMENTATION_ID(DrawController);
     136             : 
     137             : 
     138             : 
     139             : // XComponent
     140             : 
     141             : 
     142           0 : void SAL_CALL DrawController::dispose (void)
     143             :     throw( RuntimeException )
     144             : {
     145           0 :     if( !mbDisposing )
     146             :     {
     147           0 :         SolarMutexGuard aGuard;
     148             : 
     149           0 :         if( !mbDisposing )
     150             :         {
     151           0 :             mbDisposing = true;
     152             : 
     153           0 :             boost::shared_ptr<ViewShell> pViewShell;
     154           0 :             if (mpBase)
     155           0 :                 pViewShell = mpBase->GetMainViewShell();
     156           0 :             if ( pViewShell )
     157             :             {
     158           0 :                 pViewShell->DeactivateCurrentFunction();
     159           0 :                 DrawDocShell* pDocShell = pViewShell->GetDocSh();
     160           0 :                 if ( pDocShell != NULL )
     161           0 :                     pDocShell->SetDocShellFunction(0);
     162             :             }
     163           0 :             pViewShell.reset();
     164             : 
     165             :             // When the controller has not been detached from its view
     166             :             // shell, i.e. mpViewShell is not NULL, then tell PaneManager
     167             :             // and ViewShellManager to clear the shell stack.
     168           0 :             if (mxSubController.is() && mpBase!=NULL)
     169             :             {
     170           0 :                 mpBase->DisconnectAllClients();
     171           0 :                 mpBase->GetViewShellManager()->Shutdown();
     172             :             }
     173             : 
     174           0 :             OPropertySetHelper::disposing();
     175             : 
     176           0 :             DisposeFrameworkControllers();
     177             : 
     178           0 :             SfxBaseController::dispose();
     179           0 :         }
     180             :     }
     181           0 : }
     182             : 
     183             : 
     184             : 
     185             : 
     186           0 : void SAL_CALL DrawController::addEventListener(
     187             :     const Reference<lang::XEventListener >& xListener)
     188             :     throw (RuntimeException)
     189             : {
     190           0 :     ThrowIfDisposed();
     191           0 :     SfxBaseController::addEventListener( xListener );
     192           0 : }
     193             : 
     194             : 
     195             : 
     196             : 
     197           0 : void SAL_CALL DrawController::removeEventListener (
     198             :     const Reference<lang::XEventListener >& aListener)
     199             :     throw (RuntimeException)
     200             : {
     201           0 :     if(!rBHelper.bDisposed && !rBHelper.bInDispose && !mbDisposing)
     202           0 :         SfxBaseController::removeEventListener( aListener );
     203           0 : }
     204             : 
     205             : // XController
     206           0 : ::sal_Bool SAL_CALL DrawController::suspend( ::sal_Bool Suspend ) throw (::com::sun::star::uno::RuntimeException)
     207             : {
     208           0 :     if( Suspend )
     209             :     {
     210           0 :         ViewShellBase* pViewShellBase = GetViewShellBase();
     211           0 :         if( pViewShellBase )
     212             :         {
     213             :             // do not allow suspend if a slideshow needs this controller!
     214           0 :             rtl::Reference< SlideShow > xSlideShow( SlideShow::GetSlideShow( *pViewShellBase ) );
     215           0 :             if( xSlideShow.is() && xSlideShow->dependsOn(pViewShellBase) )
     216           0 :                 return sal_False;
     217             :         }
     218             :     }
     219             : 
     220           0 :     return SfxBaseController::suspend( Suspend );
     221             : }
     222             : 
     223             : 
     224             : // XServiceInfo
     225             : 
     226           0 : OUString SAL_CALL DrawController::getImplementationName(  ) throw(RuntimeException)
     227             : {
     228             :     // Do not throw an excepetion at the moment.  This leads to a crash
     229             :     // under Solaris on relead.  See issue i70929 for details.
     230             :     //    ThrowIfDisposed();
     231           0 :     return OUString("DrawController") ;
     232             : }
     233             : 
     234             : 
     235             : 
     236           3 : static OUString ssServiceName( "com.sun.star.drawing.DrawingDocumentDrawView");
     237             : 
     238           0 : sal_Bool SAL_CALL DrawController::supportsService (
     239             :     const OUString& rsServiceName)
     240             :     throw(RuntimeException)
     241             : {
     242             :     // Do not throw an exception at the moment.  This leads to a crash
     243             :     // under Solaris on relead.  See issue i70929 for details.
     244             :     //    ThrowIfDisposed();
     245           0 :     return rsServiceName.equals(ssServiceName);
     246             : }
     247             : 
     248             : 
     249             : 
     250             : 
     251           0 : Sequence<OUString> SAL_CALL DrawController::getSupportedServiceNames (void)
     252             :     throw(RuntimeException)
     253             : {
     254           0 :     ThrowIfDisposed();
     255           0 :     Sequence<OUString> aSupportedServices (1);
     256           0 :     OUString* pServices = aSupportedServices.getArray();
     257           0 :     pServices[0] = ssServiceName;
     258           0 :     return aSupportedServices;
     259             : }
     260             : 
     261             : 
     262             : 
     263             : 
     264             : //------ XSelectionSupplier --------------------------------------------
     265             : 
     266           0 : sal_Bool SAL_CALL DrawController::select (const Any& aSelection)
     267             :     throw(lang::IllegalArgumentException, RuntimeException)
     268             : {
     269           0 :     ThrowIfDisposed();
     270           0 :     SolarMutexGuard aGuard;
     271             : 
     272           0 :     if (mxSubController.is())
     273           0 :         return mxSubController->select(aSelection);
     274             :     else
     275           0 :         return false;
     276             : }
     277             : 
     278             : 
     279             : 
     280             : 
     281           0 : Any SAL_CALL DrawController::getSelection()
     282             :     throw(RuntimeException)
     283             : {
     284           0 :     ThrowIfDisposed();
     285           0 :     SolarMutexGuard aGuard;
     286             : 
     287           0 :     if (mxSubController.is())
     288           0 :         return mxSubController->getSelection();
     289             :     else
     290           0 :         return Any();
     291             : }
     292             : 
     293             : 
     294             : 
     295             : 
     296           0 : void SAL_CALL DrawController::addSelectionChangeListener(
     297             :     const Reference< view::XSelectionChangeListener >& xListener)
     298             :     throw(RuntimeException)
     299             : {
     300           0 :     if( mbDisposing )
     301           0 :         throw lang::DisposedException();
     302             : 
     303           0 :     BroadcastHelperOwner::maBroadcastHelper.addListener (m_aSelectionTypeIdentifier, xListener);
     304           0 : }
     305             : 
     306             : 
     307             : 
     308             : 
     309           0 : void SAL_CALL DrawController::removeSelectionChangeListener(
     310             :     const Reference< view::XSelectionChangeListener >& xListener )
     311             :     throw(RuntimeException)
     312             : {
     313           0 :     if (rBHelper.bDisposed)
     314           0 :         throw lang::DisposedException();
     315             : 
     316           0 :     BroadcastHelperOwner::maBroadcastHelper.removeListener (m_aSelectionTypeIdentifier, xListener);
     317           0 : }
     318             : 
     319             : 
     320             : 
     321             : 
     322             : 
     323             : //=====  lang::XEventListener  ================================================
     324             : 
     325             : void SAL_CALL
     326           0 :     DrawController::disposing (const lang::EventObject& )
     327             :     throw (uno::RuntimeException)
     328             : {
     329           0 : }
     330             : 
     331             : 
     332             : 
     333             : 
     334             : //=====  view::XSelectionChangeListener  ======================================
     335             : 
     336             : void  SAL_CALL
     337           0 :     DrawController::selectionChanged (const lang::EventObject& rEvent)
     338             :         throw (uno::RuntimeException)
     339             : {
     340           0 :     ThrowIfDisposed();
     341             :     // Have to forward the event to our selection change listeners.
     342             :     OInterfaceContainerHelper* pListeners = BroadcastHelperOwner::maBroadcastHelper.getContainer(
     343           0 :         ::getCppuType((Reference<view::XSelectionChangeListener>*)0));
     344           0 :     if (pListeners)
     345             :     {
     346             :         // Re-send the event to all of our listeners.
     347           0 :         OInterfaceIteratorHelper aIterator (*pListeners);
     348           0 :         while (aIterator.hasMoreElements())
     349             :         {
     350             :             try
     351             :             {
     352             :                 view::XSelectionChangeListener* pListener =
     353             :                     static_cast<view::XSelectionChangeListener*>(
     354           0 :                         aIterator.next());
     355           0 :                 if (pListener != NULL)
     356           0 :                     pListener->selectionChanged (rEvent);
     357             :             }
     358           0 :             catch (const RuntimeException&)
     359             :             {
     360             :             }
     361           0 :         }
     362             :     }
     363           0 : }
     364             : 
     365             : 
     366             : 
     367             : 
     368             : // XDrawView
     369             : 
     370           0 : void SAL_CALL DrawController::setCurrentPage( const Reference< drawing::XDrawPage >& xPage )
     371             :     throw(RuntimeException)
     372             : {
     373           0 :     ThrowIfDisposed();
     374           0 :     SolarMutexGuard aGuard;
     375             : 
     376           0 :     if (mxSubController.is())
     377           0 :         mxSubController->setCurrentPage(xPage);
     378           0 : }
     379             : 
     380             : 
     381             : 
     382             : 
     383           0 : Reference< drawing::XDrawPage > SAL_CALL DrawController::getCurrentPage (void)
     384             :     throw(RuntimeException)
     385             : {
     386           0 :     ThrowIfDisposed();
     387           0 :     SolarMutexGuard aGuard;
     388           0 :     Reference<drawing::XDrawPage> xPage;
     389             : 
     390             :     // Get current page from sub controller.
     391           0 :     if (mxSubController.is())
     392           0 :         xPage = mxSubController->getCurrentPage();
     393             : 
     394             :     // When there is not yet a sub controller (during initialization) then fall back
     395             :     // to the current page in mpCurrentPage.
     396           0 :     if ( ! xPage.is() && mpCurrentPage.is())
     397           0 :         xPage = Reference<drawing::XDrawPage>(mpCurrentPage->getUnoPage(), UNO_QUERY);
     398             : 
     399           0 :     return xPage;
     400             : }
     401             : 
     402             : 
     403             : 
     404             : 
     405           0 : void DrawController::FireVisAreaChanged (const Rectangle& rVisArea) throw()
     406             : {
     407           0 :     if( maLastVisArea != rVisArea )
     408             :     {
     409           0 :         Any aNewValue;
     410             :         aNewValue <<= awt::Rectangle(
     411           0 :             rVisArea.Left(),
     412           0 :             rVisArea.Top(),
     413           0 :             rVisArea.GetWidth(),
     414           0 :             rVisArea.GetHeight() );
     415             : 
     416           0 :         Any aOldValue;
     417             :         aOldValue <<= awt::Rectangle(
     418           0 :             maLastVisArea.Left(),
     419           0 :             maLastVisArea.Top(),
     420           0 :             maLastVisArea.GetWidth(),
     421           0 :             maLastVisArea.GetHeight() );
     422             : 
     423           0 :         FirePropertyChange (PROPERTY_WORKAREA, aNewValue, aOldValue);
     424             : 
     425           0 :         maLastVisArea = rVisArea;
     426             :     }
     427           0 : }
     428             : 
     429             : 
     430             : 
     431             : 
     432           0 : void DrawController::FireSelectionChangeListener() throw()
     433             : {
     434             :     OInterfaceContainerHelper * pLC = BroadcastHelperOwner::maBroadcastHelper.getContainer(
     435           0 :         m_aSelectionTypeIdentifier);
     436           0 :     if( pLC )
     437             :     {
     438           0 :         Reference< XInterface > xSource( (XWeak*)this );
     439           0 :         const lang::EventObject aEvent( xSource );
     440             : 
     441             :         // Ueber alle Listener iterieren und Events senden
     442           0 :         OInterfaceIteratorHelper aIt( *pLC);
     443           0 :         while( aIt.hasMoreElements() )
     444             :         {
     445             :             try
     446             :             {
     447             :                 view::XSelectionChangeListener * pL =
     448           0 :                     static_cast<view::XSelectionChangeListener*>(aIt.next());
     449           0 :                 if (pL != NULL)
     450           0 :                     pL->selectionChanged( aEvent );
     451             :             }
     452           0 :             catch (const RuntimeException&)
     453             :             {
     454             :             }
     455           0 :         }
     456             :     }
     457           0 : }
     458             : 
     459             : 
     460             : 
     461             : 
     462           0 : void DrawController::FireChangeEditMode (bool bMasterPageMode) throw()
     463             : {
     464           0 :     if (bMasterPageMode != mbMasterPageMode )
     465             :     {
     466             :         FirePropertyChange(
     467             :             PROPERTY_MASTERPAGEMODE,
     468             :             makeAny(bMasterPageMode),
     469           0 :             makeAny(mbMasterPageMode));
     470             : 
     471           0 :         mbMasterPageMode = bMasterPageMode;
     472             :     }
     473           0 : }
     474             : 
     475             : 
     476             : 
     477             : 
     478           0 : void DrawController::FireChangeLayerMode (bool bLayerMode) throw()
     479             : {
     480           0 :     if (bLayerMode != mbLayerMode)
     481             :     {
     482             :         FirePropertyChange(
     483             :             PROPERTY_LAYERMODE,
     484             :             makeAny(bLayerMode),
     485           0 :             makeAny(mbLayerMode));
     486             : 
     487           0 :         mbLayerMode = bLayerMode;
     488             :     }
     489           0 : }
     490             : 
     491             : 
     492             : 
     493             : 
     494           0 : void DrawController::FireSwitchCurrentPage (SdPage* pNewCurrentPage) throw()
     495             : {
     496           0 :     SdrPage* pCurrentPage  = mpCurrentPage.get();
     497           0 :     if (pNewCurrentPage != pCurrentPage)
     498             :     {
     499             :         try
     500             :         {
     501             :             Any aNewValue (
     502           0 :                 makeAny(Reference<drawing::XDrawPage>(pNewCurrentPage->getUnoPage(), UNO_QUERY)));
     503             : 
     504           0 :             Any aOldValue;
     505           0 :             if (pCurrentPage != NULL)
     506             :             {
     507           0 :                 Reference<drawing::XDrawPage> xOldPage (pCurrentPage->getUnoPage(), UNO_QUERY);
     508           0 :                 aOldValue <<= xOldPage;
     509             :             }
     510             : 
     511           0 :             FirePropertyChange(PROPERTY_CURRENTPAGE, aNewValue, aOldValue);
     512             : 
     513           0 :             mpCurrentPage.reset(pNewCurrentPage);
     514             :         }
     515           0 :         catch (const uno::Exception&)
     516             :         {
     517             :             OSL_FAIL(
     518             :                 OString("sd::SdUnoDrawView::FireSwitchCurrentPage(), exception caught: " +
     519             :                     ::rtl::OUStringToOString(
     520             :                         comphelper::anyToString( cppu::getCaughtException() ),
     521             :                         RTL_TEXTENCODING_UTF8 )).getStr() );
     522             :         }
     523             :     }
     524           0 : }
     525             : 
     526             : 
     527             : 
     528             : 
     529           0 : void DrawController::FirePropertyChange (
     530             :     sal_Int32 nHandle,
     531             :     const Any& rNewValue,
     532             :     const Any& rOldValue)
     533             : {
     534             :     try
     535             :     {
     536           0 :         fire (&nHandle, &rNewValue, &rOldValue, 1, sal_False);
     537             :     }
     538           0 :     catch (const RuntimeException&)
     539             :     {
     540             :         // Ignore this exception.  Exceptions should be handled in the
     541             :         // fire() function so that all listeners are called.  This is
     542             :         // not the case at the moment, so we simply ignore the
     543             :         // exception.
     544             :     }
     545             : 
     546           0 : }
     547             : 
     548             : 
     549             : 
     550             : 
     551           0 : ViewShellBase* DrawController::GetViewShellBase (void)
     552             : {
     553           0 :     return mpBase;
     554             : }
     555             : 
     556             : 
     557             : 
     558             : 
     559           0 : void DrawController::ReleaseViewShellBase (void)
     560             : {
     561           0 :     DisposeFrameworkControllers();
     562           0 :     mpBase = NULL;
     563           0 : }
     564             : 
     565             : 
     566             : 
     567             : 
     568             : //===== XControllerManager ==============================================================
     569             : 
     570             : Reference<XConfigurationController> SAL_CALL
     571           0 :     DrawController::getConfigurationController (void)
     572             :     throw (RuntimeException)
     573             : {
     574           0 :     ThrowIfDisposed();
     575             : 
     576           0 :     return mxConfigurationController;
     577             : }
     578             : 
     579             : 
     580             : 
     581             : 
     582             : Reference<XModuleController> SAL_CALL
     583           0 :     DrawController::getModuleController (void)
     584             :     throw (RuntimeException)
     585             : {
     586           0 :     ThrowIfDisposed();
     587             : 
     588           0 :     return mxModuleController;
     589             : }
     590             : 
     591             : 
     592             : 
     593             : 
     594             : //===== XUnoTunnel ============================================================
     595             : 
     596             : namespace
     597             : {
     598             :     class theDrawControllerUnoTunnelId : public rtl::Static< UnoTunnelIdInit, theDrawControllerUnoTunnelId> {};
     599             : }
     600             : 
     601           0 : const Sequence<sal_Int8>& DrawController::getUnoTunnelId (void)
     602             : {
     603           0 :     return theDrawControllerUnoTunnelId::get().getSeq();
     604             : }
     605             : 
     606             : 
     607             : 
     608             : 
     609           0 : sal_Int64 SAL_CALL DrawController::getSomething (const Sequence<sal_Int8>& rId)
     610             :     throw (RuntimeException)
     611             : {
     612           0 :     sal_Int64 nResult = 0;
     613             : 
     614           0 :     if (rId.getLength() == 16
     615           0 :         && memcmp(getUnoTunnelId().getConstArray(), rId.getConstArray(), 16) == 0)
     616             :     {
     617           0 :         nResult = sal::static_int_cast<sal_Int64>(reinterpret_cast<sal_IntPtr>(this));
     618             :     }
     619             : 
     620           0 :     return nResult;
     621             : }
     622             : 
     623             : 
     624             : 
     625             : 
     626             : //===== Properties ============================================================
     627             : 
     628           0 : void DrawController::FillPropertyTable (
     629             :     ::std::vector<beans::Property>& rProperties)
     630             : {
     631             :     rProperties.push_back(
     632             :         beans::Property("VisibleArea",
     633             :             PROPERTY_WORKAREA,
     634           0 :             ::getCppuType((const ::com::sun::star::awt::Rectangle*)0),
     635           0 :             beans::PropertyAttribute::BOUND | beans::PropertyAttribute::READONLY));
     636             :     rProperties.push_back(
     637             :         beans::Property(
     638             :             "SubController",
     639             :             PROPERTY_SUB_CONTROLLER,
     640           0 :             ::getCppuType((const Reference<drawing::XDrawSubController>*)0),
     641           0 :             beans::PropertyAttribute::BOUND));
     642             :     rProperties.push_back(
     643             :         beans::Property(
     644             :             "CurrentPage",
     645             :             PROPERTY_CURRENTPAGE,
     646           0 :             ::getCppuType((const Reference< drawing::XDrawPage > *)0),
     647           0 :             beans::PropertyAttribute::BOUND ));
     648             :     rProperties.push_back(
     649             :         beans::Property("IsLayerMode",
     650             :             PROPERTY_LAYERMODE,
     651           0 :             ::getCppuBooleanType(),
     652           0 :             beans::PropertyAttribute::BOUND ));
     653             :     rProperties.push_back(
     654             :         beans::Property("IsMasterPageMode",
     655             :             PROPERTY_MASTERPAGEMODE,
     656           0 :             ::getCppuBooleanType(),
     657           0 :             beans::PropertyAttribute::BOUND ));
     658             :     rProperties.push_back(
     659             :         beans::Property("ActiveLayer",
     660             :             PROPERTY_ACTIVE_LAYER,
     661           0 :             ::getCppuBooleanType(),
     662           0 :             beans::PropertyAttribute::BOUND ));
     663             :     rProperties.push_back(
     664             :         beans::Property("ZoomValue",
     665             :             PROPERTY_ZOOMVALUE,
     666           0 :             ::getCppuType((const sal_Int16*)0),
     667           0 :             beans::PropertyAttribute::BOUND ));
     668             :     rProperties.push_back(
     669             :         beans::Property("ZoomType",
     670             :             PROPERTY_ZOOMTYPE,
     671           0 :             ::getCppuType((const sal_Int16*)0),
     672           0 :             beans::PropertyAttribute::BOUND ));
     673             :     rProperties.push_back(
     674             :         beans::Property("ViewOffset",
     675             :             PROPERTY_VIEWOFFSET,
     676           0 :             ::getCppuType((const ::com::sun::star::awt::Point*)0),
     677           0 :             beans::PropertyAttribute::BOUND ));
     678             :     rProperties.push_back(
     679             :         beans::Property("DrawViewMode",
     680             :             PROPERTY_DRAWVIEWMODE,
     681           0 :             ::getCppuType((const ::com::sun::star::awt::Point*)0),
     682           0 :             beans::PropertyAttribute::BOUND|beans::PropertyAttribute::READONLY|beans::PropertyAttribute::MAYBEVOID ));
     683           0 : }
     684             : 
     685             : 
     686             : 
     687             : 
     688           0 : IPropertyArrayHelper & DrawController::getInfoHelper()
     689             : {
     690           0 :     SolarMutexGuard aGuard;
     691             : 
     692           0 :     if (mpPropertyArrayHelper.get() == NULL)
     693             :     {
     694           0 :         ::std::vector<beans::Property> aProperties;
     695           0 :         FillPropertyTable (aProperties);
     696           0 :         Sequence<beans::Property> aPropertySequence (aProperties.size());
     697           0 :         for (unsigned int i=0; i<aProperties.size(); i++)
     698           0 :             aPropertySequence[i] = aProperties[i];
     699           0 :         mpPropertyArrayHelper.reset(new OPropertyArrayHelper(aPropertySequence, sal_False));
     700             :     }
     701             : 
     702           0 :     return *mpPropertyArrayHelper.get();
     703             : }
     704             : 
     705             : 
     706             : 
     707             : 
     708           0 : Reference < beans::XPropertySetInfo >  DrawController::getPropertySetInfo()
     709             :         throw ( ::com::sun::star::uno::RuntimeException)
     710             : {
     711           0 :     SolarMutexGuard aGuard;
     712             : 
     713           0 :     static Reference < beans::XPropertySetInfo >  xInfo( createPropertySetInfo( getInfoHelper() ) );
     714           0 :     return xInfo;
     715             : }
     716             : 
     717             : 
     718           0 : uno::Reference< form::runtime::XFormController > SAL_CALL DrawController::getFormController( const uno::Reference< form::XForm >& Form ) throw (uno::RuntimeException)
     719             : {
     720           0 :     SolarMutexGuard aGuard;
     721             : 
     722           0 :     FmFormShell* pFormShell = mpBase->GetFormShellManager()->GetFormShell();
     723           0 :     SdrView* pSdrView = mpBase->GetDrawView();
     724           0 :     ::boost::shared_ptr<ViewShell> pViewShell = mpBase->GetMainViewShell();
     725           0 :     ::sd::Window* pWindow = pViewShell ? pViewShell->GetActiveWindow() : NULL;
     726             : 
     727           0 :     uno::Reference< form::runtime::XFormController > xController( NULL );
     728           0 :     if ( pFormShell && pSdrView && pWindow )
     729           0 :         xController = pFormShell->GetFormController( Form, *pSdrView, *pWindow );
     730           0 :     return xController;
     731             : }
     732             : 
     733           0 : ::sal_Bool SAL_CALL DrawController::isFormDesignMode(  ) throw (uno::RuntimeException)
     734             : {
     735           0 :     SolarMutexGuard aGuard;
     736             : 
     737           0 :     sal_Bool bIsDesignMode = sal_True;
     738             : 
     739           0 :     FmFormShell* pFormShell = mpBase->GetFormShellManager()->GetFormShell();
     740           0 :     if ( pFormShell )
     741           0 :         bIsDesignMode = pFormShell->IsDesignMode();
     742             : 
     743           0 :     return bIsDesignMode;
     744             : }
     745             : 
     746           0 : void SAL_CALL DrawController::setFormDesignMode( ::sal_Bool _DesignMode ) throw (uno::RuntimeException)
     747             : {
     748           0 :     SolarMutexGuard aGuard;
     749             : 
     750           0 :     FmFormShell* pFormShell = mpBase->GetFormShellManager()->GetFormShell();
     751           0 :     if ( pFormShell )
     752           0 :         pFormShell->SetDesignMode( _DesignMode );
     753           0 : }
     754             : 
     755           0 : uno::Reference< awt::XControl > SAL_CALL DrawController::getControl( const uno::Reference< awt::XControlModel >& xModel ) throw (container::NoSuchElementException, uno::RuntimeException)
     756             : {
     757           0 :     SolarMutexGuard aGuard;
     758             : 
     759           0 :     FmFormShell* pFormShell = mpBase->GetFormShellManager()->GetFormShell();
     760           0 :     SdrView* pSdrView = mpBase->GetDrawView();
     761           0 :     ::boost::shared_ptr<ViewShell> pViewShell = mpBase->GetMainViewShell();
     762           0 :     ::sd::Window* pWindow = pViewShell ? pViewShell->GetActiveWindow() : NULL;
     763             : 
     764           0 :     uno::Reference< awt::XControl > xControl( NULL );
     765           0 :     if ( pFormShell && pSdrView && pWindow )
     766           0 :         pFormShell->GetFormControl( xModel, *pSdrView, *pWindow, xControl );
     767           0 :     return xControl;
     768             : }
     769             : 
     770             : 
     771             : 
     772             : 
     773           0 : sal_Bool DrawController::convertFastPropertyValue (
     774             :     Any & rConvertedValue,
     775             :     Any & rOldValue,
     776             :     sal_Int32 nHandle,
     777             :     const Any& rValue)
     778             :     throw ( com::sun::star::lang::IllegalArgumentException)
     779             : {
     780           0 :     sal_Bool bResult = sal_False;
     781             : 
     782           0 :     if (nHandle == PROPERTY_SUB_CONTROLLER)
     783             :     {
     784           0 :         rOldValue <<= mxSubController;
     785           0 :         rConvertedValue <<= Reference<drawing::XDrawSubController>(rValue, UNO_QUERY);
     786           0 :         bResult = (rOldValue != rConvertedValue);
     787             :     }
     788           0 :     else if (mxSubController.is())
     789             :     {
     790           0 :         rConvertedValue = rValue;
     791             :         try
     792             :         {
     793           0 :             rOldValue = mxSubController->getFastPropertyValue(nHandle);
     794           0 :             bResult = (rOldValue != rConvertedValue);
     795             :         }
     796           0 :         catch (const beans::UnknownPropertyException&)
     797             :         {
     798             :             // The property is unknown and thus an illegal argument to this method.
     799           0 :             throw com::sun::star::lang::IllegalArgumentException();
     800             :         }
     801             :     }
     802             : 
     803           0 :     return bResult;
     804             : }
     805             : 
     806             : 
     807             : 
     808             : 
     809           0 : void DrawController::setFastPropertyValue_NoBroadcast (
     810             :     sal_Int32 nHandle,
     811             :     const Any& rValue)
     812             :     throw ( com::sun::star::uno::Exception)
     813             : {
     814           0 :     SolarMutexGuard aGuard;
     815           0 :     if (nHandle == PROPERTY_SUB_CONTROLLER)
     816           0 :         SetSubController(Reference<drawing::XDrawSubController>(rValue, UNO_QUERY));
     817           0 :     else if (mxSubController.is())
     818           0 :         mxSubController->setFastPropertyValue(nHandle, rValue);
     819           0 : }
     820             : 
     821             : 
     822             : 
     823             : 
     824           0 : void DrawController::getFastPropertyValue (
     825             :     Any & rRet,
     826             :     sal_Int32 nHandle ) const
     827             : {
     828           0 :     SolarMutexGuard aGuard;
     829             : 
     830           0 :     switch( nHandle )
     831             :     {
     832             :         case PROPERTY_WORKAREA:
     833             :             rRet <<= awt::Rectangle(
     834           0 :                 maLastVisArea.Left(),
     835           0 :                 maLastVisArea.Top(),
     836           0 :                 maLastVisArea.GetWidth(),
     837           0 :                 maLastVisArea.GetHeight());
     838           0 :             break;
     839             : 
     840             :         case PROPERTY_SUB_CONTROLLER:
     841           0 :             rRet <<= mxSubController;
     842           0 :             break;
     843             : 
     844             :         default:
     845           0 :             if (mxSubController.is())
     846           0 :                 rRet = mxSubController->getFastPropertyValue(nHandle);
     847           0 :             break;
     848           0 :     }
     849           0 : }
     850             : 
     851             : 
     852             : 
     853             : 
     854             : //-----------------------------------------------------------------------------
     855             : 
     856           0 : void DrawController::ProvideFrameworkControllers (void)
     857             : {
     858           0 :     SolarMutexGuard aGuard;
     859             :     try
     860             :     {
     861           0 :         Reference<XController> xController (this);
     862             :         const Reference<XComponentContext> xContext (
     863           0 :             ::comphelper::getProcessComponentContext() );
     864             :         mxConfigurationController = ConfigurationController::create(
     865             :             xContext,
     866           0 :             xController);
     867             :         mxModuleController = ModuleController::create(
     868             :             xContext,
     869           0 :             xController);
     870             :     }
     871           0 :     catch (const RuntimeException&)
     872             :     {
     873           0 :         mxConfigurationController = NULL;
     874           0 :         mxModuleController = NULL;
     875           0 :     }
     876           0 : }
     877             : 
     878             : 
     879             : 
     880             : 
     881           0 : void DrawController::DisposeFrameworkControllers (void)
     882             : {
     883           0 :     Reference<XComponent> xComponent (mxModuleController, UNO_QUERY);
     884           0 :     if (xComponent.is())
     885           0 :         xComponent->dispose();
     886             : 
     887           0 :     xComponent = Reference<XComponent>(mxConfigurationController, UNO_QUERY);
     888           0 :     if (xComponent.is())
     889           0 :         xComponent->dispose();
     890           0 : }
     891             : 
     892             : 
     893             : 
     894             : 
     895           0 : void DrawController::ThrowIfDisposed (void) const
     896             :     throw (::com::sun::star::lang::DisposedException)
     897             : {
     898           0 :     if (rBHelper.bDisposed || rBHelper.bInDispose || mbDisposing)
     899             :     {
     900             :         OSL_TRACE ("Calling disposed DrawController object. Throwing exception:");
     901             :         throw lang::DisposedException (
     902             :             "DrawController object has already been disposed",
     903           0 :             const_cast<uno::XWeak*>(static_cast<const uno::XWeak*>(this)));
     904             :     }
     905           0 : }
     906             : 
     907             : 
     908             : 
     909             : 
     910             : 
     911           9 : } // end of namespace sd
     912             : 
     913             : 
     914             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10