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