sync master with lastest vba changes
[ooovba.git] / binfilter / inc / bf_svtools / sgvmain.hxx
blobb736d9cbf27e0165ab05496a5ae2e282d48b5fde
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.3 $
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>
38 namespace binfilter
42 #define UCHAR unsigned char
44 struct PointType {
45 INT16 x;
46 INT16 y;
49 #define SgfDpmm 40
51 #define DtHdSize 256
52 class DtHdType {
53 public:
54 BYTE Reserved[256];
55 friend SvStream& operator>>(SvStream& rIStream, DtHdType& rDtHd);
56 friend void DtHdOverSeek(SvStream& rInp);
60 struct Seitenformat {
61 PointType Size; // 0.00mm...819.175mm (Papiergr��e)
62 INT16 RandL; // links Rand auf
63 INT16 RandR; // rechts dem Papier
64 INT16 RandO; // oben Rand auf
65 INT16 RandU; // unten dem Papier
66 BYTE PColor; // Future Use
67 BYTE PIntens; // erst recht Future use
68 // BOOL BorderClip; // Objekte am Rand abschneiden (Schummel wg. Allignment unter NT)
72 #define PageSize 146
73 class PageType {
74 public:
75 UINT32 Next; // N�chste Seite
76 UINT32 nList; // Objektdaten, erster Record
77 UINT32 ListEnd; // Objektdaten, letzter Record
78 Seitenformat Paper; // Papierdaten
79 BOOL BorderClip; // Objekte am Rand abschneiden (Schummel wg. Allignment unter NT)
80 BYTE StdPg; // welche Standardseite einblenden ?
81 PointType U; // Nullpunkt
82 INT16 HlpLnH[20]; // Hilfslinien
83 INT16 HlpLnV[20];
84 BYTE LnAnzH;
85 BYTE LnAnzV;
86 UCHAR PgName[32]; // Seitenname
87 friend SvStream& operator>>(SvStream& rIStream, PageType& rPage);
91 enum ObjArtType {ObjStrk,ObjRect,ObjPoly,ObjCirc,ObjSpln,
92 ObjText,ObjGrup,ObjBmap,ObjVirt,ObjTxtX,ObjMaxi};
94 struct ObjLineType {
95 BYTE LFarbe; // [Index]
96 BYTE LBFarbe; // [Index]
97 BYTE LIntens; // [%]
98 BYTE LMuster; // [Index] inkl. Transparenz
99 INT16 LMSize; // [Koeffizient/100]
100 INT16 LDicke; // Strichst�rke
103 struct ObjAreaType {
104 BYTE FFarbe; // [Index]
105 BYTE FBFarbe; // [Index]
106 BYTE FIntens; // [%]
107 BYTE FDummy1; //
108 INT16 FDummy2; //
109 UINT16 FMuster; // [Index] inkl. Invers, Transparenz
112 #define ObjTextTypeSize 64
113 class ObjTextType {
114 public:
115 ObjLineType L; // Text-Outline (future)
116 ObjAreaType F; // Text innen
117 UINT16 FontLo,FontHi;// z.B. 92500 (CG Times), zweigeteilt wegen DWordAllign in TextType.
118 UINT16 Grad; // 0.5..32767.5 Pt - bei 1000 Pt sollte aber schlu� sein
119 UINT16 Breite; // 1..65535% bitte nicht mehr als 500%
120 BYTE Justify; // 2 Bit Vert (Hi), 3 Bit Hor (Lo)
121 BYTE Kapit; // 1..255%
122 UINT16 Schnitt; // 8 Flags
123 UINT16 LnFeed; // 1..32767% vom max. Schriftgrad der Zeile
124 UINT16 Slant; // Kursivwinkel 0.00..89.99� default 15.00� doppelt Breit angesehen)
125 BYTE ZAbst; // Zeichenabstand 0..255% (0=auf der Stelle; 100=normal; 200=Zeichen wird als
126 INT8 ChrVPos; // Zeichen V-Position default 0= on Baseline, 10= 5Pt drunter (-64..63�)
127 ObjLineType ShdL; // Schatten-Outline (neu 2.0)
128 ObjAreaType ShdF; // Schatten-innen (neu 2.0)
129 PointType ShdVers; // Schattenversatz Max.300.00%
130 BOOL ShdAbs; // True-> Schattenversatz ist absolut statt relativ zum Schriftgrad
131 BOOL NoSpc; // True-> kein Zwischenraum (f�r BackArea)
132 ObjAreaType BackF; // Hintergrundfl�che
133 UINT32 GetFont();
134 void SetFont(UINT32 FontID);
137 class Obj0Type { // SuperClass f�r Apple-VMT
138 public:
139 virtual void Draw(OutputDevice& rOut);
140 virtual ~Obj0Type() {}
143 #define ObjkSize 20 /* eigentlich 21. Wg. Allignment ist Flags jedoch verschoben worden*/
144 class ObjkType: public Obj0Type { // Grundkomponenten aller Stardraw-Objekte
145 public:
146 UINT32 Last;
147 UINT32 Next;
148 UINT16 MemSize; // in Bytes
149 PointType ObjMin; // XY-Minimum des Objekts
150 PointType ObjMax; // XY-Maximum des Objekts
151 BYTE Art;
152 BYTE Layer;
153 // BYTE Flags; // (Schummel f�r Allignment unter NT)
154 friend SvStream& operator>>(SvStream& rIStream, ObjkType& rObjk);
155 friend BOOL ObjOverSeek(SvStream& rInp, ObjkType& rObjk);
156 virtual void Draw(OutputDevice& rOut);
160 #define StrkSize 38
161 class StrkType: public ObjkType {
162 public:
163 BYTE Flags; // (Schummel f�r Allignment unter NT)
164 BYTE LEnden; // Linienenden
165 ObjLineType L;
166 PointType Pos1; // Anfangspunkt
167 PointType Pos2; // Endpunkt
168 friend SvStream& operator>>(SvStream& rIStream, StrkType& rStrk);
169 virtual void Draw(OutputDevice& rOut);
173 #define RectSize 52
174 class RectType: public ObjkType {
175 public:
176 BYTE Flags; // (Schummel f�r Allignment unter NT)
177 BYTE Reserve;
178 ObjLineType L;
179 ObjAreaType F;
180 PointType Pos1; // LO-Ecke = Bezugspunkt
181 PointType Pos2; // R-Ecke
182 INT16 Radius; // Eckenradius
183 UINT16 DrehWink; // 315...<45
184 UINT16 Slant; // >270...<90
185 friend SvStream& operator>>(SvStream& rIStream, RectType& rRect);
186 virtual void Draw(OutputDevice& rOut);
190 #define PolySize 44
191 class PolyType: public ObjkType { // identisch mit Spline !
192 public:
193 BYTE Flags; // (Schummel f�r Allignment unter NT)
194 BYTE LEnden; // nur f�r Polyline
195 ObjLineType L;
196 ObjAreaType F; // nicht f�r Polyline
197 BYTE nPoints;
198 BYTE Reserve;
199 UINT32 SD_EckP; // Zeiger auf die Eckpunkte (StarDraw)
200 PointType* EckP; // Zeiger auf die Eckpunkte (StarView (wird nicht von Disk gelesen!))
201 friend SvStream& operator>>(SvStream& rIStream, PolyType& rPoly);
202 virtual void Draw(OutputDevice& rOut);
204 #define PolyClosBit 0x01 // Unterarten von Poly: 0: PolyLine 1: Polygon
207 #define SplnSize 44
208 class SplnType: public ObjkType { // identisch mit Poly !
209 public:
210 BYTE Flags; // (Schummel f�r Allignment unter NT)
211 BYTE LEnden; // nur f�r nSpline
212 ObjLineType L;
213 ObjAreaType F; // nicht f�r nSpline
214 BYTE nPoints;
215 BYTE Reserve;
216 UINT32 SD_EckP; // Zeiger auf die Eckpunkte (StarDraw)
217 PointType* EckP; // Zeiger auf die Eckpunkte (StarView (wird nicht von Disk gelesen!))
218 friend SvStream& operator>>(SvStream& rIStream, SplnType& rSpln);
219 virtual void Draw(OutputDevice& rOut);
221 // Unterarten von Spline: siehe Poly
224 #define CircSize 52
225 class CircType: public ObjkType {
226 public:
227 BYTE Flags; // (Schummel f�r Allignment unter NT)
228 BYTE LEnden; // nur Bogen (Kr & El)
229 ObjLineType L;
230 ObjAreaType F; // nicht f�r Bogen (Kr & El)
231 PointType Center; // Mittelpunkt
232 PointType Radius; // Radius
233 UINT16 DrehWink; // nur Ellipse
234 UINT16 StartWink; // � nicht f�r Vollkreis
235 UINT16 RelWink; // � und Vollellipse
236 friend SvStream& operator>>(SvStream& rIStream, CircType& rCirc);
237 virtual void Draw(OutputDevice& rOut);
239 #define CircFull 0x00 /* Unterarten von Kreis: 0: Kreis */
240 #define CircSect 0x01 /* 1: Kreissektor */
241 #define CircAbsn 0x02 /* 2: Kreisabschnitt */
242 #define CircArc 0x03 /* 3: Kreisbogen */
245 #define TextSize 116
246 class TextType: public ObjkType {
247 public:
248 BYTE Flags; // (Schummel f�r Allignment unter NT)
249 BYTE Reserve; // f�r Word Allign
250 ObjTextType T; // 64 Bytes << DWord-Allign bei FontID erforderlich
251 PointType Pos1; // Bezugspunkt (ObenLinks)
252 PointType Pos2; // (untenRechts)
253 INT16 TopOfs; // Von Oberkante bis Textbegin (future f�r vJustify)
254 UINT16 DrehWink; // 0...<360
255 UINT16 BoxSlant; // >270...<90 (nur Box)
256 UINT16 BufSize; // Gr��e von Buf f�r Load, Save, Copy und so
257 UINT16 BufLo,BufHi;// (UCHAR*) Zeiger auf den Textbuffer << ShortArr, weil sonst DWord-Allign erforderlich
258 UINT16 ExtLo,ExtHi;// (Ptr) Text �ber mehrere Rahmen << ShortArr, weil sonst DWord-Allign erforderlich
259 PointType FitSize; // Ursprungsgr��e f�r Fit2Size
260 INT16 FitBreit; // Breite zum formatieren bei Fit2Size
261 UCHAR* Buffer; // Diese Variable wird nicht durch Lesen von Disk gef�llt, sondern explizit!
262 friend SvStream& operator>>(SvStream& rIStream, TextType& rText);
263 virtual void Draw(OutputDevice& rOut);
265 #define TextOutlBit 0x01 /* 1=Sourcecode f�r Outliner (wird von DrawObjekt() ignoriert) */
266 #define TextFitSBit 0x02 /* Bit1: 1=Text-FitToSize, auch Outliner (2.0) */
267 #define TextFitZBit 0x08 /* Bit3: 1=Fit2Size Zeilenweise (2.0) */
268 #define TextDrftBit 0x04 /* Bit2: 1=DraftDraw (2.0) */
269 #define TextFitBits (TextFitSBit | TextFitZBit)
272 enum GrafStat {NoGraf,Pic,Pcx,Hpgl,Img,Msp,Tiff,Dxf,Lot,Usr,Sgf};
274 #define BmapSize 132
275 class BmapType: public ObjkType {
276 public:
277 BYTE Flags; // (Schummel f�r Allignment unter NT)
278 BYTE Reserve;
279 ObjAreaType F; // Farbe und Muster der 1-Plane Bitmap
280 PointType Pos1;
281 PointType Pos2;
282 UINT16 DrehWink; // 315...<45 (Future)
283 UINT16 Slant; // >270...<90 (Future)
284 UCHAR Filename[80]; // Pfad
285 PointType PixSize; // Gr��e in Pixel (0 bei Vektor)
286 GrafStat Format; // siehe GpmDef.Pas
287 BYTE nPlanes; // Anzahl der Bitplanes (0 bei Vektor)
288 BOOL RawOut; // als Raw ausgeben ?
289 BOOL InvOut; // invertiert ausgeben ?
290 BOOL LightOut; // aufhellen? (SD20)
291 BYTE GrfFlg; // (SD20) 0=nSGF 1=Pcx 2=Hpgl 4=Raw $FF=Undef(f�r Fix in DrawBmp)
293 INetURLObject aFltPath; // F�r GraphicFilter
294 friend SvStream& operator>>(SvStream& rIStream, BmapType& rBmap);
295 virtual void Draw(OutputDevice& rOut);
296 void SetPaths( const INetURLObject rFltPath );
300 #define GrupSize 48
301 class GrupType: public ObjkType {
302 public:
303 BYTE Flags; // (Schummel f�r Allignment unter NT)
304 UCHAR Name[13]; // Name der Gruppe
305 UINT16 SbLo,SbHi; // (Ptr) Gruppenliste << ShortArr, weil sonst DWord Allign erforderlich
306 UINT16 UpLo,UpHi; // (Ptr) Vaterliste << ShortArr, weil sonst DWord Allign erforderlich
307 UINT16 ChartSize; // Speicherbedarf der Diagrammstruktur Struktur
308 UINT32 ChartPtr; // Diagrammstruktur
309 UINT32 GetSubPtr(); // hier nur zum Checken, ob Sublist evtl. leer ist.
310 friend SvStream& operator>>(SvStream& rIStream, GrupType& rGrup);
311 // virtual void Draw(OutputDevice& rOut);
315 void SetLine(ObjLineType& rLine, OutputDevice& rOut);
316 void SetArea(ObjAreaType& rArea, OutputDevice& rOut);
317 Color Sgv2SvFarbe(BYTE nFrb1, BYTE nFrb2, BYTE nInts);
318 void RotatePoint(PointType& P, INT16 cx, INT16 cy, double sn, double cs);
319 void RotatePoint(Point& P, INT16 cx, INT16 cy, double sn, double cs);
320 INT16 iMulDiv(INT16 a, INT16 Mul, INT16 Div);
321 UINT16 MulDiv(UINT16 a, UINT16 Mul, UINT16 Div);
324 class SgfFontOne {
325 public:
326 SgfFontOne* Next; // Zeiger f�r Listenverkettung
327 UINT32 IFID;
328 BOOL Bold;
329 BOOL Ital;
330 BOOL Sans;
331 BOOL Serf;
332 BOOL Fixd;
333 FontFamily SVFamil;
334 CharSet SVChSet;
335 String SVFName; // z.B. "Times New Roman" = 15 Chars
336 USHORT SVWidth; // Durchschnittliche Zeichenbreite in %
337 SgfFontOne();
338 void ReadOne( ByteString& ID, ByteString& Dsc);
341 class SgfFontLst {
342 public:
343 String FNam; // vollst�ndiger Filename des Inifiles
344 SgfFontOne* pList; // Listenanfang
345 SgfFontOne* Last; // Listenende
346 UINT32 LastID; // f�r schnelleren Zugriff bei Wiederholungen
347 SgfFontOne* LastLn; // f�r schnelleren Zugriff bei Wiederholungen
348 BOOL Tried;
349 SgfFontLst();
350 ~SgfFontLst();
351 void AssignFN(const String& rFName);
352 void ReadList();
353 void RausList();
354 SgfFontOne* GetFontDesc(UINT32 ID);
359 #endif //_SGVMAIN_HXX