LCOV - code coverage report
Current view: top level - sfx2/source/appl - module.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 141 156 90.4 %
Date: 2014-11-03 Functions: 31 38 81.6 %
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             : #include <stdio.h>
      21             : #include <tools/rcid.h>
      22             : 
      23             : #include <cstdarg>
      24             : #include <sfx2/module.hxx>
      25             : #include <sfx2/app.hxx>
      26             : #include <sfx2/sfxresid.hxx>
      27             : #include <sfx2/msgpool.hxx>
      28             : #include <sfx2/tbxctrl.hxx>
      29             : #include <sfx2/stbitem.hxx>
      30             : #include <sfx2/mnuitem.hxx>
      31             : #include <sfx2/childwin.hxx>
      32             : #include <sfx2/mnumgr.hxx>
      33             : #include <sfx2/docfac.hxx>
      34             : #include <sfx2/objface.hxx>
      35             : #include <sfx2/viewfrm.hxx>
      36             : #include <svl/intitem.hxx>
      37             : #include <sfx2/taskpane.hxx>
      38             : #include <tools/diagnose_ex.h>
      39             : #include <rtl/strbuf.hxx>
      40             : #include <sal/log.hxx>
      41             : 
      42             : #define SfxModule
      43             : #include "sfxslots.hxx"
      44             : 
      45             : static SfxModuleArr_Impl* pModules=0;
      46             : 
      47             : class SfxModule_Impl
      48             : {
      49             : public:
      50             : 
      51             :     SfxSlotPool*                pSlotPool;
      52             :     SfxTbxCtrlFactArr_Impl*     pTbxCtrlFac;
      53             :     SfxStbCtrlFactArr_Impl*     pStbCtrlFac;
      54             :     SfxMenuCtrlFactArr_Impl*    pMenuCtrlFac;
      55             :     SfxChildWinFactArr_Impl*    pFactArr;
      56             :     ImageList*                  pImgListSmall;
      57             :     ImageList*                  pImgListBig;
      58             : 
      59             :                                 SfxModule_Impl();
      60             :                                 ~SfxModule_Impl();
      61             :     ImageList*                  GetImageList( ResMgr* pResMgr, bool bBig );
      62             : };
      63             : 
      64         224 : SfxModule_Impl::SfxModule_Impl()
      65         224 :  : pSlotPool(0), pTbxCtrlFac(0), pStbCtrlFac(0), pMenuCtrlFac(0), pFactArr(0), pImgListSmall(0), pImgListBig(0)
      66             : {
      67         224 : }
      68             : 
      69          82 : SfxModule_Impl::~SfxModule_Impl()
      70             : {
      71          82 :     delete pSlotPool;
      72          82 :     delete pTbxCtrlFac;
      73          82 :     delete pStbCtrlFac;
      74          82 :     delete pMenuCtrlFac;
      75          82 :     delete pFactArr;
      76          82 :     delete pImgListSmall;
      77          82 :     delete pImgListBig;
      78          82 : }
      79             : 
      80          58 : ImageList* SfxModule_Impl::GetImageList( ResMgr* pResMgr, bool bBig )
      81             : {
      82          58 :     ImageList*& rpList = bBig ? pImgListBig : pImgListSmall;
      83          58 :     if ( !rpList )
      84             :     {
      85          58 :         ResId aResId( bBig ? ( RID_DEFAULTIMAGELIST_LC ) : ( RID_DEFAULTIMAGELIST_SC ), *pResMgr );
      86             : 
      87          58 :         aResId.SetRT( RSC_IMAGELIST );
      88             : 
      89             :         DBG_ASSERT( pResMgr->IsAvailable(aResId), "No default ImageList!" );
      90             : 
      91          58 :         if ( pResMgr->IsAvailable(aResId) )
      92          58 :             rpList = new ImageList( aResId );
      93             :         else
      94           0 :             rpList = new ImageList();
      95             :     }
      96             : 
      97          58 :     return rpList; }
      98             : 
      99      105721 : TYPEINIT1(SfxModule, SfxShell);
     100             : 
     101         754 : SFX_IMPL_INTERFACE(SfxModule, SfxShell, SfxResId(0))
     102             : 
     103         303 : void SfxModule::InitInterface_Impl()
     104             : {
     105         303 : }
     106             : 
     107      120102 : ResMgr* SfxModule::GetResMgr()
     108             : {
     109      120102 :     return pResMgr;
     110             : }
     111             : 
     112         224 : SfxModule::SfxModule( ResMgr* pMgrP, bool bDummyP,
     113             :                       SfxObjectFactory* pFactoryP, ... )
     114         224 :     : pResMgr( pMgrP ), bDummy( bDummyP ), pImpl(0L)
     115             : {
     116         224 :     Construct_Impl();
     117             :     va_list pVarArgs;
     118         224 :     va_start( pVarArgs, pFactoryP );
     119        1008 :     for ( SfxObjectFactory *pArg = pFactoryP; pArg;
     120         524 :          pArg = va_arg( pVarArgs, SfxObjectFactory* ) )
     121         436 :         pArg->SetModule_Impl( this );
     122         224 :     va_end(pVarArgs);
     123         224 : }
     124             : 
     125         224 : void SfxModule::Construct_Impl()
     126             : {
     127         224 :     if( !bDummy )
     128             :     {
     129         224 :         SfxApplication *pApp = SfxGetpApp();
     130         224 :         SfxModuleArr_Impl& rArr = GetModules_Impl();
     131         224 :         SfxModule* pPtr = (SfxModule*)this;
     132         224 :         rArr.push_back( pPtr );
     133         224 :         pImpl = new SfxModule_Impl;
     134         224 :         pImpl->pSlotPool = new SfxSlotPool( &pApp->GetAppSlotPool_Impl(), pResMgr );
     135             : 
     136         224 :         pImpl->pTbxCtrlFac=0;
     137         224 :         pImpl->pStbCtrlFac=0;
     138         224 :         pImpl->pMenuCtrlFac=0;
     139         224 :         pImpl->pFactArr=0;
     140         224 :         pImpl->pImgListSmall=0;
     141         224 :         pImpl->pImgListBig=0;
     142             : 
     143         224 :         SetPool( &pApp->GetPool() );
     144             :     }
     145         224 : }
     146             : 
     147             : 
     148             : 
     149         164 : SfxModule::~SfxModule()
     150             : {
     151          82 :     if( !bDummy )
     152             :     {
     153          82 :         if ( SfxGetpApp()->Get_Impl() )
     154             :         {
     155             :             // The module will be destroyed before the Deinitialize,
     156             :             // so remove from the array
     157          82 :             SfxModuleArr_Impl& rArr = GetModules_Impl();
     158         164 :             for( sal_uInt16 nPos = rArr.size(); nPos--; )
     159             :             {
     160          82 :                 if( rArr[ nPos ] == this )
     161             :                 {
     162          82 :                     rArr.erase( rArr.begin() + nPos );
     163          82 :                     break;
     164             :                 }
     165             :             }
     166             : 
     167          82 :             delete pImpl;
     168             :         }
     169             : 
     170          82 :         delete pResMgr;
     171             :     }
     172          82 : }
     173             : 
     174             : 
     175             : 
     176     1093636 : SfxSlotPool* SfxModule::GetSlotPool() const
     177             : {
     178     1093636 :     return pImpl->pSlotPool;
     179             : }
     180             : 
     181             : 
     182             : 
     183        5252 : void SfxModule::RegisterChildWindow(SfxChildWinFactory *pFact)
     184             : {
     185             :     DBG_ASSERT( pImpl, "No real Module!" );
     186             : 
     187        5252 :     if (!pImpl->pFactArr)
     188         224 :         pImpl->pFactArr = new SfxChildWinFactArr_Impl;
     189             : 
     190       81564 :     for (sal_uInt16 nFactory=0; nFactory<pImpl->pFactArr->size(); ++nFactory)
     191             :     {
     192       76312 :         if (pFact->nId ==  (*pImpl->pFactArr)[nFactory].nId)
     193             :         {
     194           0 :             pImpl->pFactArr->erase( pImpl->pFactArr->begin() + nFactory );
     195             :             SAL_WARN("sfx.appl", "ChildWindow registered multiple times!");
     196        5252 :             return;
     197             :         }
     198             :     }
     199             : 
     200        5252 :     pImpl->pFactArr->push_back( pFact );
     201             : }
     202             : 
     203             : 
     204             : 
     205       10924 : void SfxModule::RegisterToolBoxControl( SfxTbxCtrlFactory *pFact )
     206             : {
     207       10924 :     if (!pImpl->pTbxCtrlFac)
     208         224 :         pImpl->pTbxCtrlFac = new SfxTbxCtrlFactArr_Impl;
     209             : 
     210             : #ifdef DBG_UTIL
     211             :     for ( sal_uInt16 n=0; n<pImpl->pTbxCtrlFac->size(); n++ )
     212             :     {
     213             :         SfxTbxCtrlFactory *pF = &(*pImpl->pTbxCtrlFac)[n];
     214             :         if ( pF->nTypeId && pF->nTypeId == pFact->nTypeId &&
     215             :             (pF->nSlotId == pFact->nSlotId || pF->nSlotId == 0) )
     216             :         {
     217             :             DBG_WARNING("TbxController-Registering is not clearly defined!");
     218             :         }
     219             :     }
     220             : #endif
     221             : 
     222       10924 :     pImpl->pTbxCtrlFac->push_back( pFact );
     223       10924 : }
     224             : 
     225             : 
     226             : 
     227        1872 : void SfxModule::RegisterStatusBarControl( SfxStbCtrlFactory *pFact )
     228             : {
     229        1872 :     if (!pImpl->pStbCtrlFac)
     230         224 :         pImpl->pStbCtrlFac = new SfxStbCtrlFactArr_Impl;
     231             : 
     232             : #ifdef DBG_UTIL
     233             :     for ( sal_uInt16 n=0; n<pImpl->pStbCtrlFac->size(); n++ )
     234             :     {
     235             :         SfxStbCtrlFactory *pF = &(*pImpl->pStbCtrlFac)[n];
     236             :         if ( pF->nTypeId && pF->nTypeId == pFact->nTypeId &&
     237             :             (pF->nSlotId == pFact->nSlotId || pF->nSlotId == 0) )
     238             :         {
     239             :             DBG_WARNING("TbxController-Registering is not clearly defined!");
     240             :         }
     241             :     }
     242             : #endif
     243             : 
     244        1872 :     pImpl->pStbCtrlFac->push_back( pFact );
     245        1872 : }
     246             : 
     247             : 
     248             : 
     249         596 : void SfxModule::RegisterMenuControl( SfxMenuCtrlFactory *pFact )
     250             : {
     251         596 :     if (!pImpl->pMenuCtrlFac)
     252         200 :         pImpl->pMenuCtrlFac = new SfxMenuCtrlFactArr_Impl;
     253             : 
     254             : #ifdef DBG_UTIL
     255             :     for ( sal_uInt16 n=0; n<pImpl->pMenuCtrlFac->size(); n++ )
     256             :     {
     257             :         SfxMenuCtrlFactory *pF = &(*pImpl->pMenuCtrlFac)[n];
     258             :         if ( pF->nTypeId && pF->nTypeId == pFact->nTypeId &&
     259             :             (pF->nSlotId == pFact->nSlotId || pF->nSlotId == 0) )
     260             :         {
     261             :             DBG_WARNING("MenuController-Registering is not clearly defined!");
     262             :         }
     263             :     }
     264             : #endif
     265             : 
     266         596 :     pImpl->pMenuCtrlFac->push_back( pFact );
     267         596 : }
     268             : 
     269             : 
     270             : 
     271      109908 : SfxTbxCtrlFactArr_Impl*  SfxModule::GetTbxCtrlFactories_Impl() const
     272             : {
     273      109908 :     return pImpl->pTbxCtrlFac;
     274             : }
     275             : 
     276             : 
     277             : 
     278       14960 : SfxStbCtrlFactArr_Impl*  SfxModule::GetStbCtrlFactories_Impl() const
     279             : {
     280       14960 :     return pImpl->pStbCtrlFac;
     281             : }
     282             : 
     283             : 
     284             : 
     285           0 : SfxMenuCtrlFactArr_Impl* SfxModule::GetMenuCtrlFactories_Impl() const
     286             : {
     287           0 :     return pImpl->pMenuCtrlFac;
     288             : }
     289             : 
     290             : 
     291             : 
     292       97458 : SfxChildWinFactArr_Impl* SfxModule::GetChildWinFactories_Impl() const
     293             : {
     294       97458 :     return pImpl->pFactArr;
     295             : }
     296             : 
     297          58 : ImageList* SfxModule::GetImageList_Impl( bool bBig )
     298             : {
     299          58 :     return pImpl->GetImageList( pResMgr, bBig );
     300             : }
     301             : 
     302           0 : SfxTabPage*     SfxModule::CreateTabPage( sal_uInt16, vcl::Window*, const SfxItemSet& )
     303             : {
     304           0 :     return NULL;
     305             : }
     306             : 
     307         306 : SfxModuleArr_Impl& SfxModule::GetModules_Impl()
     308             : {
     309         306 :     if( !pModules )
     310         174 :         pModules = new SfxModuleArr_Impl;
     311         306 :     return *pModules;
     312             : };
     313             : 
     314         168 : void SfxModule::DestroyModules_Impl()
     315             : {
     316         168 :     if ( pModules )
     317             :     {
     318          64 :         SfxModuleArr_Impl& rModules = *pModules;
     319         210 :         for( sal_uInt16 nPos = rModules.size(); nPos--; )
     320             :         {
     321          82 :             SfxModule* pMod = rModules[nPos];
     322          82 :             delete pMod;
     323             :         }
     324          64 :         delete pModules, pModules = 0;
     325             :     }
     326         168 : }
     327             : 
     328           0 : void SfxModule::Invalidate( sal_uInt16 nId )
     329             : {
     330           0 :     for( SfxViewFrame* pFrame = SfxViewFrame::GetFirst(); pFrame; pFrame = SfxViewFrame::GetNext( *pFrame ) )
     331           0 :         if ( pFrame->GetObjectShell()->GetModule() == this )
     332           0 :             Invalidate_Impl( pFrame->GetBindings(), nId );
     333           0 : }
     334             : 
     335       24061 : bool SfxModule::IsChildWindowAvailable( const sal_uInt16 i_nId, const SfxViewFrame* i_pViewFrame ) const
     336             : {
     337       24061 :     if ( i_nId != SID_TASKPANE )
     338             :         // by default, assume it is
     339       24061 :         return true;
     340             : 
     341           0 :     const SfxViewFrame* pViewFrame = i_pViewFrame ? i_pViewFrame : GetFrame();
     342           0 :     ENSURE_OR_RETURN( pViewFrame, "SfxModule::IsChildWindowAvailable: no frame to ask for the module identifier!", false );
     343           0 :     return ::sfx2::ModuleTaskPane::ModuleHasToolPanels( pViewFrame->GetFrame().GetFrameInterface() );
     344             : }
     345             : 
     346      695912 : SfxModule* SfxModule::GetActiveModule( SfxViewFrame* pFrame )
     347             : {
     348      695912 :     if ( !pFrame )
     349      108000 :         pFrame = SfxViewFrame::Current();
     350      695912 :     SfxObjectShell* pSh = 0;
     351      695912 :     if( pFrame )
     352      600762 :         pSh = pFrame->GetObjectShell();
     353      695912 :     return pSh ? pSh->GetModule() : 0;
     354             : }
     355             : 
     356         800 : FieldUnit SfxModule::GetModuleFieldUnit( ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > const & i_frame )
     357             : {
     358         800 :     ENSURE_OR_RETURN( i_frame.is(), "SfxModule::GetModuleFieldUnit: invalid frame!", FUNIT_100TH_MM );
     359             : 
     360             :     // find SfxViewFrame for the given XFrame
     361         800 :     SfxViewFrame* pViewFrame = SfxViewFrame::GetFirst();
     362        1654 :     while ( pViewFrame != NULL )
     363             :     {
     364         854 :         if ( pViewFrame->GetFrame().GetFrameInterface() == i_frame )
     365         800 :             break;
     366          54 :         pViewFrame = SfxViewFrame::GetNext( *pViewFrame );
     367             :     }
     368         800 :     ENSURE_OR_RETURN( pViewFrame != NULL, "SfxModule::GetModuleFieldUnit: unable to find an SfxViewFrame for the given XFrame", FUNIT_100TH_MM );
     369             : 
     370             :     // find the module
     371         800 :     SfxModule const * pModule = GetActiveModule( pViewFrame );
     372         800 :     ENSURE_OR_RETURN( pModule != NULL, "SfxModule::GetModuleFieldUnit: no SfxModule for the given frame!", FUNIT_100TH_MM );
     373         800 :     return pModule->GetFieldUnit();
     374             : }
     375             : 
     376         742 : FieldUnit SfxModule::GetCurrentFieldUnit()
     377             : {
     378         742 :     FieldUnit eUnit = FUNIT_INCH;
     379         742 :     SfxModule* pModule = GetActiveModule();
     380         742 :     if ( pModule )
     381             :     {
     382         742 :         const SfxPoolItem* pItem = pModule->GetItem( SID_ATTR_METRIC );
     383         742 :         if ( pItem )
     384           0 :             eUnit = (FieldUnit) static_cast<const SfxUInt16Item*>(pItem)->GetValue();
     385             :     }
     386             :     else
     387             :         SAL_WARN( "sfx.appl", "GetModuleFieldUnit(): no module found" );
     388         742 :     return eUnit;
     389             : }
     390             : 
     391         800 : FieldUnit SfxModule::GetFieldUnit() const
     392             : {
     393         800 :     FieldUnit eUnit = FUNIT_INCH;
     394         800 :     const SfxPoolItem* pItem = GetItem( SID_ATTR_METRIC );
     395         800 :     if ( pItem )
     396         800 :         eUnit = (FieldUnit) static_cast<const SfxUInt16Item*>(pItem)->GetValue();
     397         800 :     return eUnit;
     398         951 : }
     399             : 
     400             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10