LCOV - code coverage report
Current view: top level - sw/source/core/swg - swblocks.cxx (source / functions) Hit Total Coverage
Test: commit e02a6cb2c3e2b23b203b422e4e0680877f232636 Lines: 0 329 0.0 %
Date: 2014-04-14 Functions: 0 52 0.0 %
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 <algorithm>
      21             : 
      22             : #include <sfx2/docfilt.hxx>
      23             : #include <sot/storage.hxx>
      24             : #include <tools/urlobj.hxx>
      25             : #include <svl/fstathelper.hxx>
      26             : #include <svl/macitem.hxx>
      27             : #include <unotools/charclass.hxx>
      28             : #include <frmfmt.hxx>
      29             : #include <doc.hxx>
      30             : #include <docary.hxx>
      31             : #include <pam.hxx>
      32             : #include <shellio.hxx>
      33             : #include <swblocks.hxx>
      34             : #include <ndtxt.hxx>
      35             : #include <mdiexp.hxx>
      36             : #include <SwXMLTextBlocks.hxx>
      37             : #include <docsh.hxx>
      38             : #include <swunohelper.hxx>
      39             : 
      40             : #include <statstr.hrc>
      41             : #include <swerror.h>
      42             : 
      43             : // Hash-Code errechnen (muss nicht eindeutig sein)
      44             : 
      45           0 : sal_uInt16 SwImpBlocks::Hash( const OUString& r )
      46             : {
      47           0 :     sal_uInt16 n = 0;
      48             :     // std::min requires an explicit cast to sal_Int32 on 32bit platforms
      49           0 :     const sal_Int32 nLen = std::min(r.getLength(), static_cast<sal_Int32>(8));
      50           0 :     for (sal_Int32 i=0; i<nLen; ++i)
      51             :     {
      52           0 :         n = ( n << 1 ) + r[i];
      53             :     }
      54           0 :     return n;
      55             : }
      56             : 
      57           0 : SwBlockName::SwBlockName( const OUString& rShort, const OUString& rLong )
      58             :     : aShort( rShort ), aLong( rLong ), aPackageName (rShort),
      59           0 :     bIsOnlyTxtFlagInit( sal_False ), bIsOnlyTxt( sal_False ), bInPutMuchBlocks(false)
      60             : {
      61           0 :     nHashS = SwImpBlocks::Hash( rShort );
      62           0 :     nHashL = SwImpBlocks::Hash( rLong );
      63           0 : }
      64             : 
      65           0 : SwBlockName::SwBlockName( const OUString& rShort, const OUString& rLong, const OUString& rPackageName)
      66             :     : aShort( rShort ), aLong( rLong ), aPackageName (rPackageName),
      67           0 :     bIsOnlyTxtFlagInit( sal_False ), bIsOnlyTxt( sal_False ), bInPutMuchBlocks(false)
      68             : {
      69           0 :     nHashS = SwImpBlocks::Hash( rShort );
      70           0 :     nHashL = SwImpBlocks::Hash( rLong );
      71           0 : }
      72             : 
      73             : // Ist die angegebene Datei ein Storage oder gibt es sie nicht?
      74             : 
      75           0 : short SwImpBlocks::GetFileType( const OUString& rFile )
      76             : {
      77           0 :     if( !FStatHelper::IsDocument( rFile ) )
      78           0 :         return SWBLK_NO_FILE;
      79           0 :     if( SwXMLTextBlocks::IsFileUCBStorage( rFile ) )
      80           0 :         return SWBLK_XML;
      81           0 :     if( SvStorage::IsStorageFile( rFile ) )
      82           0 :         return SWBLK_SW3;
      83             :     //otherwise return NONE
      84           0 :     return SWBLK_NONE;
      85             : }
      86             : 
      87           0 : SwImpBlocks::SwImpBlocks( const OUString& rFile, sal_Bool )
      88             :     : aFile( rFile ),
      89             :     aDateModified( Date::EMPTY ),
      90             :     aTimeModified( Time::EMPTY ),
      91             :     pDoc( 0 ), nCur( (sal_uInt16)-1 ),
      92             :     bReadOnly( sal_True ), bInPutMuchBlocks( sal_False ),
      93           0 :     bInfoChanged(false)
      94             : {
      95             :     FStatHelper::GetModifiedDateTimeOfFile( rFile,
      96           0 :                                             &aDateModified, &aTimeModified );
      97           0 :     INetURLObject aObj(rFile);
      98           0 :     aObj.setExtension( OUString() );
      99           0 :     aName = aObj.GetBase();
     100           0 : }
     101             : 
     102           0 : SwImpBlocks::~SwImpBlocks()
     103             : {
     104           0 :     aNames.DeleteAndDestroyAll();
     105           0 : }
     106             : 
     107             : // Loeschen des Inhaltes des Dokuments
     108           0 : void SwImpBlocks::ClearDoc()
     109             : {
     110           0 :     pDoc->ClearDoc();
     111           0 : }
     112             : 
     113             : // Erzeugen eines PaMs, der das ganze Dokument umfasst
     114           0 : SwPaM* SwImpBlocks::MakePaM()
     115             : {
     116           0 :     SwPaM* pPam = new SwPaM( pDoc->GetNodes().GetEndOfContent() );
     117           0 :     pPam->Move( fnMoveBackward, fnGoDoc );
     118           0 :     pPam->SetMark();
     119           0 :     pPam->Move( fnMoveForward, fnGoDoc );
     120           0 :     pPam->Exchange();
     121           0 :     return pPam;
     122             : }
     123             : 
     124           0 : sal_uInt16 SwImpBlocks::GetCount() const
     125             : {
     126           0 :     return aNames.size();
     127             : }
     128             : 
     129             : // Case Insensitive
     130           0 : sal_uInt16 SwImpBlocks::GetIndex( const OUString& rShort ) const
     131             : {
     132           0 :     const OUString s( GetAppCharClass().uppercase( rShort ) );
     133           0 :     const sal_uInt16 nHash = Hash( s );
     134           0 :     for( sal_uInt16 i = 0; i < aNames.size(); i++ )
     135             :     {
     136           0 :         const SwBlockName* pName = aNames[ i ];
     137           0 :         if( pName->nHashS == nHash
     138           0 :          && pName->aShort == s )
     139           0 :             return i;
     140             :     }
     141           0 :     return (sal_uInt16) -1;
     142             : }
     143             : 
     144           0 : sal_uInt16 SwImpBlocks::GetLongIndex( const OUString& rLong ) const
     145             : {
     146           0 :     sal_uInt16 nHash = Hash( rLong );
     147           0 :     for( sal_uInt16 i = 0; i < aNames.size(); i++ )
     148             :     {
     149           0 :         const SwBlockName* pName = aNames[ i ];
     150           0 :         if( pName->nHashL == nHash
     151           0 :          && pName->aLong == rLong )
     152           0 :             return i;
     153             :     }
     154           0 :     return (sal_uInt16) -1;
     155             : }
     156             : 
     157           0 : OUString SwImpBlocks::GetShortName( sal_uInt16 n ) const
     158             : {
     159           0 :     if( n < aNames.size() )
     160           0 :         return aNames[n]->aShort;
     161           0 :     return OUString();
     162             : }
     163             : 
     164           0 : OUString SwImpBlocks::GetLongName( sal_uInt16 n ) const
     165             : {
     166           0 :     if( n < aNames.size() )
     167           0 :         return aNames[n]->aLong;
     168           0 :     return OUString();
     169             : }
     170             : 
     171           0 : OUString SwImpBlocks::GetPackageName( sal_uInt16 n ) const
     172             : {
     173           0 :     if( n < aNames.size() )
     174           0 :         return aNames[n]->aPackageName;
     175           0 :     return OUString();
     176             : }
     177             : 
     178           0 : void SwImpBlocks::AddName( const OUString& rShort, const OUString& rLong,
     179             :                             sal_Bool bOnlyTxt )
     180             : {
     181           0 :     sal_uInt16 nIdx = GetIndex( rShort );
     182           0 :     if( nIdx != (sal_uInt16) -1 )
     183             :     {
     184           0 :         delete aNames[nIdx];
     185           0 :         aNames.erase( aNames.begin() + nIdx );
     186             :     }
     187           0 :     SwBlockName* pNew = new SwBlockName( rShort, rLong );
     188           0 :     pNew->bIsOnlyTxtFlagInit = sal_True;
     189           0 :     pNew->bIsOnlyTxt = bOnlyTxt;
     190           0 :     aNames.insert( pNew );
     191           0 : }
     192             : 
     193           0 : sal_Bool SwImpBlocks::IsFileChanged() const
     194             : {
     195           0 :     Date aTempDateModified( aDateModified );
     196           0 :     Time aTempTimeModified( aTimeModified );
     197             :     return FStatHelper::GetModifiedDateTimeOfFile( aFile,
     198           0 :                             &aTempDateModified, &aTempTimeModified ) &&
     199           0 :           ( aDateModified != aTempDateModified ||
     200           0 :             aTimeModified != aTempTimeModified );
     201             : }
     202             : 
     203           0 : void SwImpBlocks::Touch()
     204             : {
     205             :     FStatHelper::GetModifiedDateTimeOfFile( aFile,
     206           0 :                                             &aDateModified, &aTimeModified );
     207           0 : }
     208             : 
     209           0 : sal_Bool SwImpBlocks::IsOnlyTextBlock( const OUString& ) const
     210             : {
     211           0 :     return sal_False;
     212             : }
     213             : 
     214           0 : sal_uLong SwImpBlocks::GetMacroTable( sal_uInt16, SvxMacroTableDtor&, sal_Bool )
     215             : {
     216           0 :     return 0;
     217             : }
     218             : 
     219           0 : sal_uLong SwImpBlocks::SetMacroTable( sal_uInt16 ,
     220             :                                 const SvxMacroTableDtor& , sal_Bool )
     221             : {
     222           0 :     return 0;
     223             : }
     224             : 
     225           0 : sal_Bool SwImpBlocks::PutMuchEntries( sal_Bool )
     226             : {
     227           0 :     return sal_False;
     228             : }
     229             : 
     230           0 : SwTextBlocks::SwTextBlocks( const OUString& rFile )
     231           0 :     : pImp( 0 ), nErr( 0 )
     232             : {
     233           0 :     INetURLObject aObj(rFile);
     234           0 :     const OUString sFileName = aObj.GetMainURL( INetURLObject::NO_DECODE );
     235           0 :     switch( SwImpBlocks::GetFileType( rFile ) )
     236             :     {
     237           0 :     case SWBLK_XML:     pImp = new SwXMLTextBlocks( sFileName ); break;
     238           0 :     case SWBLK_NO_FILE: pImp = new SwXMLTextBlocks( sFileName ); break;
     239             :     }
     240           0 :     if( !pImp )
     241           0 :         nErr = ERR_SWG_FILE_FORMAT_ERROR;
     242           0 : }
     243             : 
     244           0 : SwTextBlocks::~SwTextBlocks()
     245             : {
     246           0 :     delete pImp;
     247           0 : }
     248             : 
     249           0 : OUString SwTextBlocks::GetName()
     250             : {
     251           0 :     return pImp ? pImp->aName : OUString();
     252             : }
     253             : 
     254           0 : void SwTextBlocks::SetName( const OUString& r )
     255             : {
     256           0 :     if( pImp )
     257           0 :         pImp->SetName( r );
     258           0 : }
     259             : 
     260           0 : sal_Bool SwTextBlocks::IsOld() const
     261             : {
     262           0 :     if (pImp)
     263             :     {
     264           0 :         short nType = pImp->GetFileType();
     265           0 :         if (SWBLK_SW3 == nType || SWBLK_SW2 == nType )
     266           0 :             return sal_True;
     267             :     }
     268           0 :     return sal_False;
     269             : }
     270             : 
     271           0 : sal_uInt16 SwTextBlocks::GetCount() const
     272             : {
     273           0 :     return pImp ? pImp->GetCount() : 0;
     274             : }
     275             : 
     276           0 : sal_uInt16 SwTextBlocks::GetIndex( const OUString& r ) const
     277             : {
     278           0 :     return pImp ? pImp->GetIndex( r ) : (sal_uInt16) -1;
     279             : }
     280             : 
     281           0 : sal_uInt16 SwTextBlocks::GetLongIndex( const OUString& r ) const
     282             : {
     283           0 :     return pImp ? (sal_uInt16)(pImp->GetLongIndex( r )) : (sal_uInt16) -1;
     284             : }
     285             : 
     286           0 : OUString SwTextBlocks::GetShortName( sal_uInt16 n ) const
     287             : {
     288           0 :     if( pImp )
     289           0 :         return pImp->GetShortName( n );
     290           0 :     return OUString();
     291             : }
     292             : 
     293           0 : OUString SwTextBlocks::GetLongName( sal_uInt16 n ) const
     294             : {
     295           0 :     if( pImp )
     296           0 :         return pImp->GetLongName( n );
     297           0 :     return OUString();
     298             : }
     299             : 
     300           0 : sal_Bool SwTextBlocks::Delete( sal_uInt16 n )
     301             : {
     302           0 :     if( pImp && !pImp->bInPutMuchBlocks )
     303             :     {
     304           0 :         if( pImp->IsFileChanged() )
     305           0 :             nErr = ERR_TXTBLOCK_NEWFILE_ERROR;
     306           0 :         else if( 0 == (nErr = pImp->OpenFile( sal_False ) ))
     307             :         {
     308           0 :             nErr = pImp->Delete( n );
     309           0 :             if( !nErr )
     310             :             {
     311           0 :                 delete pImp->aNames[n];
     312           0 :                 pImp->aNames.erase( pImp->aNames.begin() + n );
     313             :             }
     314           0 :             if( n == pImp->nCur )
     315           0 :                 pImp->nCur = (sal_uInt16) -1;
     316           0 :             if( !nErr )
     317           0 :                 nErr = pImp->MakeBlockList();
     318             :         }
     319           0 :         pImp->CloseFile();
     320           0 :         pImp->Touch();
     321             : 
     322           0 :         return sal_Bool( nErr == 0 );
     323             :     }
     324           0 :     return sal_False;
     325             : }
     326             : 
     327           0 : sal_uInt16 SwTextBlocks::Rename( sal_uInt16 n, const OUString* s, const OUString* l )
     328             : {
     329           0 :     sal_uInt16 nIdx = (sal_uInt16)-1;
     330           0 :     if( pImp && !pImp->bInPutMuchBlocks )
     331             :     {
     332           0 :         pImp->nCur = nIdx;
     333           0 :         OUString aNew;
     334           0 :         OUString aLong;
     335           0 :         if( s )
     336           0 :             aNew = aLong = *s;
     337           0 :         if( l )
     338           0 :             aLong = *l;
     339           0 :         if( aNew.isEmpty() )
     340             :         {
     341             :             OSL_ENSURE( !this, "Kein Kurzname in Rename angegeben" );
     342           0 :             nErr = ERR_SWG_INTERNAL_ERROR; return (sal_uInt16) -1;
     343             :         }
     344             : 
     345           0 :         if( pImp->IsFileChanged() )
     346           0 :             nErr = ERR_TXTBLOCK_NEWFILE_ERROR;
     347           0 :         else if( 0 == ( nErr = pImp->OpenFile( sal_False )))
     348             :         {
     349             :             // Vorher den neuen Eintrag in die Liste setzen!
     350           0 :             aNew = GetAppCharClass().uppercase( aNew );
     351           0 :              nErr = pImp->Rename( n, aNew, aLong );
     352           0 :             if( !nErr )
     353             :             {
     354           0 :                 sal_Bool bOnlyTxt = pImp->aNames[ n ]->bIsOnlyTxt;
     355           0 :                 delete pImp->aNames[n];
     356           0 :                 pImp->aNames.erase( pImp->aNames.begin() + n );
     357           0 :                 pImp->AddName( aNew, aLong, bOnlyTxt );
     358           0 :                 nErr = pImp->MakeBlockList();
     359             :             }
     360             :         }
     361           0 :         pImp->CloseFile();
     362           0 :         pImp->Touch();
     363           0 :         if( !nErr )
     364           0 :             nIdx = pImp->GetIndex( aNew );
     365             :     }
     366           0 :     return nIdx;
     367             : }
     368             : 
     369           0 : sal_uLong SwTextBlocks::CopyBlock( SwTextBlocks& rSource, OUString& rSrcShort,
     370             :                                 const OUString& rLong )
     371             : {
     372           0 :     bool bIsOld = false;
     373           0 :     if (rSource.pImp)
     374             :     {
     375           0 :         short nType = rSource.pImp->GetFileType();
     376           0 :         if (SWBLK_SW2 == nType || SWBLK_SW3 == nType )
     377           0 :             bIsOld = true;
     378             :     }
     379           0 :     if( bIsOld ) //rSource.IsOld() )
     380           0 :         nErr = ERR_SWG_OLD_GLOSSARY;
     381           0 :     else if( pImp->bInPutMuchBlocks )
     382           0 :         nErr = ERR_SWG_INTERNAL_ERROR;
     383             :     else
     384           0 :         nErr = pImp->CopyBlock(*rSource.pImp, rSrcShort, rLong);
     385           0 :     return nErr;
     386             : }
     387             : 
     388           0 : sal_Bool SwTextBlocks::BeginGetDoc( sal_uInt16 n )
     389             : {
     390           0 :     if( pImp && !pImp->bInPutMuchBlocks )
     391             :     {
     392             : // diese Optimierierung darf es nicht mehr geben. OLE-Objecte muessen auf
     393             : // ihre SubStorages zugreifem koennen!
     394             : //      if( n == pImp->nCur )
     395             : //          return sal_True;
     396             : 
     397           0 :         if( pImp->IsFileChanged() )
     398           0 :             nErr = ERR_TXTBLOCK_NEWFILE_ERROR;
     399           0 :         else if( 0 == ( nErr = pImp->OpenFile( sal_True )))
     400             :         {
     401           0 :             pImp->ClearDoc();
     402           0 :             nErr = pImp->GetDoc( n );
     403           0 :             if( nErr )
     404           0 :                 pImp->nCur = (sal_uInt16)-1;
     405             :             else
     406           0 :                 pImp->nCur = n;
     407             :         }
     408           0 :         return sal_Bool( nErr == 0 );
     409             :     }
     410           0 :     return sal_False;
     411             : }
     412             : 
     413           0 : void SwTextBlocks::EndGetDoc()
     414             : {
     415           0 :     if( pImp && !pImp->bInPutMuchBlocks )
     416           0 :         pImp->CloseFile();
     417           0 : }
     418             : 
     419           0 : sal_Bool SwTextBlocks::BeginPutDoc( const OUString& s, const OUString& l )
     420             : {
     421           0 :     if( pImp )
     422             :     {
     423           0 :         sal_Bool bOk = pImp->bInPutMuchBlocks;
     424           0 :         if( !bOk )
     425             :         {
     426           0 :             if( pImp->IsFileChanged() )
     427           0 :                 nErr = ERR_TXTBLOCK_NEWFILE_ERROR;
     428             :             else
     429           0 :                 nErr = pImp->OpenFile( sal_False );
     430           0 :             bOk = 0 == nErr;
     431             :         }
     432           0 :         if( bOk )
     433             :         {
     434           0 :             const OUString aNew = GetAppCharClass().uppercase(s);
     435           0 :             nErr = pImp->BeginPutDoc( aNew, l );
     436             :         }
     437           0 :         if( nErr )
     438           0 :             pImp->CloseFile();
     439             :     }
     440           0 :     return 0 == nErr;
     441             : }
     442             : 
     443           0 : sal_uInt16 SwTextBlocks::PutDoc()
     444             : {
     445           0 :     sal_uInt16 nIdx = (sal_uInt16)-1;
     446           0 :     if( pImp )
     447             :     {
     448           0 :         nErr = pImp->PutDoc();
     449           0 :         if( !nErr )
     450             :         {
     451           0 :             pImp->nCur = GetIndex( pImp->aShort );
     452           0 :             if( pImp->nCur != (sal_uInt16) -1 )
     453           0 :                 pImp->aNames[ pImp->nCur ]->aLong = pImp->aLong;
     454             :             else
     455             :             {
     456           0 :                 pImp->AddName( pImp->aShort, pImp->aLong );
     457           0 :                 pImp->nCur = pImp->GetIndex( pImp->aShort );
     458             :             }
     459           0 :             if( !pImp->bInPutMuchBlocks )
     460           0 :                 nErr = pImp->MakeBlockList();
     461             :         }
     462           0 :         if( !pImp->bInPutMuchBlocks )
     463             :         {
     464           0 :             pImp->CloseFile();
     465           0 :             pImp->Touch();
     466             :         }
     467           0 :         nIdx = pImp->nCur;
     468             :     }
     469           0 :     return nIdx;
     470             : }
     471             : 
     472           0 : sal_uInt16 SwTextBlocks::PutText( const OUString& rShort, const OUString& rName,
     473             :                                   const OUString& rTxt )
     474             : {
     475           0 :     sal_uInt16 nIdx = (sal_uInt16) -1;
     476           0 :     if( pImp )
     477             :     {
     478           0 :         sal_Bool bOk = pImp->bInPutMuchBlocks;
     479           0 :         if( !bOk )
     480             :         {
     481           0 :             if( pImp->IsFileChanged() )
     482           0 :                 nErr = ERR_TXTBLOCK_NEWFILE_ERROR;
     483             :             else
     484           0 :                 nErr = pImp->OpenFile( sal_False );
     485           0 :             bOk = 0 == nErr;
     486             :         }
     487           0 :         if( bOk )
     488             :         {
     489           0 :             OUString aNew = GetAppCharClass().uppercase( rShort );
     490           0 :             nErr = pImp->PutText( aNew, rName, rTxt );
     491           0 :             pImp->nCur = (sal_uInt16) -1;
     492           0 :             if( !nErr )
     493             :             {
     494           0 :                 nIdx = GetIndex( pImp->aShort );
     495           0 :                 if( nIdx != (sal_uInt16) -1 )
     496           0 :                     pImp->aNames[ nIdx ]->aLong = rName;
     497             :                 else
     498             :                 {
     499           0 :                     pImp->AddName( pImp->aShort, rName, sal_True );
     500           0 :                     nIdx = pImp->GetIndex( pImp->aShort );
     501             :                 }
     502           0 :                 if( !pImp->bInPutMuchBlocks )
     503           0 :                     nErr = pImp->MakeBlockList();
     504           0 :             }
     505             :         }
     506           0 :         if( !pImp->bInPutMuchBlocks )
     507             :         {
     508           0 :             pImp->CloseFile();
     509           0 :             pImp->Touch();
     510             :         }
     511             :     }
     512           0 :     return nIdx;
     513             : }
     514             : 
     515           0 : SwDoc* SwTextBlocks::GetDoc()
     516             : {
     517           0 :     if( pImp )
     518           0 :         return pImp->pDoc;
     519           0 :     return 0;
     520             : }
     521             : 
     522           0 : void SwTextBlocks::ClearDoc()
     523             : {
     524           0 :     if( pImp )
     525             :     {
     526           0 :         pImp->ClearDoc();
     527           0 :         pImp->nCur = (sal_uInt16) -1;
     528             :     }
     529           0 : }
     530             : 
     531           0 : OUString SwTextBlocks::GetFileName() const
     532             : {
     533           0 :     return pImp->GetFileName();
     534             : }
     535             : 
     536           0 : sal_Bool SwTextBlocks::IsReadOnly() const
     537             : {
     538           0 :     return pImp->bReadOnly;
     539             : }
     540             : 
     541           0 : sal_Bool SwTextBlocks::IsOnlyTextBlock( sal_uInt16 nIdx ) const
     542             : {
     543           0 :     sal_Bool bRet = sal_False;
     544           0 :     if( pImp && !pImp->bInPutMuchBlocks )
     545             :     {
     546           0 :         SwBlockName* pBlkNm = const_cast<SwBlockName*>( pImp->aNames[ nIdx ] );
     547           0 :         if( !pBlkNm->bIsOnlyTxtFlagInit &&
     548           0 :             !pImp->IsFileChanged() && !pImp->OpenFile( sal_True ) )
     549             :         {
     550           0 :             pBlkNm->bIsOnlyTxt = pImp->IsOnlyTextBlock( pBlkNm->aShort );
     551           0 :             pBlkNm->bIsOnlyTxtFlagInit = sal_True;
     552           0 :             pImp->CloseFile();
     553             :         }
     554           0 :         bRet = pBlkNm->bIsOnlyTxt;
     555             :     }
     556           0 :     return bRet;
     557             : }
     558             : 
     559           0 : sal_Bool SwTextBlocks::IsOnlyTextBlock( const OUString& rShort ) const
     560             : {
     561           0 :     sal_uInt16 nIdx = pImp->GetIndex( rShort );
     562           0 :     if( USHRT_MAX != nIdx )
     563             :     {
     564           0 :         if( pImp->aNames[ nIdx ]->bIsOnlyTxtFlagInit )
     565           0 :             return pImp->aNames[ nIdx ]->bIsOnlyTxt;
     566           0 :         return IsOnlyTextBlock( nIdx );
     567             :     }
     568             : 
     569             :     OSL_ENSURE( !this, "ungueltiger Name" );
     570           0 :     return sal_False;
     571             : }
     572             : 
     573           0 : sal_Bool SwTextBlocks::GetMacroTable( sal_uInt16 nIdx, SvxMacroTableDtor& rMacroTbl )
     574             : {
     575           0 :     sal_Bool bRet = sal_True;
     576           0 :     if ( pImp && !pImp->bInPutMuchBlocks )
     577           0 :         bRet = ( 0 == pImp->GetMacroTable( nIdx, rMacroTbl ) );
     578           0 :     return bRet;
     579             : }
     580             : 
     581           0 : sal_Bool SwTextBlocks::SetMacroTable( sal_uInt16 nIdx,
     582             :                                 const SvxMacroTableDtor& rMacroTbl )
     583             : {
     584           0 :     sal_Bool bRet = sal_True;
     585           0 :     if ( pImp && !pImp->bInPutMuchBlocks )
     586           0 :         bRet = ( 0 == pImp->SetMacroTable( nIdx, rMacroTbl ) );
     587           0 :     return bRet;
     588             : }
     589             : 
     590           0 : sal_Bool SwTextBlocks::StartPutMuchBlockEntries()
     591             : {
     592           0 :     sal_Bool bRet = sal_False;
     593           0 :     if( !IsOld() && pImp )
     594           0 :         bRet = pImp->PutMuchEntries( sal_True );
     595           0 :     return bRet;
     596             : }
     597             : 
     598           0 : void SwTextBlocks::EndPutMuchBlockEntries()
     599             : {
     600           0 :     if( pImp )
     601           0 :         pImp->PutMuchEntries( sal_False );
     602           0 : }
     603             : 
     604           0 : OUString SwTextBlocks::GetBaseURL() const
     605             : {
     606           0 :     if(pImp)
     607           0 :         return pImp->GetBaseURL();
     608           0 :     return OUString();
     609             : }
     610             : 
     611           0 : void SwTextBlocks::SetBaseURL( const OUString& rURL )
     612             : {
     613           0 :     if(pImp)
     614           0 :         pImp->SetBaseURL(rURL);
     615           0 : }
     616             : 
     617             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10