xref: /trunk/main/sw/source/core/inc/swblocks.hxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef _SWBLOCKS_HXX
28 #define _SWBLOCKS_HXX
29 
30 #include <tools/string.hxx>
31 
32 #ifndef _DATE_HXX //autogen
33 #include <tools/datetime.hxx>
34 #endif
35 #include <svl/svarray.hxx>
36 
37 
38 class SfxMedium;
39 class SwPaM;
40 class SwDoc;
41 class SvxMacroTableDtor;
42 
43 // Name eines Textblocks:
44 
45 class SwBlockName
46 {
47     friend class SwImpBlocks;
48     friend class Sw2TextBlocks;
49     sal_uInt16 nHashS, nHashL;              // Hash-Codes zum Checken
50     long   nPos;                        // Dateiposition (SW2-Format)
51 public:
52     String aShort;                      // Short name
53     String aLong;                       // Long name
54     String aPackageName;                // Package name
55     sal_Bool bIsOnlyTxtFlagInit : 1;        // ist das Flag gueltig?
56     sal_Bool bIsOnlyTxt : 1;                // unformatted text
57     sal_Bool bInPutMuchBlocks : 1;          // put serveral block entries
58 
59     SwBlockName( const String& rShort, const String& rLong, long n );
60     SwBlockName( const String& rShort, const String& rLong, const String& rPackageName );
61 
62     // fuer das Einsortieren in das Array
63     int operator==( const SwBlockName& r ) { return aShort == r.aShort; }
64     int operator< ( const SwBlockName& r ) { return aShort <  r.aShort; }
65 };
66 
67 SV_DECL_PTRARR_SORT( SwBlockNames, SwBlockName*, 10, 10 )
68 
69 
70 class SwImpBlocks
71 {
72     friend class SwTextBlocks;
73 protected:
74     String aFile;                       // physikalischer Dateiname
75     String aName;                       // logischer Name der Datei
76     String aCur;                        // aktueller Text
77     String aShort, aLong;               // Kurz- und Langname (PutDoc)
78     String sBaseURL;                    // base URL - has to be set at the Readers and Writers
79     SwBlockNames aNames;                // Liste aller Bausteine
80     Date aDateModified;                 // fuers abgleichen bei den Aktionen
81     Time aTimeModified;
82     SwDoc* pDoc;                        // Austauschdokument
83     sal_uInt16 nCur;                        // aktueller Index
84     sal_Bool bReadOnly : 1;
85     sal_Bool bInPutMuchBlocks : 1;          // put serveral block entries
86     sal_Bool bInfoChanged : 1;              // any Info of TextBlock is changed
87 
88     SwImpBlocks( const String&, sal_Bool = sal_False );
89     virtual ~SwImpBlocks();
90 
91     static short GetFileType( const String& );
92     virtual short GetFileType() const = 0;
93 #define SWBLK_NO_FILE   0               // nicht da
94 #define SWBLK_NONE      1               // keine TB-Datei
95 #define SWBLK_SW2       2               // SW2-Datei
96 #define SWBLK_SW3       3               // SW3-Datei
97 #define SWBLK_XML       4               // XML Block List
98 
99     virtual void   ClearDoc();                  // Doc-Inhalt loeschen
100     SwPaM* MakePaM();                   // PaM ueber Doc aufspannen
101     virtual void   AddName( const String&, const String&, sal_Bool bOnlyTxt = sal_False );
102     sal_Bool   IsFileChanged() const;
103     void   Touch();
104 
105 public:
106     static sal_uInt16 Hash( const String& );        // Hashcode fuer Blocknamen
107     sal_uInt16 GetCount() const;                    // Anzahl Textbausteine ermitteln
108     sal_uInt16 GetIndex( const String& ) const;     // Index fuer Kurznamen ermitteln
109     sal_uInt16 GetLongIndex( const String& ) const; //Index fuer Langnamen ermitteln
110     const String& GetShortName( sal_uInt16 ) const; // Kurzname fuer Index zurueck
111     const String& GetLongName( sal_uInt16 ) const;  // Langname fuer Index zurueck
112     const String& GetPackageName( sal_uInt16 ) const;   // Langname fuer Index zurueck
113 
114     const String& GetFileName() const {return aFile;}   // phys. Dateinamen liefern
115     void SetName( const String& rName )                 // logic name
116         { aName = rName; bInfoChanged = sal_True; }
117     const String & GetName( void )
118         { return aName; }
119 
120     const String&       GetBaseURL() const { return sBaseURL;}
121     void                SetBaseURL( const String& rURL ) { sBaseURL = rURL; }
122 
123     virtual sal_uLong Delete( sal_uInt16 ) = 0;
124     virtual sal_uLong Rename( sal_uInt16, const String&, const String& ) = 0;
125     virtual sal_uLong CopyBlock( SwImpBlocks& rImp, String& rShort, const String& rLong) = 0;
126     virtual sal_uLong GetDoc( sal_uInt16 ) = 0;
127     virtual sal_uLong GetDocForConversion( sal_uInt16 );
128     virtual sal_uLong BeginPutDoc( const String&, const String& ) = 0;
129     virtual sal_uLong PutDoc() = 0;
130     virtual sal_uLong GetText( sal_uInt16, String& ) = 0;
131     virtual sal_uLong PutText( const String&, const String&, const String& ) = 0;
132     virtual sal_uLong MakeBlockList() = 0;
133 
134     virtual sal_uLong OpenFile( sal_Bool bReadOnly = sal_True ) = 0;
135     virtual void  CloseFile() = 0;
136 
137     virtual sal_Bool IsOnlyTextBlock( const String& rShort ) const;
138 
139     virtual sal_uLong GetMacroTable( sal_uInt16 nIdx, SvxMacroTableDtor& rMacroTbl,
140                                  sal_Bool bFileAlreadyOpen = sal_False );
141     virtual sal_uLong SetMacroTable( sal_uInt16 nIdx,
142                                  const SvxMacroTableDtor& rMacroTbl,
143                                  sal_Bool bFileAlreadyOpen = sal_False );
144     virtual sal_Bool PutMuchEntries( sal_Bool bOn );
145 };
146 
147 /*
148 class Sw3Persist : public SvPersist
149 {
150     virtual void FillClass( SvGlobalName * pClassName,
151                             sal_uLong * pClipFormat,
152                             String * pAppName,
153                             String * pLongUserName,
154                             String * pUserName,
155                             sal_Int32 nFileFormat=SOFFICE_FILEFORMAT_CURRENT ) const;
156     virtual sal_Bool Save();
157     virtual sal_Bool SaveCompleted( SvStorage * );
158 public:
159     Sw3Persist();
160 };
161 
162 class SwSwgReader;
163 
164 class Sw2TextBlocks : public SwImpBlocks
165 {
166     SvPersistRef refPersist;            // Fuer OLE-Objekte
167     SwSwgReader* pRdr;                  // Lese-Routinen
168     SfxMedium* pMed;                    // der logische Input-Stream
169     String* pText;                      // String fuer GetText()
170     long   nDocStart;                   // Beginn des Doc-Records
171     long   nDocSize;                    // Laenge des Doc-Records
172     long   nStart;                      // Beginn des CONTENTS-Records
173     long   nSize;                       // Laenge des CONTENTS-Records
174     sal_uInt16 nNamedFmts;                  // benannte Formate
175     sal_uInt16 nColls;                      // Text-Collections
176     sal_uInt16 nBlks;                       // Anzahl Elemente im CONTENTS-Record
177 public:
178     Sw2TextBlocks( const String& );
179     virtual ~Sw2TextBlocks();
180     virtual sal_uLong Delete( sal_uInt16 );
181     virtual sal_uLong Rename( sal_uInt16, const String&, const String& );
182     virtual sal_uLong CopyBlock( SwImpBlocks& rImp, String& rShort, const String& rLong);
183     virtual sal_uLong GetDoc( sal_uInt16 );
184     virtual sal_uLong BeginPutDoc( const String&, const String& );
185     virtual sal_uLong PutDoc();
186     virtual sal_uLong GetText( sal_uInt16, String& );
187     virtual sal_uLong PutText( const String&, const String&, const String& );
188     virtual sal_uLong MakeBlockList();
189     virtual short GetFileType( ) const;
190     sal_uLong LoadDoc();
191 
192     virtual sal_uLong OpenFile( sal_Bool bReadOnly = sal_True );
193     virtual void  CloseFile();
194 
195     void StatLineStartPercent();                // zum Anzeigen des Prozessbars
196 };
197 
198 class Sw3Io;
199 class Sw3IoImp;
200 
201 class Sw3TextBlocks : public SwImpBlocks
202 {
203     Sw3Io*       pIo3;
204     Sw3IoImp*    pImp;
205     sal_Bool         bAutocorrBlock;
206 
207 public:
208     Sw3TextBlocks( const String& );
209     Sw3TextBlocks( SvStorage& );
210     virtual ~Sw3TextBlocks();
211     virtual sal_uLong Delete( sal_uInt16 );
212     virtual sal_uLong Rename( sal_uInt16, const String&, const String& );
213     virtual sal_uLong CopyBlock( SwImpBlocks& rImp, String& rShort, const String& rLong);
214     virtual sal_uLong GetDoc( sal_uInt16 );
215     virtual sal_uLong GetDocForConversion( sal_uInt16 );
216     virtual sal_uLong BeginPutDoc( const String&, const String& );
217     virtual sal_uLong PutDoc();
218     virtual void SetDoc( SwDoc * pNewDoc);
219     virtual sal_uLong GetText( sal_uInt16, String& );
220     virtual sal_uLong PutText( const String&, const String&, const String& );
221     virtual sal_uLong MakeBlockList();
222     virtual short GetFileType( ) const;
223 
224     virtual sal_uLong OpenFile( sal_Bool bReadOnly = sal_True );
225     virtual void  CloseFile();
226 
227     // Methoden fuer die neue Autokorrektur
228     sal_uLong GetText( const String& rShort, String& );
229     SwDoc* GetDoc() const { return pDoc; }
230 
231     virtual sal_Bool IsOnlyTextBlock( const String& rShort ) const;
232 
233     virtual sal_uLong GetMacroTable( sal_uInt16, SvxMacroTableDtor& rMacroTbl,
234                                  sal_Bool bFileAlreadyOpen = sal_False );
235     virtual sal_uLong SetMacroTable( sal_uInt16 nIdx,
236                                  const SvxMacroTableDtor& rMacroTbl,
237                                  sal_Bool bFileAlreadyOpen = sal_False );
238 
239     void ReadInfo();
240 };
241 */
242 #endif
243