xref: /AOO41X/main/sw/inc/swtypes.hxx (revision 1ecadb572e7010ff3b3382ad9bf179dbc6efadbb)
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 _SWTYPES_HXX
28 #define _SWTYPES_HXX
29 #include <tools/solar.h>
30 #include <SwGetPoolIdFromName.hxx>
31 
32 #ifndef INCLUDED_LIMITS_H
33 #include <limits.h> 	//fuer LONG_MAX
34 #define INCLUDED_LIMITS_H
35 #endif
36 
37 #ifdef PM20
38 #include <stdlib.h>
39 #endif
40 #include <com/sun/star/uno/Reference.h>
41 #include "swdllapi.h"
42 #include <i18npool/lang.h>
43 // wenn das hier geaendert wird, dann auch im globals.hrc aendern!!!
44 //#define SW_FILEFORMAT_40 SOFFICE_FILEFORMAT_40
45 
46 namespace com { namespace sun { namespace star {
47 	namespace linguistic2{
48 		class XDictionaryList;
49 		class XSpellChecker1;
50 		class XHyphenator;
51 		class XThesaurus;
52 	}
53 	namespace beans{
54 		class XPropertySet;
55 	}
56 }}}
57 namespace utl{
58 	class TransliterationWrapper;
59 }
60 
61 class Size;
62 class ResMgr;
63 class UniString;
64 class ByteString;
65 class SwPathFinder;
66 class Graphic;
67 class OutputDevice;
68 class CharClass;
69 class LocaleDataWrapper;
70 class CollatorWrapper;
71 
72 typedef long SwTwips;
73 #define INVALID_TWIPS	LONG_MAX
74 #define TWIPS_MAX		(LONG_MAX - 1)
75 
76 #define MM50   283	// 1/2 cm in TWIPS
77 // --> OD 2004-06-18 #i19922# - constant for minimal page header/footer height of 1mm
78 const SwTwips cMinHdFtHeight = 56;
79 
80 #define MINFLY 23	//Minimalgroesse fuer FlyFrms
81 #define MINLAY 23	//Minimalgroesse anderer Frms
82 
83 // Default-Spaltenabstand zweier Textspalten entspricht 0.3 cm
84 #define DEF_GUTTER_WIDTH (MM50 / 5 * 3)
85 
86 //Minimale Distance (Abstand zum Text) fuer das BorderAttribut, damit
87 //die aligned'en Linien nicht geplaettet werden.
88 //28 Twips == 0,4mm
89 #define MIN_BORDER_DIST 28
90 
91 	/* minimaler Dokmentrand */
92 const SwTwips lMinBorder = 1134;
93 
94 //Die Wiesenbreite links neben und ueber dem Dokument.
95 //Die halbe Wiesenbreite ist der Abstand zwischen den Seiten.
96 #define DOCUMENTBORDER  568L
97 #define GAPBETWEENPAGES 284L
98 
99 //initiale UndoActionCount
100 #define UNDO_ACTION_COUNT 20
101 
102 // Konstante Strings
103 SW_DLLPUBLIC extern UniString aEmptyStr;			// ""
104 extern ByteString aEmptyByteStr;	// ""
105 SW_DLLPUBLIC extern UniString aDotStr;			// '.'
106 
107 //Zum Einfuegen von Beschriftungen (wie bzw. wo soll eingefuegt werden).
108 //Hier weil ein eigenes hxx nicht lohnt und es sonst nirgendwo so recht
109 //hinpasst.
110 enum SwLabelType
111 {
112 	LTYPE_TABLE,	//Beschriftung einer Tabelle
113 	LTYPE_OBJECT,	//Beschriftung von Grafik oder OLE
114 	LTYPE_FLY,		//Beschriftung eines (Text-)Rahmens
115 	LTYPE_DRAW		//Beschriftung eines Zeichen-Objektes
116 };
117 
118 
119 const sal_uInt8 OLD_MAXLEVEL = 5;
120 const sal_uInt8 MAXLEVEL = 10;		//Ehemals numrule.hxx
121 const sal_uInt8 NO_NUM 		= 200;  //Ehemals numrule.hxx
122 //const sal_uInt8 NO_NUMBERING = 201;  //Ehemals numrule.hxx	//#outline level,removed by zhaojianwei
123 //const sal_uInt8 NO_INIT 		= 202;  //Ehemals numrule.hxx
124 
125 // fuer Absaetze mit NO_NUM aber auf unterschiedlichen Leveln
126 // DAMIT entfaellt das NO_NUM !!!!
127 const sal_uInt8 NO_NUMLEVEL  = 0x20;	// wird mit den Levels verodert
128 
129 
130 /*
131  * Nette Funktionen als MACRO oder inline
132  */
133 
134 /* ein KiloByte sind 1024 Byte */
135 #define KB 1024
136 
137 #define SET_CURR_SHELL( shell ) CurrShell aCurr( shell )
138 
139 // pPathFinder wird von der UI initialisiert. Die Klasse liefert alle
140 // benoetigten Pfade.
141 extern SwPathFinder *pPathFinder;
142 
143 // Werte fuer die Einzuege an der Nummerierung und BulletListe
144 // (fuer die weiteren Ebenen sind die Werte mit den Ebenen+1 zu
145 //	multiplizieren; Ebenen 0..4 !!!)
146 
147 // -> #i30312#
148 const sal_uInt16 lBullIndent = 1440/4;
149 const short lBullFirstLineOffset = -lBullIndent;
150 const sal_uInt16 lNumIndent = 1440/4;
151 const short lNumFirstLineOffset = -lNumIndent;
152 const short lOutlineMinTextDistance = 216; // 0.15 inch = 0.38 cm
153 // <- #i30312#
154 
155 // Anzahl der SystemField-Types vom SwDoc
156 #define INIT_FLDTYPES	32
157 // Anzahl der vordefinierten Seq-Feldtypen. Es handelt sich dabei
158 // immer um die letzen Felder vor INIT_FLDTYPES
159 #define INIT_SEQ_FLDTYPES	4
160 
161 //Die ehemaligen Rendevouz-Ids leben weiter:
162 //Es gibt Ids fuer die Anker (SwFmtAnchor) und ein paar weitere die nur fuer
163 //Schnittstellen Bedeutung haben (SwDoc).
164 enum RndStdIds
165 {
166     FLY_AT_PARA,        // anchored at paragraph
167     FLY_AS_CHAR,        // anchored as character
168     FLY_AT_PAGE,        // anchored at page
169     FLY_AT_FLY,         // anchored at frame
170     FLY_AT_CHAR,        // anchored at character
171 						//Der Rest wird nur fuer SS benutzt.
172 	RND_STD_HEADER,
173 	RND_STD_FOOTER,
174 	RND_STD_HEADERL,
175 	RND_STD_HEADERR,
176 	RND_STD_FOOTERL,
177 	RND_STD_FOOTERR,
178 
179 	RND_DRAW_OBJECT		// ein Draw-Object !! nur fuer die SwDoc-Schnittstelle!
180 };
181 
182 
183 extern ResMgr* pSwResMgr;			// steht in swapp0.cxx
184 #define SW_RES(i)		ResId(i,*pSwResMgr)
185 #define SW_RESSTR(i)	UniString(ResId(i,*pSwResMgr))
186 
187 ::com::sun::star::uno::Reference<
188 	::com::sun::star::linguistic2::XSpellChecker1 >	GetSpellChecker();
189 ::com::sun::star::uno::Reference<
190 	::com::sun::star::linguistic2::XHyphenator >	GetHyphenator();
191 ::com::sun::star::uno::Reference<
192 	::com::sun::star::linguistic2::XThesaurus >		GetThesaurus();
193 ::com::sun::star::uno::Reference<
194 	::com::sun::star::beans::XPropertySet >			GetLinguPropertySet();
195 
196 // reutns the twip size of this graphic
197 SW_DLLPUBLIC Size GetGraphicSizeTwip( const Graphic&, OutputDevice* pOutDev );
198 
199 
200 // Seperator fuer Sprunge im Dokument auf verschiedene Inhalttype
201 const sal_Unicode cMarkSeperator = '|';
202 extern const sal_Char* __FAR_DATA pMarkToTable;				// Strings stehen
203 extern const sal_Char* __FAR_DATA pMarkToFrame;             // im Init.cxx
204 extern const sal_Char* __FAR_DATA pMarkToRegion;
205 SW_DLLPUBLIC extern const sal_Char* __FAR_DATA pMarkToOutline;
206 extern const sal_Char* __FAR_DATA pMarkToText;
207 extern const sal_Char* __FAR_DATA pMarkToGraphic;
208 extern const sal_Char* __FAR_DATA pMarkToOLE;
209 
210 #ifndef DB_DELIM							// Ist in OFA definiert!!!
211 #define DB_DELIM ((sal_Unicode)0xff)		// Datenbank <-> Tabellen-Trenner
212 #endif
213 
214 
215 typedef sal_uInt16 SetAttrMode;
216 
217 namespace nsSetAttrMode
218 {
219 	const SetAttrMode SETATTR_DEFAULT        = 0x0000;	// default
220 	const SetAttrMode SETATTR_DONTEXPAND 	 = 0x0001;	// TextAttribute nicht weiter expand.
221 	const SetAttrMode SETATTR_DONTREPLACE	 = 0x0002;	// kein anderes TextAttrib verdraengen
222 
223 	const SetAttrMode SETATTR_NOTXTATRCHR	 = 0x0004;	// bei Attr ohne Ende kein 0xFF einfuegen
224 	const SetAttrMode SETATTR_NOHINTADJUST	 = 0x0008; 	// keine Zusammenfassung von Bereichen.
225 	const SetAttrMode SETATTR_NOFORMATATTR	 = 0x0010;	// nicht zum FormatAttribut umwandeln
226 	const SetAttrMode SETATTR_DONTCHGNUMRULE = 0x0020; 	// nicht die NumRule veraendern
227 	const SetAttrMode SETATTR_APICALL		 = 0x0040;	// called from API (all UI related
228 										                // functionality will be disabled)
229     /// force hint expand (only matters for hints with CH_TXTATR)
230     const SetAttrMode SETATTR_FORCEHINTEXPAND= 0x0080;
231     /// the inserted item is a copy -- intended for use in ndtxt.cxx
232     const SetAttrMode SETATTR_IS_COPY        = 0x0100;
233 }
234 
235 //Umrechnung Twip<-> 1/100 mm fuer UNO
236 
237 #define TWIP_TO_MM100(TWIP) 	((TWIP) >= 0 ? (((TWIP)*127L+36L)/72L) : (((TWIP)*127L-36L)/72L))
238 #define MM100_TO_TWIP(MM100)	((MM100) >= 0 ? (((MM100)*72L+63L)/127L) : (((MM100)*72L-63L)/127L))
239 #define TWIP_TO_MM100_UNSIGNED(TWIP)     ((((TWIP)*127L+36L)/72L))
240 #define MM100_TO_TWIP_UNSIGNED(MM100)    ((((MM100)*72L+63L)/127L))
241 
242 #define SW_ISPRINTABLE( c ) ( c >= ' ' && 127 != c )
243 
244 #ifndef SW_CONSTASCII_DECL
245 #define SW_CONSTASCII_DECL( n, s ) n[sizeof(s)]
246 #endif
247 #ifndef SW_CONSTASCII_DEF
248 #define SW_CONSTASCII_DEF( n, s ) n[sizeof(s)] = s
249 #endif
250 
251 
252 #define CHAR_HARDBLANK		((sal_Unicode)0x00A0)
253 #define CHAR_HARDHYPHEN		((sal_Unicode)0x2011)
254 #define CHAR_SOFTHYPHEN		((sal_Unicode)0x00AD)
255 #define CHAR_RLM            ((sal_Unicode)0x200F)
256 #define CHAR_LRM            ((sal_Unicode)0x200E)
257 #define CHAR_ZWSP           ((sal_Unicode)0x200B)
258 #define CHAR_ZWNBSP         ((sal_Unicode)0x2060)
259 
260 
261 // returns the APP - CharClass instance - used for all ToUpper/ToLower/...
262 SW_DLLPUBLIC CharClass& GetAppCharClass();
263 SW_DLLPUBLIC LanguageType GetAppLanguage();
264 
265 
266 #if 0
267 // I18N doesn't get this right, can't specify more than one to ignore
268 #define SW_COLLATOR_IGNORES ( \
269 	::com::sun::star::i18n::CollatorOptions::CollatorOptions_IGNORE_CASE | \
270 	::com::sun::star::i18n::CollatorOptions::CollatorOptions_IGNORE_KANA | \
271 	::com::sun::star::i18n::CollatorOptions::CollatorOptions_IGNORE_WIDTH )
272 #else
273 #define SW_COLLATOR_IGNORES ( \
274 	::com::sun::star::i18n::CollatorOptions::CollatorOptions_IGNORE_CASE )
275 #endif
276 
277 SW_DLLPUBLIC CollatorWrapper& GetAppCollator();
278 SW_DLLPUBLIC CollatorWrapper& GetAppCaseCollator();
279 
280 SW_DLLPUBLIC const ::utl::TransliterationWrapper& GetAppCmpStrIgnore();
281 
282 // --> OD 2004-06-30 #i28701# - moved from <frame.hxx>
283 //fuer Prepare() zur Benachrichtigung des Inhaltes durch das Layout auf
284 //dem kurzen Dienstweg.
285 //Der Inhalt sorgt dafuer, dass beim naechsten Aufruf von ::Format() das
286 //minimal notwendige berechnet wird.
287 enum PrepareHint
288 {
289     PREP_BEGIN,             //BEGIN
290     PREP_CLEAR = PREP_BEGIN,//Komplett neuformatieren.
291     PREP_WIDOWS_ORPHANS,    //Nur Witwen- und Waisen-Regelung pruefen und ggf.
292                             //Aufspalten.
293     PREP_FIXSIZE_CHG,       //Die FixSize hat sich veraendert.
294     PREP_FOLLOW_FOLLOWS,    //Follow ist jetzt moeglicherweise direkter
295                             //Nachbar.
296     PREP_ADJUST_FRM,        //Groesse per Grow/Shrink Ausrichten ohne zu
297                             //Formatieren.
298     PREP_FLY_CHGD,          //Ein FlyFrm hat sich (Groesse) veraendert.
299     PREP_FLY_ATTR_CHG,      //Ein FlyFrm hat seine Attribute veraendert
300                             //(z.B. Umlauf)
301     PREP_FLY_ARRIVE,        //Ein FlyFrm ueberlappt den Bereich jetzt neu.
302     PREP_FLY_LEAVE,         //Ein FlyFrm hat den Bereich verlassen.
303     PREP_FTN,               //Fussnoten-Invalidierung
304     PREP_POS_CHGD,          //Position des Frm hat sich verandert
305                             //(Zum Fly-Umbruch pruefen). Im void* des Prepare()
306                             //wird ein sal_Bool& uebergeben, dieser zeigt mit sal_True,
307                             //dass ein Format ausgefuehrt wurde.
308     PREP_UL_SPACE,          //UL-Space hat sich veraendert, TxtFrms muessen
309                             //den Zeilenabstand neu kalkulieren.
310     PREP_MUST_FIT,          //Frm passen machen (aufspalten) auch wenn die
311                             //Attribute es nicht erlauben (z.B. zusammenhalten).
312     PREP_WIDOWS,            // Ein Follow stellt fest, dass in ihm die Orphans-
313                             // regel zuschlaegt und verschickt an seinen
314                             // Vorgaenger (Master/Follow) ein PREP_WIDOWS
315     PREP_QUOVADIS,          // Wenn eine Fussnote _zwischen_ zwei Absaetzen
316                             // aufgespalten werden muss, dann muss der
317                             // letzte auf der Seite noch ein QUOVADIS bekommen
318                             // damit er den Text hineinformatiert.
319     PREP_BOSS_CHGD,         // Wenn ein Frm die Spalte/Seite wechselt, wird dieses
320                             // Zusatzprepare zum POS_CHGD im MoveFwd/Bwd
321                             // verschickt (Ftn-Nummern joinen etc.)
322                             // Die Richtung wird ueber pVoid mitgeteilt:
323                             //     MoveFwd: pVoid == 0
324                             //     MoveBwd: pVoid == pOldPage
325     PREP_SWAP,              //Grafiken Swappen, fuer Grafiken im sichtbaren
326                             //Bereich.
327     PREP_REGISTER,          //Registerhaltige Frames invalidieren
328     PREP_FTN_GONE,          //Ein Follow verliert eine Fussnote, ggf. kann seine erste
329                             //Zeile hochrutschen
330     PREP_MOVEFTN,           //eine Fussnote wechselt die Seite, der Inhalt bekommt
331                             //zunaechst eine Hoehe von Null, damit nicht zuviel
332                             //Unruhe entsteht. Beim Formatieren prueft er, ob er
333                             //ueberhaupt passt und wechselt ggf. unbemerkt wieder
334                             //die Seite.
335     PREP_ERGOSUM,           //wg. Bewegung in FtnFrms QuoVadis/ErgoSum pruefen
336     PREP_END                //END
337 };
338 // <--
339 
340 #endif
341