xref: /aoo4110/main/sw/source/core/swg/swblocks.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sw.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski #include <sfx2/docfilt.hxx>
29*b1cdbd2cSJim Jagielski #include <sot/storage.hxx>
30*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
31*b1cdbd2cSJim Jagielski #ifndef SVTOOLS_FSTATHELPER_HXX
32*b1cdbd2cSJim Jagielski #include <svl/fstathelper.hxx>
33*b1cdbd2cSJim Jagielski #endif
34*b1cdbd2cSJim Jagielski #include <svl/macitem.hxx>
35*b1cdbd2cSJim Jagielski #include <unotools/charclass.hxx>
36*b1cdbd2cSJim Jagielski #include <frmfmt.hxx>
37*b1cdbd2cSJim Jagielski #include <doc.hxx>
38*b1cdbd2cSJim Jagielski #include <docary.hxx>
39*b1cdbd2cSJim Jagielski #include <pam.hxx>
40*b1cdbd2cSJim Jagielski #include <shellio.hxx>
41*b1cdbd2cSJim Jagielski #include <swblocks.hxx>
42*b1cdbd2cSJim Jagielski #include <ndtxt.hxx>
43*b1cdbd2cSJim Jagielski #include <mdiexp.hxx>		// Progress
44*b1cdbd2cSJim Jagielski #include <SwXMLTextBlocks.hxx>
45*b1cdbd2cSJim Jagielski #ifndef _DOCSH_HXX
46*b1cdbd2cSJim Jagielski #include <docsh.hxx>
47*b1cdbd2cSJim Jagielski #endif
48*b1cdbd2cSJim Jagielski #include <swunohelper.hxx>
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski #ifndef _STATSTR_HRC
51*b1cdbd2cSJim Jagielski #include <statstr.hrc>
52*b1cdbd2cSJim Jagielski #endif
53*b1cdbd2cSJim Jagielski #include <swerror.h>
54*b1cdbd2cSJim Jagielski 
55*b1cdbd2cSJim Jagielski SV_IMPL_OP_PTRARR_SORT( SwBlockNames, SwBlockName* );
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski //////////////////////////////////////////////////////////////////////////
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski // Hash-Code errechnen (muss nicht eindeutig sein)
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski 
Hash(const String & r)62*b1cdbd2cSJim Jagielski sal_uInt16 SwImpBlocks::Hash( const String& r )
63*b1cdbd2cSJim Jagielski {
64*b1cdbd2cSJim Jagielski 	sal_uInt16 n = 0;
65*b1cdbd2cSJim Jagielski 	xub_StrLen nLen = r.Len();
66*b1cdbd2cSJim Jagielski 	if( nLen > 8 )
67*b1cdbd2cSJim Jagielski 		nLen = 8;
68*b1cdbd2cSJim Jagielski 	const sal_Unicode* p = r.GetBuffer();
69*b1cdbd2cSJim Jagielski 	while( nLen-- )
70*b1cdbd2cSJim Jagielski 		n = ( n << 1 ) + *p++;
71*b1cdbd2cSJim Jagielski 	return n;
72*b1cdbd2cSJim Jagielski }
73*b1cdbd2cSJim Jagielski 
74*b1cdbd2cSJim Jagielski 
SwBlockName(const String & rShort,const String & rLong,long n)75*b1cdbd2cSJim Jagielski SwBlockName::SwBlockName( const String& rShort, const String& rLong, long n )
76*b1cdbd2cSJim Jagielski 	: nPos( n ), aShort( rShort ), aLong( rLong ), aPackageName (rShort),
77*b1cdbd2cSJim Jagielski 	bIsOnlyTxtFlagInit( sal_False ), bIsOnlyTxt( sal_False )
78*b1cdbd2cSJim Jagielski {
79*b1cdbd2cSJim Jagielski 	nHashS = SwImpBlocks::Hash( rShort );
80*b1cdbd2cSJim Jagielski 	nHashL = SwImpBlocks::Hash( rLong );
81*b1cdbd2cSJim Jagielski }
SwBlockName(const String & rShort,const String & rLong,const String & rPackageName)82*b1cdbd2cSJim Jagielski SwBlockName::SwBlockName( const String& rShort, const String& rLong, const String& rPackageName)
83*b1cdbd2cSJim Jagielski 	: nPos( 0 ), aShort( rShort ), aLong( rLong ), aPackageName (rPackageName),
84*b1cdbd2cSJim Jagielski 	bIsOnlyTxtFlagInit( sal_False ), bIsOnlyTxt( sal_False )
85*b1cdbd2cSJim Jagielski {
86*b1cdbd2cSJim Jagielski 	nHashS = SwImpBlocks::Hash( rShort );
87*b1cdbd2cSJim Jagielski 	nHashL = SwImpBlocks::Hash( rLong );
88*b1cdbd2cSJim Jagielski }
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski 
91*b1cdbd2cSJim Jagielski // Ist die angegebene Datei ein Storage oder gibt es sie nicht?
92*b1cdbd2cSJim Jagielski 
GetFileType(const String & rFile)93*b1cdbd2cSJim Jagielski short SwImpBlocks::GetFileType( const String& rFile )
94*b1cdbd2cSJim Jagielski {
95*b1cdbd2cSJim Jagielski 	if( !FStatHelper::IsDocument( rFile ) )
96*b1cdbd2cSJim Jagielski 		return SWBLK_NO_FILE;
97*b1cdbd2cSJim Jagielski 	if( SwXMLTextBlocks::IsFileUCBStorage( rFile ) )
98*b1cdbd2cSJim Jagielski 		return SWBLK_XML;
99*b1cdbd2cSJim Jagielski 	if( SvStorage::IsStorageFile( rFile ) )
100*b1cdbd2cSJim Jagielski 		return SWBLK_SW3;
101*b1cdbd2cSJim Jagielski     //otherwise return NONE
102*b1cdbd2cSJim Jagielski     return SWBLK_NONE;
103*b1cdbd2cSJim Jagielski }
104*b1cdbd2cSJim Jagielski 
105*b1cdbd2cSJim Jagielski 
SwImpBlocks(const String & rFile,sal_Bool)106*b1cdbd2cSJim Jagielski SwImpBlocks::SwImpBlocks( const String& rFile, sal_Bool )
107*b1cdbd2cSJim Jagielski 	: aFile( rFile ), pDoc( 0 ), nCur( (sal_uInt16)-1 ),
108*b1cdbd2cSJim Jagielski     bReadOnly( sal_True ), bInPutMuchBlocks( sal_False )
109*b1cdbd2cSJim Jagielski {
110*b1cdbd2cSJim Jagielski 	FStatHelper::GetModifiedDateTimeOfFile( rFile,
111*b1cdbd2cSJim Jagielski 											&aDateModified, &aTimeModified );
112*b1cdbd2cSJim Jagielski 	INetURLObject aObj(rFile);
113*b1cdbd2cSJim Jagielski 	aObj.setExtension( aEmptyStr );
114*b1cdbd2cSJim Jagielski 	aName = aObj.GetBase();
115*b1cdbd2cSJim Jagielski }
116*b1cdbd2cSJim Jagielski 
117*b1cdbd2cSJim Jagielski 
~SwImpBlocks()118*b1cdbd2cSJim Jagielski SwImpBlocks::~SwImpBlocks()
119*b1cdbd2cSJim Jagielski {
120*b1cdbd2cSJim Jagielski 	aNames.DeleteAndDestroy( 0, aNames.Count() );
121*b1cdbd2cSJim Jagielski }
122*b1cdbd2cSJim Jagielski 
123*b1cdbd2cSJim Jagielski // Loeschen des Inhaltes des Dokuments
ClearDoc()124*b1cdbd2cSJim Jagielski void SwImpBlocks::ClearDoc()
125*b1cdbd2cSJim Jagielski {
126*b1cdbd2cSJim Jagielski 	pDoc->ClearDoc();
127*b1cdbd2cSJim Jagielski }
128*b1cdbd2cSJim Jagielski 
GetDocForConversion(sal_uInt16 n)129*b1cdbd2cSJim Jagielski sal_uLong SwImpBlocks::GetDocForConversion( sal_uInt16 n )
130*b1cdbd2cSJim Jagielski {
131*b1cdbd2cSJim Jagielski 	return GetDoc( n );
132*b1cdbd2cSJim Jagielski }
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski // Erzeugen eines PaMs, der das ganze Dokument umfasst
MakePaM()135*b1cdbd2cSJim Jagielski SwPaM* SwImpBlocks::MakePaM()
136*b1cdbd2cSJim Jagielski {
137*b1cdbd2cSJim Jagielski 	SwPaM* pPam = new SwPaM( pDoc->GetNodes().GetEndOfContent() );
138*b1cdbd2cSJim Jagielski 	pPam->Move( fnMoveBackward, fnGoDoc );
139*b1cdbd2cSJim Jagielski 	pPam->SetMark();
140*b1cdbd2cSJim Jagielski 	pPam->Move( fnMoveForward, fnGoDoc );
141*b1cdbd2cSJim Jagielski 	pPam->Exchange();
142*b1cdbd2cSJim Jagielski 	return pPam;
143*b1cdbd2cSJim Jagielski }
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski 
GetCount() const146*b1cdbd2cSJim Jagielski sal_uInt16 SwImpBlocks::GetCount() const
147*b1cdbd2cSJim Jagielski {
148*b1cdbd2cSJim Jagielski 	return aNames.Count();
149*b1cdbd2cSJim Jagielski }
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski // Case Insensitive
GetIndex(const String & rShort) const152*b1cdbd2cSJim Jagielski sal_uInt16 SwImpBlocks::GetIndex( const String& rShort ) const
153*b1cdbd2cSJim Jagielski {
154*b1cdbd2cSJim Jagielski 	String s( GetAppCharClass().upper( rShort ) );
155*b1cdbd2cSJim Jagielski 	sal_uInt16 nHash = Hash( s );
156*b1cdbd2cSJim Jagielski 	for( sal_uInt16 i = 0; i < aNames.Count(); i++ )
157*b1cdbd2cSJim Jagielski 	{
158*b1cdbd2cSJim Jagielski 		SwBlockName* pName = aNames[ i ];
159*b1cdbd2cSJim Jagielski 		if( pName->nHashS == nHash
160*b1cdbd2cSJim Jagielski 		 && pName->aShort == s )
161*b1cdbd2cSJim Jagielski 			return i;
162*b1cdbd2cSJim Jagielski 	}
163*b1cdbd2cSJim Jagielski 	return (sal_uInt16) -1;
164*b1cdbd2cSJim Jagielski }
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski 
GetLongIndex(const String & rLong) const167*b1cdbd2cSJim Jagielski sal_uInt16 SwImpBlocks::GetLongIndex( const String& rLong ) const
168*b1cdbd2cSJim Jagielski {
169*b1cdbd2cSJim Jagielski 	sal_uInt16 nHash = Hash( rLong );
170*b1cdbd2cSJim Jagielski 	for( sal_uInt16 i = 0; i < aNames.Count(); i++ )
171*b1cdbd2cSJim Jagielski 	{
172*b1cdbd2cSJim Jagielski 		SwBlockName* pName = aNames[ i ];
173*b1cdbd2cSJim Jagielski 		if( pName->nHashL == nHash
174*b1cdbd2cSJim Jagielski 		 && pName->aLong == rLong )
175*b1cdbd2cSJim Jagielski 			return i;
176*b1cdbd2cSJim Jagielski 	}
177*b1cdbd2cSJim Jagielski 	return (sal_uInt16) -1;
178*b1cdbd2cSJim Jagielski }
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski 
GetShortName(sal_uInt16 n) const181*b1cdbd2cSJim Jagielski const String& SwImpBlocks::GetShortName( sal_uInt16 n ) const
182*b1cdbd2cSJim Jagielski {
183*b1cdbd2cSJim Jagielski 	if( n < aNames.Count() )
184*b1cdbd2cSJim Jagielski 		return aNames[ n ]->aShort;
185*b1cdbd2cSJim Jagielski 	return aEmptyStr;
186*b1cdbd2cSJim Jagielski }
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski 
GetLongName(sal_uInt16 n) const189*b1cdbd2cSJim Jagielski const String& SwImpBlocks::GetLongName( sal_uInt16 n ) const
190*b1cdbd2cSJim Jagielski {
191*b1cdbd2cSJim Jagielski 	if( n < aNames.Count() )
192*b1cdbd2cSJim Jagielski 		return aNames[ n ]->aLong;
193*b1cdbd2cSJim Jagielski 	return aEmptyStr;
194*b1cdbd2cSJim Jagielski }
195*b1cdbd2cSJim Jagielski 
GetPackageName(sal_uInt16 n) const196*b1cdbd2cSJim Jagielski const String& SwImpBlocks::GetPackageName( sal_uInt16 n ) const
197*b1cdbd2cSJim Jagielski {
198*b1cdbd2cSJim Jagielski 	if( n < aNames.Count() )
199*b1cdbd2cSJim Jagielski 		return aNames[ n ]->aPackageName;
200*b1cdbd2cSJim Jagielski 	return aEmptyStr;
201*b1cdbd2cSJim Jagielski }
202*b1cdbd2cSJim Jagielski 
AddName(const String & rShort,const String & rLong,sal_Bool bOnlyTxt)203*b1cdbd2cSJim Jagielski void SwImpBlocks::AddName( const String& rShort, const String& rLong,
204*b1cdbd2cSJim Jagielski 							sal_Bool bOnlyTxt )
205*b1cdbd2cSJim Jagielski {
206*b1cdbd2cSJim Jagielski 	sal_uInt16 nIdx = GetIndex( rShort );
207*b1cdbd2cSJim Jagielski 	if( nIdx != (sal_uInt16) -1 )
208*b1cdbd2cSJim Jagielski 		aNames.DeleteAndDestroy( nIdx );
209*b1cdbd2cSJim Jagielski 	SwBlockName* pNew = new SwBlockName( rShort, rLong, 0L );
210*b1cdbd2cSJim Jagielski 	pNew->bIsOnlyTxtFlagInit = sal_True;
211*b1cdbd2cSJim Jagielski 	pNew->bIsOnlyTxt = bOnlyTxt;
212*b1cdbd2cSJim Jagielski 	aNames.C40_PTR_INSERT( SwBlockName, pNew );
213*b1cdbd2cSJim Jagielski }
214*b1cdbd2cSJim Jagielski 
215*b1cdbd2cSJim Jagielski 
216*b1cdbd2cSJim Jagielski 
IsFileChanged() const217*b1cdbd2cSJim Jagielski sal_Bool SwImpBlocks::IsFileChanged() const
218*b1cdbd2cSJim Jagielski {
219*b1cdbd2cSJim Jagielski 	Date aTempDateModified( aDateModified );
220*b1cdbd2cSJim Jagielski 	Time aTempTimeModified( aTimeModified );
221*b1cdbd2cSJim Jagielski 	return FStatHelper::GetModifiedDateTimeOfFile( aFile,
222*b1cdbd2cSJim Jagielski 							&aTempDateModified, &aTempTimeModified ) &&
223*b1cdbd2cSJim Jagielski 		  ( aDateModified != aTempDateModified ||
224*b1cdbd2cSJim Jagielski 			aTimeModified != aTempTimeModified );
225*b1cdbd2cSJim Jagielski }
226*b1cdbd2cSJim Jagielski 
227*b1cdbd2cSJim Jagielski 
Touch()228*b1cdbd2cSJim Jagielski void SwImpBlocks::Touch()
229*b1cdbd2cSJim Jagielski {
230*b1cdbd2cSJim Jagielski 	FStatHelper::GetModifiedDateTimeOfFile( aFile,
231*b1cdbd2cSJim Jagielski 											&aDateModified, &aTimeModified );
232*b1cdbd2cSJim Jagielski }
233*b1cdbd2cSJim Jagielski 
IsOnlyTextBlock(const String &) const234*b1cdbd2cSJim Jagielski sal_Bool SwImpBlocks::IsOnlyTextBlock( const String& ) const
235*b1cdbd2cSJim Jagielski {
236*b1cdbd2cSJim Jagielski 	return sal_False;
237*b1cdbd2cSJim Jagielski }
238*b1cdbd2cSJim Jagielski 
GetMacroTable(sal_uInt16,SvxMacroTableDtor &,sal_Bool)239*b1cdbd2cSJim Jagielski sal_uLong SwImpBlocks::GetMacroTable( sal_uInt16, SvxMacroTableDtor&, sal_Bool )
240*b1cdbd2cSJim Jagielski {
241*b1cdbd2cSJim Jagielski 	return 0;
242*b1cdbd2cSJim Jagielski }
243*b1cdbd2cSJim Jagielski 
SetMacroTable(sal_uInt16,const SvxMacroTableDtor &,sal_Bool)244*b1cdbd2cSJim Jagielski sal_uLong SwImpBlocks::SetMacroTable( sal_uInt16 ,
245*b1cdbd2cSJim Jagielski 								const SvxMacroTableDtor& , sal_Bool )
246*b1cdbd2cSJim Jagielski {
247*b1cdbd2cSJim Jagielski 	return 0;
248*b1cdbd2cSJim Jagielski }
249*b1cdbd2cSJim Jagielski 
PutMuchEntries(sal_Bool)250*b1cdbd2cSJim Jagielski sal_Bool SwImpBlocks::PutMuchEntries( sal_Bool )
251*b1cdbd2cSJim Jagielski {
252*b1cdbd2cSJim Jagielski 	return sal_False;
253*b1cdbd2cSJim Jagielski }
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski ////////////////////////////////////////////////////////////////////////////
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski 
SwTextBlocks(const String & rFile)258*b1cdbd2cSJim Jagielski SwTextBlocks::SwTextBlocks( const String& rFile )
259*b1cdbd2cSJim Jagielski 	: pImp( 0 ), nErr( 0 )
260*b1cdbd2cSJim Jagielski {
261*b1cdbd2cSJim Jagielski 	INetURLObject aObj(rFile);
262*b1cdbd2cSJim Jagielski 	String sFileName = aObj.GetMainURL( INetURLObject::NO_DECODE );
263*b1cdbd2cSJim Jagielski 	switch( SwImpBlocks::GetFileType( rFile ) )
264*b1cdbd2cSJim Jagielski 	{
265*b1cdbd2cSJim Jagielski     //case SWBLK_SW2:     pImp = new Sw2TextBlocks( sFileName );  break;
266*b1cdbd2cSJim Jagielski     //case SWBLK_SW3:     pImp = new Sw3TextBlocks( sFileName );  break;
267*b1cdbd2cSJim Jagielski 	case SWBLK_XML:		pImp = new SwXMLTextBlocks( sFileName ); break;
268*b1cdbd2cSJim Jagielski 	case SWBLK_NO_FILE:	pImp = new SwXMLTextBlocks( sFileName ); break;
269*b1cdbd2cSJim Jagielski 	}
270*b1cdbd2cSJim Jagielski 	if( !pImp )
271*b1cdbd2cSJim Jagielski 		nErr = ERR_SWG_FILE_FORMAT_ERROR;
272*b1cdbd2cSJim Jagielski }
273*b1cdbd2cSJim Jagielski 
~SwTextBlocks()274*b1cdbd2cSJim Jagielski SwTextBlocks::~SwTextBlocks()
275*b1cdbd2cSJim Jagielski {
276*b1cdbd2cSJim Jagielski 	delete pImp;
277*b1cdbd2cSJim Jagielski }
278*b1cdbd2cSJim Jagielski 
GetName()279*b1cdbd2cSJim Jagielski const String& SwTextBlocks::GetName()
280*b1cdbd2cSJim Jagielski {
281*b1cdbd2cSJim Jagielski 	return pImp ? pImp->aName : aEmptyStr;
282*b1cdbd2cSJim Jagielski }
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski 
SetName(const String & r)285*b1cdbd2cSJim Jagielski void SwTextBlocks::SetName( const String& r )
286*b1cdbd2cSJim Jagielski {
287*b1cdbd2cSJim Jagielski 	if( pImp )
288*b1cdbd2cSJim Jagielski 		pImp->SetName( r );
289*b1cdbd2cSJim Jagielski }
290*b1cdbd2cSJim Jagielski 
291*b1cdbd2cSJim Jagielski 
IsOld() const292*b1cdbd2cSJim Jagielski sal_Bool SwTextBlocks::IsOld() const
293*b1cdbd2cSJim Jagielski {
294*b1cdbd2cSJim Jagielski 	if (pImp)
295*b1cdbd2cSJim Jagielski 	{
296*b1cdbd2cSJim Jagielski 		short nType = pImp->GetFileType();
297*b1cdbd2cSJim Jagielski 		if (SWBLK_SW3 == nType || SWBLK_SW2 == nType )
298*b1cdbd2cSJim Jagielski 			return sal_True;
299*b1cdbd2cSJim Jagielski 	}
300*b1cdbd2cSJim Jagielski 	return sal_False;
301*b1cdbd2cSJim Jagielski }
302*b1cdbd2cSJim Jagielski 
303*b1cdbd2cSJim Jagielski 
304*b1cdbd2cSJim Jagielski /*
305*b1cdbd2cSJim Jagielski sal_uLong SwTextBlocks::ConvertToNew()
306*b1cdbd2cSJim Jagielski {
307*b1cdbd2cSJim Jagielski 	// Wir nehmen die aktuelle Datei, benennen diese in .BAK um
308*b1cdbd2cSJim Jagielski 	// und kreieren den neuen Storage
309*b1cdbd2cSJim Jagielski 	if( IsOld() )
310*b1cdbd2cSJim Jagielski 	{
311*b1cdbd2cSJim Jagielski 		// Erst mal muessen wir die Datei freigeben
312*b1cdbd2cSJim Jagielski 		short nType = pImp->GetFileType();
313*b1cdbd2cSJim Jagielski 		Sw2TextBlocks *pTwo = NULL;
314*b1cdbd2cSJim Jagielski 		Sw3TextBlocks *pThree = NULL;
315*b1cdbd2cSJim Jagielski 		SwImpBlocks *pOld = NULL;
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski 		pImp->nCur = (sal_uInt16) -1;
318*b1cdbd2cSJim Jagielski 		String aName( pImp->aFile );
319*b1cdbd2cSJim Jagielski 		delete pImp; pImp = NULL;
320*b1cdbd2cSJim Jagielski 		// Jetzt wird umbenannt
321*b1cdbd2cSJim Jagielski 		INetURLObject aOldFull( aName );
322*b1cdbd2cSJim Jagielski 		INetURLObject aNewFull( aName );
323*b1cdbd2cSJim Jagielski 
324*b1cdbd2cSJim Jagielski 		aOldFull.SetExtension( String::CreateFromAscii("bak") );
325*b1cdbd2cSJim Jagielski 		String aOld( aOldFull.GetMainURL( INetURLObject::NO_DECODE ) );
326*b1cdbd2cSJim Jagielski 		String aNew( aNewFull.GetMainURL( INetURLObject::NO_DECODE ) );
327*b1cdbd2cSJim Jagielski 
328*b1cdbd2cSJim Jagielski 		sal_Bool bError = !SWUnoHelper::UCB_CopyFile( aNew, aOld, sal_True );
329*b1cdbd2cSJim Jagielski 		if( bError )
330*b1cdbd2cSJim Jagielski 		{
331*b1cdbd2cSJim Jagielski 			if (nType == SWBLK_SW2)
332*b1cdbd2cSJim Jagielski 				pImp = new Sw2TextBlocks( aOld );
333*b1cdbd2cSJim Jagielski 			else
334*b1cdbd2cSJim Jagielski 				pImp = new Sw3TextBlocks( aOld );
335*b1cdbd2cSJim Jagielski 			return nErr = ERR_SWG_CANNOT_WRITE;
336*b1cdbd2cSJim Jagielski 		}
337*b1cdbd2cSJim Jagielski 
338*b1cdbd2cSJim Jagielski 		// Die Datei ist erfolgreich umbenannt. Jetzt wird der Storage
339*b1cdbd2cSJim Jagielski 		// aufgesetzt
340*b1cdbd2cSJim Jagielski 		if (nType == SWBLK_SW2)
341*b1cdbd2cSJim Jagielski 			pOld = pTwo = new Sw2TextBlocks( aOld );
342*b1cdbd2cSJim Jagielski 		else
343*b1cdbd2cSJim Jagielski 			pOld = pThree = new Sw3TextBlocks( aOld );
344*b1cdbd2cSJim Jagielski 		SwXMLTextBlocks* pNew = new SwXMLTextBlocks( aName );
345*b1cdbd2cSJim Jagielski 		pNew->SetName ( pOld->GetName());
346*b1cdbd2cSJim Jagielski 		// Wir kopieren den Doc-Ptr in das alte System
347*b1cdbd2cSJim Jagielski 		// den alten SvPersist heben wir uns aber auf,
348*b1cdbd2cSJim Jagielski 		// da dieser die ganze Zeit leben bleibt
349*b1cdbd2cSJim Jagielski 		// und lesen die Dateivorlagen erneut ein
350*b1cdbd2cSJim Jagielski 		SvPersist* pPersist2 = pOld->pDoc->GetPersist();
351*b1cdbd2cSJim Jagielski 		if (SWBLK_SW2 == nType )
352*b1cdbd2cSJim Jagielski 		{
353*b1cdbd2cSJim Jagielski 			delete pOld->pDoc;
354*b1cdbd2cSJim Jagielski 			pOld->pDoc = pNew->pDoc;nLinkCt
355*b1cdbd2cSJim Jagielski 			nErr = pTwo->LoadDoc();
356*b1cdbd2cSJim Jagielski 		}
357*b1cdbd2cSJim Jagielski 		else
358*b1cdbd2cSJim Jagielski 		{
359*b1cdbd2cSJim Jagielski 			nErr = pThree->OpenFile ( sal_True );
360*b1cdbd2cSJim Jagielski 			// Within this call, Sw3IoImp::SetDoc calls RemoveLink
361*b1cdbd2cSJim Jagielski 			// on the old document, and deletes it if the
362*b1cdbd2cSJim Jagielski 			// ref count is now zero
363*b1cdbd2cSJim Jagielski 			pThree->SetDoc ( pNew->pDoc );
364*b1cdbd2cSJim Jagielski 			pOld->pDoc->AddLink();
365*b1cdbd2cSJim Jagielski 		}
366*b1cdbd2cSJim Jagielski 		if( !nErr && 0 == ( nErr = pNew->OpenFile( sal_False )) )
367*b1cdbd2cSJim Jagielski 		{
368*b1cdbd2cSJim Jagielski 			nErr = pNew->SetConvertMode( sal_True );
369*b1cdbd2cSJim Jagielski 			// jetzt werden die Bausteine einfach umkopiert!
370*b1cdbd2cSJim Jagielski 			if( !nErr )
371*b1cdbd2cSJim Jagielski 			{
372*b1cdbd2cSJim Jagielski 				if (SWBLK_SW2 == nType)
373*b1cdbd2cSJim Jagielski 					pTwo->StatLineStartPercent();
374*b1cdbd2cSJim Jagielski 				sal_uInt16 nCount = pOld->GetCount();
375*b1cdbd2cSJim Jagielski 				for( sal_uInt16 i = 0; i < nCount; i++ )
376*b1cdbd2cSJim Jagielski 				{
377*b1cdbd2cSJim Jagielski 					pNew->ClearDoc();
378*b1cdbd2cSJim Jagielski 					String aShort( pOld->GetShortName( i ) );
379*b1cdbd2cSJim Jagielski 					String aLong( pOld->GetLongName( i ) );
380*b1cdbd2cSJim Jagielski 					pNew->AddName( aShort, aLong );
381*b1cdbd2cSJim Jagielski 					if ( SWBLK_SW3 == nType && pThree->IsOnlyTextBlock(aShort) )
382*b1cdbd2cSJim Jagielski 					{
383*b1cdbd2cSJim Jagielski 						String sText;
384*b1cdbd2cSJim Jagielski 						pThree->GetText( aShort, sText );
385*b1cdbd2cSJim Jagielski 						pNew->PutText( aShort, aLong, sText );
386*b1cdbd2cSJim Jagielski 					}
387*b1cdbd2cSJim Jagielski 					else
388*b1cdbd2cSJim Jagielski 					{
389*b1cdbd2cSJim Jagielski 						if (SWBLK_SW2 == nType )
390*b1cdbd2cSJim Jagielski 						{
391*b1cdbd2cSJim Jagielski 							// I think this is how it should work (!!!!!!) mtg
392*b1cdbd2cSJim Jagielski 							pNew->pDoc->SetPersist( pPersist2 );
393*b1cdbd2cSJim Jagielski 						}
394*b1cdbd2cSJim Jagielski 						nErr = pOld->GetDocForConversion( i );
395*b1cdbd2cSJim Jagielski 						if( nErr )
396*b1cdbd2cSJim Jagielski 							break;
397*b1cdbd2cSJim Jagielski 						nErr = pNew->BeginPutDoc( aShort, aLong );
398*b1cdbd2cSJim Jagielski 						if( nErr )
399*b1cdbd2cSJim Jagielski 							break;
400*b1cdbd2cSJim Jagielski 						nErr = pNew->PutDoc();
401*b1cdbd2cSJim Jagielski 						if( nErr )
402*b1cdbd2cSJim Jagielski 							break;
403*b1cdbd2cSJim Jagielski 					}
404*b1cdbd2cSJim Jagielski 
405*b1cdbd2cSJim Jagielski 					// convert macros, too
406*b1cdbd2cSJim Jagielski 					SvxMacroTableDtor aMacroTable;
407*b1cdbd2cSJim Jagielski 					pOld->GetMacroTable( i, aMacroTable, sal_True );
408*b1cdbd2cSJim Jagielski 					pNew->SetMacroTable( i, aMacroTable, sal_True );
409*b1cdbd2cSJim Jagielski 
410*b1cdbd2cSJim Jagielski 					if (SWBLK_SW2 == nType )
411*b1cdbd2cSJim Jagielski 						pNew->pDoc->SetPersist( 0 );
412*b1cdbd2cSJim Jagielski 				}
413*b1cdbd2cSJim Jagielski 				if (SWBLK_SW2 == nType )
414*b1cdbd2cSJim Jagielski 					::EndProgress( pOld->pDoc->GetDocShell() );
415*b1cdbd2cSJim Jagielski 			}
416*b1cdbd2cSJim Jagielski 			if( !nErr )
417*b1cdbd2cSJim Jagielski 				nErr = pNew->SetConvertMode( sal_False );
418*b1cdbd2cSJim Jagielski 		}
419*b1cdbd2cSJim Jagielski 		if ( SWBLK_SW3 == nType )
420*b1cdbd2cSJim Jagielski 		{
421*b1cdbd2cSJim Jagielski 			pThree->CloseFile();
422*b1cdbd2cSJim Jagielski 		}
423*b1cdbd2cSJim Jagielski 		else
424*b1cdbd2cSJim Jagielski 		{
425*b1cdbd2cSJim Jagielski 			// Haben wir es geschafft?
426*b1cdbd2cSJim Jagielski 			pOld->pDoc = NULL;
427*b1cdbd2cSJim Jagielski 		}
428*b1cdbd2cSJim Jagielski 		pNew->ClearDoc();
429*b1cdbd2cSJim Jagielski 		if( !nErr )
430*b1cdbd2cSJim Jagielski 		{
431*b1cdbd2cSJim Jagielski 			delete pOld;
432*b1cdbd2cSJim Jagielski 			pImp = pNew;
433*b1cdbd2cSJim Jagielski 			SWUnoHelper::UCB_DeleteFile( aOld );
434*b1cdbd2cSJim Jagielski 			pNew->MakeBlockList();
435*b1cdbd2cSJim Jagielski 		}
436*b1cdbd2cSJim Jagielski 		else
437*b1cdbd2cSJim Jagielski 		{
438*b1cdbd2cSJim Jagielski 			delete pOld; delete pNew;
439*b1cdbd2cSJim Jagielski 			SWUnoHelper::UCB_DeleteFile( aNew );
440*b1cdbd2cSJim Jagielski 			SWUnoHelper::UCB_CopyFile( aOld, aNew, sal_True );
441*b1cdbd2cSJim Jagielski 			if ( SWBLK_SW2 == nType )
442*b1cdbd2cSJim Jagielski 				pImp = new Sw2TextBlocks( aOld );
443*b1cdbd2cSJim Jagielski 			else
444*b1cdbd2cSJim Jagielski 				pImp = new Sw3TextBlocks( aOld );
445*b1cdbd2cSJim Jagielski 		}
446*b1cdbd2cSJim Jagielski 		pNew->CloseFile();
447*b1cdbd2cSJim Jagielski 		FStatHelper::GetModifiedDateTimeOfFile( aNew,
448*b1cdbd2cSJim Jagielski 							&pImp->aDateModified, &pImp->aTimeModified );
449*b1cdbd2cSJim Jagielski 	}
450*b1cdbd2cSJim Jagielski 	return nErr;
451*b1cdbd2cSJim Jagielski } */
452*b1cdbd2cSJim Jagielski 
453*b1cdbd2cSJim Jagielski 
GetCount() const454*b1cdbd2cSJim Jagielski sal_uInt16 SwTextBlocks::GetCount() const
455*b1cdbd2cSJim Jagielski {
456*b1cdbd2cSJim Jagielski 	return pImp ? pImp->GetCount() : 0;
457*b1cdbd2cSJim Jagielski }
458*b1cdbd2cSJim Jagielski 
459*b1cdbd2cSJim Jagielski 
GetIndex(const String & r) const460*b1cdbd2cSJim Jagielski sal_uInt16 SwTextBlocks::GetIndex( const String& r ) const
461*b1cdbd2cSJim Jagielski {
462*b1cdbd2cSJim Jagielski 	return pImp ? pImp->GetIndex( r ) : (sal_uInt16) -1;
463*b1cdbd2cSJim Jagielski }
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski 
GetLongIndex(const String & r) const466*b1cdbd2cSJim Jagielski sal_uInt16 SwTextBlocks::GetLongIndex( const String& r ) const
467*b1cdbd2cSJim Jagielski {
468*b1cdbd2cSJim Jagielski 	return pImp ? (sal_uInt16)(pImp->GetLongIndex( r )) : (sal_uInt16) -1;
469*b1cdbd2cSJim Jagielski }
470*b1cdbd2cSJim Jagielski 
471*b1cdbd2cSJim Jagielski 
GetShortName(sal_uInt16 n) const472*b1cdbd2cSJim Jagielski const String& SwTextBlocks::GetShortName( sal_uInt16 n ) const
473*b1cdbd2cSJim Jagielski {
474*b1cdbd2cSJim Jagielski 	if( pImp )
475*b1cdbd2cSJim Jagielski 		return pImp->GetShortName( n );
476*b1cdbd2cSJim Jagielski 	return aEmptyStr;
477*b1cdbd2cSJim Jagielski }
478*b1cdbd2cSJim Jagielski 
479*b1cdbd2cSJim Jagielski 
GetLongName(sal_uInt16 n) const480*b1cdbd2cSJim Jagielski const String& SwTextBlocks::GetLongName( sal_uInt16 n ) const
481*b1cdbd2cSJim Jagielski {
482*b1cdbd2cSJim Jagielski 	if( pImp )
483*b1cdbd2cSJim Jagielski 		return pImp->GetLongName( n );
484*b1cdbd2cSJim Jagielski 	return aEmptyStr;
485*b1cdbd2cSJim Jagielski }
486*b1cdbd2cSJim Jagielski 
487*b1cdbd2cSJim Jagielski 
Delete(sal_uInt16 n)488*b1cdbd2cSJim Jagielski sal_Bool SwTextBlocks::Delete( sal_uInt16 n )
489*b1cdbd2cSJim Jagielski {
490*b1cdbd2cSJim Jagielski 	if( pImp && !pImp->bInPutMuchBlocks )
491*b1cdbd2cSJim Jagielski 	{
492*b1cdbd2cSJim Jagielski 		if( pImp->IsFileChanged() )
493*b1cdbd2cSJim Jagielski 			nErr = ERR_TXTBLOCK_NEWFILE_ERROR;
494*b1cdbd2cSJim Jagielski 		else if( 0 == (nErr = pImp->OpenFile( sal_False ) ))
495*b1cdbd2cSJim Jagielski 		{
496*b1cdbd2cSJim Jagielski 			nErr = pImp->Delete( n );
497*b1cdbd2cSJim Jagielski 			if( !nErr )
498*b1cdbd2cSJim Jagielski 				pImp->aNames.DeleteAndDestroy( n );
499*b1cdbd2cSJim Jagielski 			if( n == pImp->nCur )
500*b1cdbd2cSJim Jagielski 				pImp->nCur = (sal_uInt16) -1;
501*b1cdbd2cSJim Jagielski 			if( !nErr )
502*b1cdbd2cSJim Jagielski 				nErr = pImp->MakeBlockList();
503*b1cdbd2cSJim Jagielski 		}
504*b1cdbd2cSJim Jagielski 		pImp->CloseFile();
505*b1cdbd2cSJim Jagielski 		pImp->Touch();
506*b1cdbd2cSJim Jagielski 
507*b1cdbd2cSJim Jagielski 		return sal_Bool( nErr == 0 );
508*b1cdbd2cSJim Jagielski 	}
509*b1cdbd2cSJim Jagielski 	return sal_False;
510*b1cdbd2cSJim Jagielski }
511*b1cdbd2cSJim Jagielski 
512*b1cdbd2cSJim Jagielski 
Rename(sal_uInt16 n,const String * s,const String * l)513*b1cdbd2cSJim Jagielski sal_uInt16 SwTextBlocks::Rename( sal_uInt16 n, const String* s, const String* l )
514*b1cdbd2cSJim Jagielski {
515*b1cdbd2cSJim Jagielski 	sal_uInt16 nIdx = (sal_uInt16)-1;
516*b1cdbd2cSJim Jagielski 	if( pImp && !pImp->bInPutMuchBlocks )
517*b1cdbd2cSJim Jagielski 	{
518*b1cdbd2cSJim Jagielski 		pImp->nCur = nIdx;
519*b1cdbd2cSJim Jagielski 		String aNew, aLong;
520*b1cdbd2cSJim Jagielski 		if( s )
521*b1cdbd2cSJim Jagielski 			aNew = aLong = *s;
522*b1cdbd2cSJim Jagielski 		if( l )
523*b1cdbd2cSJim Jagielski 			aLong = *l;
524*b1cdbd2cSJim Jagielski 		if( !aNew.Len() )
525*b1cdbd2cSJim Jagielski 		{
526*b1cdbd2cSJim Jagielski 			ASSERT( !this, "Kein Kurzname in Rename angegeben" );
527*b1cdbd2cSJim Jagielski 			nErr = ERR_SWG_INTERNAL_ERROR; return (sal_uInt16) -1;
528*b1cdbd2cSJim Jagielski 		}
529*b1cdbd2cSJim Jagielski 
530*b1cdbd2cSJim Jagielski 		if( pImp->IsFileChanged() )
531*b1cdbd2cSJim Jagielski 			nErr = ERR_TXTBLOCK_NEWFILE_ERROR;
532*b1cdbd2cSJim Jagielski 		else if( 0 == (	nErr = pImp->OpenFile( sal_False )))
533*b1cdbd2cSJim Jagielski 		{
534*b1cdbd2cSJim Jagielski 			// Vorher den neuen Eintrag in die Liste setzen!
535*b1cdbd2cSJim Jagielski 			GetAppCharClass().toUpper( aNew );
536*b1cdbd2cSJim Jagielski  			nErr = pImp->Rename( n, aNew, aLong );
537*b1cdbd2cSJim Jagielski 			if( !nErr )
538*b1cdbd2cSJim Jagielski 			{
539*b1cdbd2cSJim Jagielski 				sal_Bool bOnlyTxt = pImp->aNames[ n ]->bIsOnlyTxt;
540*b1cdbd2cSJim Jagielski 				pImp->aNames.DeleteAndDestroy( n );
541*b1cdbd2cSJim Jagielski 				pImp->AddName( aNew, aLong, bOnlyTxt );
542*b1cdbd2cSJim Jagielski 				nErr = pImp->MakeBlockList();
543*b1cdbd2cSJim Jagielski 			}
544*b1cdbd2cSJim Jagielski 		}
545*b1cdbd2cSJim Jagielski 		pImp->CloseFile();
546*b1cdbd2cSJim Jagielski 		pImp->Touch();
547*b1cdbd2cSJim Jagielski 		if( !nErr )
548*b1cdbd2cSJim Jagielski 			nIdx = pImp->GetIndex( aNew );
549*b1cdbd2cSJim Jagielski 	}
550*b1cdbd2cSJim Jagielski 	return nIdx;
551*b1cdbd2cSJim Jagielski }
552*b1cdbd2cSJim Jagielski 
CopyBlock(SwTextBlocks & rSource,String & rSrcShort,const String & rLong)553*b1cdbd2cSJim Jagielski sal_uLong SwTextBlocks::CopyBlock( SwTextBlocks& rSource, String& rSrcShort,
554*b1cdbd2cSJim Jagielski 								const String& rLong )
555*b1cdbd2cSJim Jagielski {
556*b1cdbd2cSJim Jagielski 	sal_Bool bIsOld = sal_False;
557*b1cdbd2cSJim Jagielski 	if (rSource.pImp)
558*b1cdbd2cSJim Jagielski 	{
559*b1cdbd2cSJim Jagielski 		short nType = rSource.pImp->GetFileType();
560*b1cdbd2cSJim Jagielski 		if (SWBLK_SW2 == nType || SWBLK_SW3 == nType )
561*b1cdbd2cSJim Jagielski 			bIsOld = sal_True;
562*b1cdbd2cSJim Jagielski 	}
563*b1cdbd2cSJim Jagielski 	if( bIsOld ) //rSource.IsOld() )
564*b1cdbd2cSJim Jagielski 		nErr = ERR_SWG_OLD_GLOSSARY;
565*b1cdbd2cSJim Jagielski 	else if( pImp->bInPutMuchBlocks )
566*b1cdbd2cSJim Jagielski 		nErr = ERR_SWG_INTERNAL_ERROR;
567*b1cdbd2cSJim Jagielski 	else
568*b1cdbd2cSJim Jagielski 		nErr = pImp->CopyBlock(*rSource.pImp, rSrcShort, rLong);
569*b1cdbd2cSJim Jagielski 	return nErr;
570*b1cdbd2cSJim Jagielski }
571*b1cdbd2cSJim Jagielski 
BeginGetDoc(sal_uInt16 n)572*b1cdbd2cSJim Jagielski sal_Bool SwTextBlocks::BeginGetDoc( sal_uInt16 n )
573*b1cdbd2cSJim Jagielski {
574*b1cdbd2cSJim Jagielski 	if( pImp && !pImp->bInPutMuchBlocks )
575*b1cdbd2cSJim Jagielski 	{
576*b1cdbd2cSJim Jagielski // diese Optimierierung darf es nicht mehr geben. OLE-Objecte muessen auf
577*b1cdbd2cSJim Jagielski // ihre SubStorages zugreifem koennen!
578*b1cdbd2cSJim Jagielski //		if( n == pImp->nCur )
579*b1cdbd2cSJim Jagielski //			return sal_True;
580*b1cdbd2cSJim Jagielski 
581*b1cdbd2cSJim Jagielski 		if( pImp->IsFileChanged() )
582*b1cdbd2cSJim Jagielski 			nErr = ERR_TXTBLOCK_NEWFILE_ERROR;
583*b1cdbd2cSJim Jagielski 		else if( 0 == (	nErr = pImp->OpenFile( sal_True )))
584*b1cdbd2cSJim Jagielski 		{
585*b1cdbd2cSJim Jagielski 			pImp->ClearDoc();
586*b1cdbd2cSJim Jagielski 			nErr = pImp->GetDoc( n );
587*b1cdbd2cSJim Jagielski 			if( nErr )
588*b1cdbd2cSJim Jagielski 				pImp->nCur = (sal_uInt16)-1;
589*b1cdbd2cSJim Jagielski 			else
590*b1cdbd2cSJim Jagielski 				pImp->nCur = n;
591*b1cdbd2cSJim Jagielski 		}
592*b1cdbd2cSJim Jagielski 		return sal_Bool( nErr == 0 );
593*b1cdbd2cSJim Jagielski 	}
594*b1cdbd2cSJim Jagielski 	return sal_False;
595*b1cdbd2cSJim Jagielski }
596*b1cdbd2cSJim Jagielski 
597*b1cdbd2cSJim Jagielski 
EndGetDoc()598*b1cdbd2cSJim Jagielski void SwTextBlocks::EndGetDoc()
599*b1cdbd2cSJim Jagielski {
600*b1cdbd2cSJim Jagielski 	if( pImp && !pImp->bInPutMuchBlocks )
601*b1cdbd2cSJim Jagielski 		pImp->CloseFile();
602*b1cdbd2cSJim Jagielski }
603*b1cdbd2cSJim Jagielski 
604*b1cdbd2cSJim Jagielski 
BeginPutDoc(const String & s,const String & l)605*b1cdbd2cSJim Jagielski sal_Bool SwTextBlocks::BeginPutDoc( const String& s, const String& l )
606*b1cdbd2cSJim Jagielski {
607*b1cdbd2cSJim Jagielski 	if( pImp )
608*b1cdbd2cSJim Jagielski 	{
609*b1cdbd2cSJim Jagielski 		sal_Bool bOk = pImp->bInPutMuchBlocks;
610*b1cdbd2cSJim Jagielski 		if( !bOk )
611*b1cdbd2cSJim Jagielski 		{
612*b1cdbd2cSJim Jagielski 			if( pImp->IsFileChanged() )
613*b1cdbd2cSJim Jagielski 				nErr = ERR_TXTBLOCK_NEWFILE_ERROR;
614*b1cdbd2cSJim Jagielski 			else
615*b1cdbd2cSJim Jagielski 				nErr = pImp->OpenFile( sal_False );
616*b1cdbd2cSJim Jagielski 			bOk = 0 == nErr;
617*b1cdbd2cSJim Jagielski 		}
618*b1cdbd2cSJim Jagielski 		if( bOk )
619*b1cdbd2cSJim Jagielski 		{
620*b1cdbd2cSJim Jagielski 			String aNew( s );
621*b1cdbd2cSJim Jagielski 			GetAppCharClass().toUpper( aNew );
622*b1cdbd2cSJim Jagielski 			nErr = pImp->BeginPutDoc( aNew, l );
623*b1cdbd2cSJim Jagielski 		}
624*b1cdbd2cSJim Jagielski 		if( nErr )
625*b1cdbd2cSJim Jagielski 			pImp->CloseFile();
626*b1cdbd2cSJim Jagielski 	}
627*b1cdbd2cSJim Jagielski 	return 0 == nErr;
628*b1cdbd2cSJim Jagielski }
629*b1cdbd2cSJim Jagielski 
630*b1cdbd2cSJim Jagielski 
PutDoc()631*b1cdbd2cSJim Jagielski sal_uInt16 SwTextBlocks::PutDoc()
632*b1cdbd2cSJim Jagielski {
633*b1cdbd2cSJim Jagielski 	sal_uInt16 nIdx = (sal_uInt16)-1;
634*b1cdbd2cSJim Jagielski 	if( pImp )
635*b1cdbd2cSJim Jagielski 	{
636*b1cdbd2cSJim Jagielski 		nErr = pImp->PutDoc();
637*b1cdbd2cSJim Jagielski 		if( !nErr )
638*b1cdbd2cSJim Jagielski 		{
639*b1cdbd2cSJim Jagielski 			pImp->nCur = GetIndex( pImp->aShort );
640*b1cdbd2cSJim Jagielski 			if( pImp->nCur != (sal_uInt16) -1 )
641*b1cdbd2cSJim Jagielski 				pImp->aNames[ pImp->nCur ]->aLong = pImp->aLong;
642*b1cdbd2cSJim Jagielski 			else
643*b1cdbd2cSJim Jagielski 			{
644*b1cdbd2cSJim Jagielski 				pImp->AddName( pImp->aShort, pImp->aLong );
645*b1cdbd2cSJim Jagielski 				pImp->nCur = pImp->GetIndex( pImp->aShort );
646*b1cdbd2cSJim Jagielski 			}
647*b1cdbd2cSJim Jagielski 			if( !pImp->bInPutMuchBlocks )
648*b1cdbd2cSJim Jagielski 				nErr = pImp->MakeBlockList();
649*b1cdbd2cSJim Jagielski 		}
650*b1cdbd2cSJim Jagielski 		if( !pImp->bInPutMuchBlocks )
651*b1cdbd2cSJim Jagielski 		{
652*b1cdbd2cSJim Jagielski 			pImp->CloseFile();
653*b1cdbd2cSJim Jagielski 			pImp->Touch();
654*b1cdbd2cSJim Jagielski 		}
655*b1cdbd2cSJim Jagielski 		nIdx = pImp->nCur;
656*b1cdbd2cSJim Jagielski 	}
657*b1cdbd2cSJim Jagielski 	return nIdx;
658*b1cdbd2cSJim Jagielski }
659*b1cdbd2cSJim Jagielski 
PutText(const String & rShort,const String & rName,const String & rTxt)660*b1cdbd2cSJim Jagielski sal_uInt16 SwTextBlocks::PutText( const String& rShort, const String& rName,
661*b1cdbd2cSJim Jagielski 							  const String& rTxt )
662*b1cdbd2cSJim Jagielski {
663*b1cdbd2cSJim Jagielski 	sal_uInt16 nIdx = (sal_uInt16) -1;
664*b1cdbd2cSJim Jagielski 	if( pImp )
665*b1cdbd2cSJim Jagielski 	{
666*b1cdbd2cSJim Jagielski 		sal_Bool bOk = pImp->bInPutMuchBlocks;
667*b1cdbd2cSJim Jagielski 		if( !bOk )
668*b1cdbd2cSJim Jagielski 		{
669*b1cdbd2cSJim Jagielski 			if( pImp->IsFileChanged() )
670*b1cdbd2cSJim Jagielski 				nErr = ERR_TXTBLOCK_NEWFILE_ERROR;
671*b1cdbd2cSJim Jagielski 			else
672*b1cdbd2cSJim Jagielski 				nErr = pImp->OpenFile( sal_False );
673*b1cdbd2cSJim Jagielski 			bOk = 0 == nErr;
674*b1cdbd2cSJim Jagielski 		}
675*b1cdbd2cSJim Jagielski 		if( bOk )
676*b1cdbd2cSJim Jagielski 		{
677*b1cdbd2cSJim Jagielski 			String aNew( rShort );
678*b1cdbd2cSJim Jagielski 			GetAppCharClass().toUpper( aNew );
679*b1cdbd2cSJim Jagielski 			nErr = pImp->PutText( aNew, rName, rTxt );
680*b1cdbd2cSJim Jagielski 			pImp->nCur = (sal_uInt16) -1;
681*b1cdbd2cSJim Jagielski 			if( !nErr )
682*b1cdbd2cSJim Jagielski 			{
683*b1cdbd2cSJim Jagielski 				nIdx = GetIndex( pImp->aShort );
684*b1cdbd2cSJim Jagielski 				if( nIdx != (sal_uInt16) -1 )
685*b1cdbd2cSJim Jagielski 					pImp->aNames[ nIdx ]->aLong = rName;
686*b1cdbd2cSJim Jagielski 				else
687*b1cdbd2cSJim Jagielski 				{
688*b1cdbd2cSJim Jagielski 					pImp->AddName( pImp->aShort, rName, sal_True );
689*b1cdbd2cSJim Jagielski 					nIdx = pImp->GetIndex( pImp->aShort );
690*b1cdbd2cSJim Jagielski 				}
691*b1cdbd2cSJim Jagielski 				if( !pImp->bInPutMuchBlocks )
692*b1cdbd2cSJim Jagielski 					nErr = pImp->MakeBlockList();
693*b1cdbd2cSJim Jagielski 			}
694*b1cdbd2cSJim Jagielski 		}
695*b1cdbd2cSJim Jagielski 		if( !pImp->bInPutMuchBlocks )
696*b1cdbd2cSJim Jagielski 		{
697*b1cdbd2cSJim Jagielski 			pImp->CloseFile();
698*b1cdbd2cSJim Jagielski 			pImp->Touch();
699*b1cdbd2cSJim Jagielski 		}
700*b1cdbd2cSJim Jagielski 	}
701*b1cdbd2cSJim Jagielski 	return nIdx;
702*b1cdbd2cSJim Jagielski }
703*b1cdbd2cSJim Jagielski 
704*b1cdbd2cSJim Jagielski 
GetDoc()705*b1cdbd2cSJim Jagielski SwDoc* SwTextBlocks::GetDoc()
706*b1cdbd2cSJim Jagielski {
707*b1cdbd2cSJim Jagielski 	if( pImp )
708*b1cdbd2cSJim Jagielski 		return pImp->pDoc;
709*b1cdbd2cSJim Jagielski 	return 0;
710*b1cdbd2cSJim Jagielski }
711*b1cdbd2cSJim Jagielski 
712*b1cdbd2cSJim Jagielski 
ClearDoc()713*b1cdbd2cSJim Jagielski void SwTextBlocks::ClearDoc()
714*b1cdbd2cSJim Jagielski {
715*b1cdbd2cSJim Jagielski 	if( pImp )
716*b1cdbd2cSJim Jagielski 		pImp->ClearDoc();
717*b1cdbd2cSJim Jagielski 	pImp->nCur = (sal_uInt16) -1;
718*b1cdbd2cSJim Jagielski }
719*b1cdbd2cSJim Jagielski 
720*b1cdbd2cSJim Jagielski 
GetFileName() const721*b1cdbd2cSJim Jagielski const String& SwTextBlocks::GetFileName() const
722*b1cdbd2cSJim Jagielski {
723*b1cdbd2cSJim Jagielski 	return pImp->GetFileName();
724*b1cdbd2cSJim Jagielski }
725*b1cdbd2cSJim Jagielski 
726*b1cdbd2cSJim Jagielski 
IsReadOnly() const727*b1cdbd2cSJim Jagielski sal_Bool SwTextBlocks::IsReadOnly() const
728*b1cdbd2cSJim Jagielski {
729*b1cdbd2cSJim Jagielski 	return pImp->bReadOnly;
730*b1cdbd2cSJim Jagielski }
731*b1cdbd2cSJim Jagielski 
IsOnlyTextBlock(sal_uInt16 nIdx) const732*b1cdbd2cSJim Jagielski sal_Bool SwTextBlocks::IsOnlyTextBlock( sal_uInt16 nIdx ) const
733*b1cdbd2cSJim Jagielski {
734*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_False;
735*b1cdbd2cSJim Jagielski 	if( pImp && !pImp->bInPutMuchBlocks )
736*b1cdbd2cSJim Jagielski 	{
737*b1cdbd2cSJim Jagielski 		SwBlockName* pBlkNm = pImp->aNames[ nIdx ];
738*b1cdbd2cSJim Jagielski 		if( !pBlkNm->bIsOnlyTxtFlagInit &&
739*b1cdbd2cSJim Jagielski 			!pImp->IsFileChanged() && !pImp->OpenFile( sal_True ) )
740*b1cdbd2cSJim Jagielski 		{
741*b1cdbd2cSJim Jagielski 			pBlkNm->bIsOnlyTxt = pImp->IsOnlyTextBlock( pBlkNm->aShort );
742*b1cdbd2cSJim Jagielski 			pBlkNm->bIsOnlyTxtFlagInit = sal_True;
743*b1cdbd2cSJim Jagielski 			pImp->CloseFile();
744*b1cdbd2cSJim Jagielski 		}
745*b1cdbd2cSJim Jagielski 		bRet = pBlkNm->bIsOnlyTxt;
746*b1cdbd2cSJim Jagielski 	}
747*b1cdbd2cSJim Jagielski 	return bRet;
748*b1cdbd2cSJim Jagielski }
749*b1cdbd2cSJim Jagielski 
IsOnlyTextBlock(const String & rShort) const750*b1cdbd2cSJim Jagielski sal_Bool SwTextBlocks::IsOnlyTextBlock( const String& rShort ) const
751*b1cdbd2cSJim Jagielski {
752*b1cdbd2cSJim Jagielski 	sal_uInt16 nIdx = pImp->GetIndex( rShort );
753*b1cdbd2cSJim Jagielski 	if( USHRT_MAX != nIdx )
754*b1cdbd2cSJim Jagielski 	{
755*b1cdbd2cSJim Jagielski 		if( pImp->aNames[ nIdx ]->bIsOnlyTxtFlagInit )
756*b1cdbd2cSJim Jagielski 			return pImp->aNames[ nIdx ]->bIsOnlyTxt;
757*b1cdbd2cSJim Jagielski 		return IsOnlyTextBlock( nIdx );
758*b1cdbd2cSJim Jagielski 	}
759*b1cdbd2cSJim Jagielski 
760*b1cdbd2cSJim Jagielski 	ASSERT( !this, "ungueltiger Name" );
761*b1cdbd2cSJim Jagielski 	return sal_False;
762*b1cdbd2cSJim Jagielski }
763*b1cdbd2cSJim Jagielski 
GetMacroTable(sal_uInt16 nIdx,SvxMacroTableDtor & rMacroTbl)764*b1cdbd2cSJim Jagielski sal_Bool SwTextBlocks::GetMacroTable( sal_uInt16 nIdx, SvxMacroTableDtor& rMacroTbl )
765*b1cdbd2cSJim Jagielski {
766*b1cdbd2cSJim Jagielski     sal_Bool bRet = sal_True;
767*b1cdbd2cSJim Jagielski     if ( pImp && !pImp->bInPutMuchBlocks )
768*b1cdbd2cSJim Jagielski         bRet = ( 0 == pImp->GetMacroTable( nIdx, rMacroTbl ) );
769*b1cdbd2cSJim Jagielski     return bRet;
770*b1cdbd2cSJim Jagielski }
771*b1cdbd2cSJim Jagielski 
SetMacroTable(sal_uInt16 nIdx,const SvxMacroTableDtor & rMacroTbl)772*b1cdbd2cSJim Jagielski sal_Bool SwTextBlocks::SetMacroTable( sal_uInt16 nIdx,
773*b1cdbd2cSJim Jagielski 								const SvxMacroTableDtor& rMacroTbl )
774*b1cdbd2cSJim Jagielski {
775*b1cdbd2cSJim Jagielski     sal_Bool bRet = sal_True;
776*b1cdbd2cSJim Jagielski 	if ( pImp && !pImp->bInPutMuchBlocks )
777*b1cdbd2cSJim Jagielski 		bRet = ( 0 == pImp->SetMacroTable( nIdx, rMacroTbl ) );
778*b1cdbd2cSJim Jagielski     return bRet;
779*b1cdbd2cSJim Jagielski }
780*b1cdbd2cSJim Jagielski 
StartPutMuchBlockEntries()781*b1cdbd2cSJim Jagielski sal_Bool SwTextBlocks::StartPutMuchBlockEntries()
782*b1cdbd2cSJim Jagielski {
783*b1cdbd2cSJim Jagielski 	sal_Bool bRet = sal_False;
784*b1cdbd2cSJim Jagielski 	if( !IsOld() && pImp )
785*b1cdbd2cSJim Jagielski 		bRet = pImp->PutMuchEntries( sal_True );
786*b1cdbd2cSJim Jagielski 	return bRet;
787*b1cdbd2cSJim Jagielski }
788*b1cdbd2cSJim Jagielski 
EndPutMuchBlockEntries()789*b1cdbd2cSJim Jagielski void SwTextBlocks::EndPutMuchBlockEntries()
790*b1cdbd2cSJim Jagielski {
791*b1cdbd2cSJim Jagielski 	if( pImp )
792*b1cdbd2cSJim Jagielski 		pImp->PutMuchEntries( sal_False );
793*b1cdbd2cSJim Jagielski }
794*b1cdbd2cSJim Jagielski 
795*b1cdbd2cSJim Jagielski /*-- 20.09.2004 10:25:33---------------------------------------------------
796*b1cdbd2cSJim Jagielski 
797*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
GetBaseURL() const798*b1cdbd2cSJim Jagielski String    SwTextBlocks::GetBaseURL() const
799*b1cdbd2cSJim Jagielski {
800*b1cdbd2cSJim Jagielski     String sRet;
801*b1cdbd2cSJim Jagielski     if(pImp)
802*b1cdbd2cSJim Jagielski         sRet = pImp->GetBaseURL();
803*b1cdbd2cSJim Jagielski     return sRet;
804*b1cdbd2cSJim Jagielski }
805*b1cdbd2cSJim Jagielski /*-- 20.09.2004 10:25:33---------------------------------------------------
806*b1cdbd2cSJim Jagielski 
807*b1cdbd2cSJim Jagielski   -----------------------------------------------------------------------*/
SetBaseURL(const String & rURL)808*b1cdbd2cSJim Jagielski void SwTextBlocks::SetBaseURL( const String& rURL )
809*b1cdbd2cSJim Jagielski {
810*b1cdbd2cSJim Jagielski     if(pImp)
811*b1cdbd2cSJim Jagielski         pImp->SetBaseURL(rURL);
812*b1cdbd2cSJim Jagielski }
813*b1cdbd2cSJim Jagielski 
814*b1cdbd2cSJim Jagielski 
815