update dev300-m58
[ooovba.git] / svtools / inc / sgvmain.hxx
blobc7c2dfd9a590a45b6860c29916f6ead3e4794a5d
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: sgvmain.hxx,v $
10 * $Revision: 1.6 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef _SGVMAIN_HXX
32 #define _SGVMAIN_HXX
34 #include <vcl/font.hxx>
35 #include <vcl/outdev.hxx>
36 #include <vcl/virdev.hxx>
39 #define UCHAR unsigned char
41 struct PointType {
42 INT16 x;
43 INT16 y;
46 #define SgfDpmm 40
48 #define DtHdSize 256
49 class DtHdType {
50 public:
51 BYTE Reserved[256];
52 friend SvStream& operator>>(SvStream& rIStream, DtHdType& rDtHd);
53 friend void DtHdOverSeek(SvStream& rInp);
57 struct Seitenformat {
58 PointType Size; // 0.00mm...819.175mm (Papiergr��e)
59 INT16 RandL; // links Rand auf
60 INT16 RandR; // rechts dem Papier
61 INT16 RandO; // oben Rand auf
62 INT16 RandU; // unten dem Papier
63 BYTE PColor; // Future Use
64 BYTE PIntens; // erst recht Future use
65 // BOOL BorderClip; // Objekte am Rand abschneiden (Schummel wg. Allignment unter NT)
69 #define PageSize 146
70 class PageType {
71 public:
72 UINT32 Next; // N�chste Seite
73 UINT32 nList; // Objektdaten, erster Record
74 UINT32 ListEnd; // Objektdaten, letzter Record
75 Seitenformat Paper; // Papierdaten
76 BOOL BorderClip; // Objekte am Rand abschneiden (Schummel wg. Allignment unter NT)
77 BYTE StdPg; // welche Standardseite einblenden ?
78 PointType U; // Nullpunkt
79 INT16 HlpLnH[20]; // Hilfslinien
80 INT16 HlpLnV[20];
81 BYTE LnAnzH;
82 BYTE LnAnzV;
83 UCHAR PgName[32]; // Seitenname
84 friend SvStream& operator>>(SvStream& rIStream, PageType& rPage);
88 enum ObjArtType {ObjStrk,ObjRect,ObjPoly,ObjCirc,ObjSpln,
89 ObjText,ObjGrup,ObjBmap,ObjVirt,ObjTxtX,ObjMaxi};
91 struct ObjLineType {
92 BYTE LFarbe; // [Index]
93 BYTE LBFarbe; // [Index]
94 BYTE LIntens; // [%]
95 BYTE LMuster; // [Index] inkl. Transparenz
96 INT16 LMSize; // [Koeffizient/100]
97 INT16 LDicke; // Strichst�rke
100 struct ObjAreaType {
101 BYTE FFarbe; // [Index]
102 BYTE FBFarbe; // [Index]
103 BYTE FIntens; // [%]
104 BYTE FDummy1; //
105 INT16 FDummy2; //
106 UINT16 FMuster; // [Index] inkl. Invers, Transparenz
109 #define ObjTextTypeSize 64
110 class ObjTextType {
111 public:
112 ObjLineType L; // Text-Outline (future)
113 ObjAreaType F; // Text innen
114 UINT16 FontLo,FontHi;// z.B. 92500 (CG Times), zweigeteilt wegen DWordAllign in TextType.
115 UINT16 Grad; // 0.5..32767.5 Pt - bei 1000 Pt sollte aber schlu� sein
116 UINT16 Breite; // 1..65535% bitte nicht mehr als 500%
117 BYTE Justify; // 2 Bit Vert (Hi), 3 Bit Hor (Lo)
118 BYTE Kapit; // 1..255%
119 UINT16 Schnitt; // 8 Flags
120 UINT16 LnFeed; // 1..32767% vom max. Schriftgrad der Zeile
121 UINT16 Slant; // Kursivwinkel 0.00..89.99� default 15.00� doppelt Breit angesehen)
122 BYTE ZAbst; // Zeichenabstand 0..255% (0=auf der Stelle; 100=normal; 200=Zeichen wird als
123 INT8 ChrVPos; // Zeichen V-Position default 0= on Baseline, 10= 5Pt drunter (-64..63�)
124 ObjLineType ShdL; // Schatten-Outline (neu 2.0)
125 ObjAreaType ShdF; // Schatten-innen (neu 2.0)
126 PointType ShdVers; // Schattenversatz Max.300.00%
127 BOOL ShdAbs; // True-> Schattenversatz ist absolut statt relativ zum Schriftgrad
128 BOOL NoSpc; // True-> kein Zwischenraum (f�r BackArea)
129 ObjAreaType BackF; // Hintergrundfl�che
130 UINT32 GetFont();
131 void SetFont(UINT32 FontID);
134 class Obj0Type { // SuperClass f�r Apple-VMT
135 public:
136 virtual void Draw(OutputDevice& rOut);
137 virtual ~Obj0Type() {}
140 #define ObjkSize 20 /* eigentlich 21. Wg. Allignment ist Flags jedoch verschoben worden*/
141 class ObjkType: public Obj0Type { // Grundkomponenten aller Stardraw-Objekte
142 public:
143 UINT32 Last;
144 UINT32 Next;
145 UINT16 MemSize; // in Bytes
146 PointType ObjMin; // XY-Minimum des Objekts
147 PointType ObjMax; // XY-Maximum des Objekts
148 BYTE Art;
149 BYTE Layer;
150 // BYTE Flags; // (Schummel f�r Allignment unter NT)
151 friend SvStream& operator>>(SvStream& rIStream, ObjkType& rObjk);
152 friend BOOL ObjOverSeek(SvStream& rInp, ObjkType& rObjk);
153 virtual void Draw(OutputDevice& rOut);
157 #define StrkSize 38
158 class StrkType: public ObjkType {
159 public:
160 BYTE Flags; // (Schummel f�r Allignment unter NT)
161 BYTE LEnden; // Linienenden
162 ObjLineType L;
163 PointType Pos1; // Anfangspunkt
164 PointType Pos2; // Endpunkt
165 friend SvStream& operator>>(SvStream& rIStream, StrkType& rStrk);
166 virtual void Draw(OutputDevice& rOut);
170 #define RectSize 52
171 class RectType: public ObjkType {
172 public:
173 BYTE Flags; // (Schummel f�r Allignment unter NT)
174 BYTE Reserve;
175 ObjLineType L;
176 ObjAreaType F;
177 PointType Pos1; // LO-Ecke = Bezugspunkt
178 PointType Pos2; // R-Ecke
179 INT16 Radius; // Eckenradius
180 UINT16 DrehWink; // 315...<45
181 UINT16 Slant; // >270...<90
182 friend SvStream& operator>>(SvStream& rIStream, RectType& rRect);
183 virtual void Draw(OutputDevice& rOut);
187 #define PolySize 44
188 class PolyType: public ObjkType { // identisch mit Spline !
189 public:
190 BYTE Flags; // (Schummel f�r Allignment unter NT)
191 BYTE LEnden; // nur f�r Polyline
192 ObjLineType L;
193 ObjAreaType F; // nicht f�r Polyline
194 BYTE nPoints;
195 BYTE Reserve;
196 UINT32 SD_EckP; // Zeiger auf die Eckpunkte (StarDraw)
197 PointType* EckP; // Zeiger auf die Eckpunkte (StarView (wird nicht von Disk gelesen!))
198 friend SvStream& operator>>(SvStream& rIStream, PolyType& rPoly);
199 virtual void Draw(OutputDevice& rOut);
201 #define PolyClosBit 0x01 // Unterarten von Poly: 0: PolyLine 1: Polygon
204 #define SplnSize 44
205 class SplnType: public ObjkType { // identisch mit Poly !
206 public:
207 BYTE Flags; // (Schummel f�r Allignment unter NT)
208 BYTE LEnden; // nur f�r nSpline
209 ObjLineType L;
210 ObjAreaType F; // nicht f�r nSpline
211 BYTE nPoints;
212 BYTE Reserve;
213 UINT32 SD_EckP; // Zeiger auf die Eckpunkte (StarDraw)
214 PointType* EckP; // Zeiger auf die Eckpunkte (StarView (wird nicht von Disk gelesen!))
215 friend SvStream& operator>>(SvStream& rIStream, SplnType& rSpln);
216 virtual void Draw(OutputDevice& rOut);
218 // Unterarten von Spline: siehe Poly
221 #define CircSize 52
222 class CircType: public ObjkType {
223 public:
224 BYTE Flags; // (Schummel f�r Allignment unter NT)
225 BYTE LEnden; // nur Bogen (Kr & El)
226 ObjLineType L;
227 ObjAreaType F; // nicht f�r Bogen (Kr & El)
228 PointType Center; // Mittelpunkt
229 PointType Radius; // Radius
230 UINT16 DrehWink; // nur Ellipse
231 UINT16 StartWink; // � nicht f�r Vollkreis
232 UINT16 RelWink; // � und Vollellipse
233 friend SvStream& operator>>(SvStream& rIStream, CircType& rCirc);
234 virtual void Draw(OutputDevice& rOut);
236 #define CircFull 0x00 /* Unterarten von Kreis: 0: Kreis */
237 #define CircSect 0x01 /* 1: Kreissektor */
238 #define CircAbsn 0x02 /* 2: Kreisabschnitt */
239 #define CircArc 0x03 /* 3: Kreisbogen */
242 #define TextSize 116
243 class TextType: public ObjkType {
244 public:
245 BYTE Flags; // (Schummel f�r Allignment unter NT)
246 BYTE Reserve; // f�r Word Allign
247 ObjTextType T; // 64 Bytes << DWord-Allign bei FontID erforderlich
248 PointType Pos1; // Bezugspunkt (ObenLinks)
249 PointType Pos2; // (untenRechts)
250 INT16 TopOfs; // Von Oberkante bis Textbegin (future f�r vJustify)
251 UINT16 DrehWink; // 0...<360
252 UINT16 BoxSlant; // >270...<90 (nur Box)
253 UINT16 BufSize; // Gr��e von Buf f�r Load, Save, Copy und so
254 UINT16 BufLo,BufHi;// (UCHAR*) Zeiger auf den Textbuffer << ShortArr, weil sonst DWord-Allign erforderlich
255 UINT16 ExtLo,ExtHi;// (Ptr) Text �ber mehrere Rahmen << ShortArr, weil sonst DWord-Allign erforderlich
256 PointType FitSize; // Ursprungsgr��e f�r Fit2Size
257 INT16 FitBreit; // Breite zum formatieren bei Fit2Size
258 UCHAR* Buffer; // Diese Variable wird nicht durch Lesen von Disk gef�llt, sondern explizit!
259 friend SvStream& operator>>(SvStream& rIStream, TextType& rText);
260 virtual void Draw(OutputDevice& rOut);
262 #define TextOutlBit 0x01 /* 1=Sourcecode f�r Outliner (wird von DrawObjekt() ignoriert) */
263 #define TextFitSBit 0x02 /* Bit1: 1=Text-FitToSize, auch Outliner (2.0) */
264 #define TextFitZBit 0x08 /* Bit3: 1=Fit2Size Zeilenweise (2.0) */
265 #define TextDrftBit 0x04 /* Bit2: 1=DraftDraw (2.0) */
266 #define TextFitBits (TextFitSBit | TextFitZBit)
269 enum GrafStat {NoGraf,Pic,Pcx,Hpgl,Img,Msp,Tiff,Dxf,Lot,Usr,Sgf};
271 #define BmapSize 132
272 class BmapType: public ObjkType {
273 public:
274 BYTE Flags; // (Schummel f�r Allignment unter NT)
275 BYTE Reserve;
276 ObjAreaType F; // Farbe und Muster der 1-Plane Bitmap
277 PointType Pos1;
278 PointType Pos2;
279 UINT16 DrehWink; // 315...<45 (Future)
280 UINT16 Slant; // >270...<90 (Future)
281 UCHAR Filename[80]; // Pfad
282 PointType PixSize; // Gr��e in Pixel (0 bei Vektor)
283 GrafStat Format; // siehe GpmDef.Pas
284 BYTE nPlanes; // Anzahl der Bitplanes (0 bei Vektor)
285 BOOL RawOut; // als Raw ausgeben ?
286 BOOL InvOut; // invertiert ausgeben ?
287 BOOL LightOut; // aufhellen? (SD20)
288 BYTE GrfFlg; // (SD20) 0=nSGF 1=Pcx 2=Hpgl 4=Raw $FF=Undef(f�r Fix in DrawBmp)
290 INetURLObject aFltPath; // F�r GraphicFilter
291 friend SvStream& operator>>(SvStream& rIStream, BmapType& rBmap);
292 virtual void Draw(OutputDevice& rOut);
293 void SetPaths( const INetURLObject rFltPath );
297 #define GrupSize 48
298 class GrupType: public ObjkType {
299 public:
300 BYTE Flags; // (Schummel f�r Allignment unter NT)
301 UCHAR Name[13]; // Name der Gruppe
302 UINT16 SbLo,SbHi; // (Ptr) Gruppenliste << ShortArr, weil sonst DWord Allign erforderlich
303 UINT16 UpLo,UpHi; // (Ptr) Vaterliste << ShortArr, weil sonst DWord Allign erforderlich
304 UINT16 ChartSize; // Speicherbedarf der Diagrammstruktur Struktur
305 UINT32 ChartPtr; // Diagrammstruktur
306 UINT32 GetSubPtr(); // hier nur zum Checken, ob Sublist evtl. leer ist.
307 friend SvStream& operator>>(SvStream& rIStream, GrupType& rGrup);
308 // virtual void Draw(OutputDevice& rOut);
312 void SetLine(ObjLineType& rLine, OutputDevice& rOut);
313 void SetArea(ObjAreaType& rArea, OutputDevice& rOut);
314 Color Sgv2SvFarbe(BYTE nFrb1, BYTE nFrb2, BYTE nInts);
315 void RotatePoint(PointType& P, INT16 cx, INT16 cy, double sn, double cs);
316 void RotatePoint(Point& P, INT16 cx, INT16 cy, double sn, double cs);
317 INT16 iMulDiv(INT16 a, INT16 Mul, INT16 Div);
318 UINT16 MulDiv(UINT16 a, UINT16 Mul, UINT16 Div);
321 class SgfFontOne {
322 public:
323 SgfFontOne* Next; // Zeiger f�r Listenverkettung
324 UINT32 IFID;
325 BOOL Bold;
326 BOOL Ital;
327 BOOL Sans;
328 BOOL Serf;
329 BOOL Fixd;
330 FontFamily SVFamil;
331 CharSet SVChSet;
332 String SVFName; // z.B. "Times New Roman" = 15 Chars
333 USHORT SVWidth; // Durchschnittliche Zeichenbreite in %
334 SgfFontOne();
335 void ReadOne( ByteString& ID, ByteString& Dsc);
338 class SgfFontLst {
339 public:
340 String FNam; // vollst�ndiger Filename des Inifiles
341 SgfFontOne* pList; // Listenanfang
342 SgfFontOne* Last; // Listenende
343 UINT32 LastID; // f�r schnelleren Zugriff bei Wiederholungen
344 SgfFontOne* LastLn; // f�r schnelleren Zugriff bei Wiederholungen
345 BOOL Tried;
346 SgfFontLst();
347 ~SgfFontLst();
348 void AssignFN(const String& rFName);
349 void ReadList();
350 void RausList();
351 SgfFontOne* GetFontDesc(UINT32 ID);
354 #endif //_SGVMAIN_HXX