LCOV - code coverage report
Current view: top level - libreoffice/svx/source/xoutdev - xtable.cxx (source / functions) Hit Total Coverage
Test: libreoffice_filtered.info Lines: 70 143 49.0 %
Date: 2012-12-27 Functions: 13 22 59.1 %
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 <svx/XPropertyTable.hxx>
      22             : #include "xmlxtexp.hxx"
      23             : #include "xmlxtimp.hxx"
      24             : #include <tools/urlobj.hxx>
      25             : #include <svx/xtable.hxx>
      26             : #include <svx/xpool.hxx>
      27             : 
      28             : using namespace com::sun::star;
      29             : 
      30             : // Helper for other sub-classes to have easy-to-read constructors
      31        3433 : Color RGB_Color( ColorData nColorName )
      32             : {
      33        3433 :     Color aColor( nColorName );
      34        3433 :     Color aRGBColor( aColor.GetRed(), aColor.GetGreen(), aColor.GetBlue() );
      35        3433 :     return aRGBColor;
      36             : }
      37             : 
      38             : // static int count = 0;
      39             : 
      40        1892 : XPropertyList::XPropertyList(
      41             :     XPropertyListType type,
      42             :     const String& rPath,
      43             :     XOutdevItemPool* pInPool
      44             : ) : eType           ( type ),
      45             :     aName           ( RTL_CONSTASCII_USTRINGPARAM( "standard" ) ),
      46             :     aPath           ( rPath ),
      47             :     pXPool          ( pInPool ),
      48             :     pBmpList        ( NULL ),
      49             :     bListDirty      ( true ),
      50             :     bBitmapsDirty   ( true ),
      51             :     bOwnPool        ( false ),
      52        1892 :     bEmbedInDocument( false )
      53             : {
      54        1892 :     if( !pXPool )
      55             :     {
      56          14 :         bOwnPool = true;
      57          14 :         pXPool = new XOutdevItemPool;
      58             :         DBG_ASSERT( pXPool, "XOutPool konnte nicht erzeugt werden!" );
      59             :     }
      60             : //    fprintf (stderr, "Create type %d count %d\n", (int)eType, count++);
      61        1892 : }
      62             : 
      63        1946 : XPropertyList::~XPropertyList()
      64             : {
      65             : //    fprintf (stderr, "Destroy type %d count %d\n", (int)eType, --count);
      66         982 :     for( size_t i = 0, n = aList.size(); i < n; ++i )
      67           9 :         delete aList[ i ];
      68             : 
      69         973 :     aList.clear();
      70             : 
      71         973 :     if( pBmpList )
      72             :     {
      73         728 :         for ( size_t i = 0, n = pBmpList->size(); i < n; ++i ) {
      74           0 :             delete (*pBmpList)[ i ];
      75             :         }
      76         728 :         pBmpList->clear();
      77         728 :         delete pBmpList;
      78         728 :         pBmpList = NULL;
      79             :     }
      80             : 
      81         973 :     if( bOwnPool && pXPool )
      82           2 :         SfxItemPool::Free(pXPool);
      83         973 : }
      84             : 
      85           6 : long XPropertyList::Count() const
      86             : {
      87           6 :     if( bListDirty )
      88             :     {
      89           2 :         if( !( (XPropertyList*) this )->Load() )
      90           2 :             ( (XPropertyList*) this )->Create();
      91             :     }
      92           6 :     return( aList.size() );
      93             : }
      94             : 
      95          27 : XPropertyEntry* XPropertyList::Get( long nIndex, sal_uInt16 /*nDummy*/) const
      96             : {
      97          27 :     if( bListDirty )
      98             :     {
      99           0 :         if( !( (XPropertyList*) this )->Load() )
     100           0 :             ( (XPropertyList*) this )->Create();
     101             :     }
     102          27 :     return ( (size_t)nIndex < aList.size() ) ? aList[ nIndex ] : NULL;
     103             : }
     104             : 
     105           0 : long XPropertyList::Get(const XubString& rName)
     106             : {
     107           0 :     if( bListDirty )
     108             :     {
     109           0 :         if( !Load() )
     110           0 :             Create();
     111             :     }
     112             : 
     113           0 :     for( long i = 0, n = aList.size(); i < n; ++i ) {
     114           0 :         if ( aList[ i ]->GetName() == rName ) {
     115           0 :             return i;
     116             :         }
     117             :     }
     118           0 :     return -1;
     119             : }
     120             : 
     121           0 : Bitmap* XPropertyList::GetBitmap( long nIndex ) const
     122             : {
     123           0 :     if( pBmpList )
     124             :     {
     125           0 :         if( bBitmapsDirty )
     126             :         {
     127           0 :             ( (XPropertyList*) this )->bBitmapsDirty = false;
     128           0 :             ( (XPropertyList*) this )->CreateBitmapsForUI();
     129             :         }
     130           0 :         if( (size_t)nIndex < pBmpList->size() )
     131           0 :             return (*pBmpList)[ nIndex ];
     132             :     }
     133           0 :     return NULL;
     134             : }
     135             : 
     136           9 : void XPropertyList::Insert( XPropertyEntry* pEntry, long nIndex )
     137             : {
     138           9 :     if ( (size_t)nIndex < aList.size() ) {
     139           0 :         aList.insert( aList.begin() + nIndex, pEntry );
     140             :     } else {
     141           9 :         aList.push_back( pEntry );
     142             :     }
     143             : 
     144           9 :     if( pBmpList && !bBitmapsDirty )
     145             :     {
     146             :         Bitmap* pBmp = CreateBitmapForUI(
     147           0 :             (size_t)nIndex < aList.size() ? nIndex : aList.size() - 1
     148           0 :         );
     149           0 :         if ( (size_t)nIndex < pBmpList->size() ) {
     150           0 :             pBmpList->insert( pBmpList->begin() + nIndex, pBmp );
     151             :         } else {
     152           0 :             pBmpList->push_back( pBmp );
     153             :         }
     154             :     }
     155           9 : }
     156             : 
     157           0 : XPropertyEntry* XPropertyList::Replace( XPropertyEntry* pEntry, long nIndex )
     158             : {
     159           0 :     XPropertyEntry* pOldEntry = (size_t)nIndex < aList.size() ? aList[ nIndex ] : NULL;
     160           0 :     if ( pOldEntry ) {
     161           0 :         aList[ nIndex ] = pEntry;
     162             :     }
     163             : 
     164           0 :     if( pBmpList && !bBitmapsDirty )
     165             :     {
     166           0 :         Bitmap* pBmp = CreateBitmapForUI( (sal_uIntPtr) nIndex );
     167           0 :         if ( (size_t)nIndex < pBmpList->size() )
     168             :         {
     169           0 :             delete (*pBmpList)[ nIndex ];
     170           0 :             (*pBmpList)[ nIndex ] = pBmp;
     171             :         }
     172             :         else {
     173           0 :             pBmpList->push_back( pBmp );
     174             :         }
     175             :     }
     176           0 :     return pOldEntry;
     177             : }
     178             : 
     179           0 : XPropertyEntry* XPropertyList::Remove( long nIndex )
     180             : {
     181           0 :     if( pBmpList && !bBitmapsDirty )
     182             :     {
     183           0 :         if ( (size_t)nIndex < pBmpList->size() )
     184             :         {
     185           0 :             delete (*pBmpList)[ nIndex ];
     186           0 :             pBmpList->erase( pBmpList->begin() + nIndex );
     187             :         }
     188             :     }
     189             : 
     190           0 :     XPropertyEntry* pEntry = NULL;
     191           0 :     if ( (size_t)nIndex < aList.size() ) {
     192           0 :         pEntry = aList[ nIndex ];
     193           0 :         aList.erase( aList.begin() + nIndex );
     194             :     }
     195           0 :     return pEntry;
     196             : }
     197             : 
     198          12 : void XPropertyList::SetName( const String& rString )
     199             : {
     200          12 :     if(rString.Len())
     201             :     {
     202          12 :         aName = rString;
     203             :     }
     204          12 : }
     205             : 
     206           2 : bool XPropertyList::Load()
     207             : {
     208           2 :     if( bListDirty )
     209             :     {
     210           2 :         bListDirty = false;
     211             : 
     212           2 :         INetURLObject aURL( aPath );
     213             : 
     214           2 :         if( INET_PROT_NOT_VALID == aURL.GetProtocol() )
     215             :         {
     216             :             DBG_ASSERT( !aPath.Len(), "invalid URL" );
     217           0 :             return false;
     218             :         }
     219             : 
     220           2 :         aURL.Append( aName );
     221             : 
     222           2 :         if( aURL.getExtension().isEmpty() )
     223           2 :             aURL.setExtension( GetDefaultExt() );
     224             : 
     225             :         return SvxXMLXTableImport::load( aURL.GetMainURL( INetURLObject::NO_DECODE ),
     226             :                                          uno::Reference < embed::XStorage >(),
     227           2 :                                          createInstance(), NULL );
     228             : 
     229             :     }
     230           0 :     return false;
     231             : }
     232             : 
     233          12 : bool XPropertyList::LoadFrom( const uno::Reference < embed::XStorage > &xStorage,
     234             :                                   const rtl::OUString &rURL )
     235             : {
     236          12 :     if( !bListDirty )
     237           0 :         return false;
     238          12 :     bListDirty = false;
     239          12 :     return SvxXMLXTableImport::load( rURL, xStorage, createInstance(), &bEmbedInDocument );
     240             : }
     241             : 
     242           0 : bool XPropertyList::Save()
     243             : {
     244           0 :     INetURLObject aURL( aPath );
     245             : 
     246           0 :     if( INET_PROT_NOT_VALID == aURL.GetProtocol() )
     247             :     {
     248             :         DBG_ASSERT( !aPath.Len(), "invalid URL" );
     249           0 :         return false;
     250             :     }
     251             : 
     252           0 :     aURL.Append( aName );
     253             : 
     254           0 :     if( aURL.getExtension().isEmpty() )
     255           0 :         aURL.setExtension( GetDefaultExt() );
     256             : 
     257             :     return SvxXMLXTableExportComponent::save( aURL.GetMainURL( INetURLObject::NO_DECODE ),
     258           0 :                                               createInstance(),
     259           0 :                                               uno::Reference< embed::XStorage >(), NULL );
     260             : }
     261             : 
     262           0 : bool XPropertyList::SaveTo( const uno::Reference< embed::XStorage > &xStorage,
     263             :                             const rtl::OUString &rURL, rtl::OUString *pOptName )
     264             : {
     265           0 :     return SvxXMLXTableExportComponent::save( rURL, createInstance(), xStorage, pOptName );
     266             : }
     267             : 
     268        1892 : XPropertyListRef XPropertyList::CreatePropertyList( XPropertyListType t,
     269             :                                                     const String& rPath,
     270             :                                                     XOutdevItemPool* pXPool )
     271             : {
     272        1892 :     XPropertyListRef pRet;
     273             : 
     274             : #define MAP(e,c) \
     275             :         case e: pRet = XPropertyListRef (new c( rPath, pXPool ) ); break
     276        1892 :     switch (t) {
     277          77 :         MAP( XCOLOR_LIST, XColorList );
     278         363 :         MAP( XLINE_END_LIST, XLineEndList );
     279         363 :         MAP( XDASH_LIST, XDashList );
     280         363 :         MAP( XHATCH_LIST, XHatchList );
     281         363 :         MAP( XGRADIENT_LIST, XGradientList );
     282         363 :         MAP( XBITMAP_LIST, XBitmapList );
     283             :     default:
     284             :         OSL_FAIL("unknown xproperty type");
     285           0 :         break;
     286             :     }
     287             : #undef MAP
     288             :     OSL_ASSERT( !pRet.is() || pRet->eType == t );
     289             : 
     290        1892 :     return pRet;
     291             : }
     292             : 
     293             : XPropertyListRef
     294           0 : XPropertyList::CreatePropertyListFromURL( XPropertyListType t,
     295             :                                           const rtl::OUString & rURLStr,
     296             :                                           XOutdevItemPool* pXPool )
     297             : {
     298           0 :     INetURLObject aURL( rURLStr );
     299           0 :     INetURLObject aPathURL( aURL );
     300             : 
     301           0 :     aPathURL.removeSegment();
     302           0 :     aPathURL.removeFinalSlash();
     303             : 
     304             :     XPropertyListRef pList = XPropertyList::CreatePropertyList(
     305           0 :         t, aPathURL.GetMainURL( INetURLObject::NO_DECODE ), pXPool );
     306           0 :     pList->SetName( aURL.getName() );
     307             : 
     308           0 :     return pList;
     309             : }
     310             : 
     311             : // catch people being silly with ref counting ...
     312             : 
     313        1892 : void* XPropertyList::operator new (size_t nCount)
     314             : {
     315        1892 :     return rtl_allocateMemory( nCount );
     316             : }
     317             : 
     318         973 : void XPropertyList::operator delete(void *pPtr)
     319             : {
     320         973 :     return rtl_freeMemory( pPtr );
     321             : }
     322             : 
     323             : static struct {
     324             :     XPropertyListType t;
     325             :     const char *pExt;
     326             : } pExtnMap[] = {
     327             :     { XCOLOR_LIST,    "soc" },
     328             :     { XLINE_END_LIST, "soe" },
     329             :     { XDASH_LIST,     "sod" },
     330             :     { XHATCH_LIST,    "soh" },
     331             :     { XGRADIENT_LIST, "sog" },
     332             :     { XBITMAP_LIST,   "sob" }
     333             : };
     334             : 
     335           2 : rtl::OUString XPropertyList::GetDefaultExt( XPropertyListType t )
     336             : {
     337           8 :     for (size_t i = 0; i < SAL_N_ELEMENTS (pExtnMap); i++)
     338             :     {
     339           8 :         if( pExtnMap[i].t == t )
     340           2 :             return rtl::OUString::createFromAscii( pExtnMap[ i ].pExt );
     341             :     }
     342           0 :     return rtl::OUString();
     343             : }
     344             : 
     345           0 : rtl::OUString XPropertyList::GetDefaultExtFilter( XPropertyListType t )
     346             : {
     347           0 :     rtl::OUString aFilter( RTL_CONSTASCII_USTRINGPARAM( "*." ) );
     348           0 :     return aFilter + GetDefaultExt( t );
     349             : }
     350             : 
     351             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10