xref: /AOO41X/main/filter/inc/filter/msfilter/escherex.hxx (revision 7ce6a4526e1f2529131c40b046979beff4d4e019)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 #ifndef _SVX_ESCHEREX_HXX
25 #define _SVX_ESCHEREX_HXX
26 
27 #include <memory>
28 #include <vector>
29 #include <boost/shared_ptr.hpp>
30 #include <tools/solar.h>
31 #include <tools/gen.hxx>
32 #include <tools/list.hxx>
33 #include <tools/stream.hxx>
34 #include <com/sun/star/uno/Reference.h>
35 #include <svtools/grfmgr.hxx>
36 #include <com/sun/star/awt/Size.hpp>
37 #include <com/sun/star/awt/Point.hpp>
38 #include <com/sun/star/awt/Rectangle.hpp>
39 #include <com/sun/star/beans/XPropertySet.hpp>
40 #include <com/sun/star/beans/PropertyState.hpp>
41 #include <com/sun/star/beans/PropertyValue.hpp>
42 #include <com/sun/star/drawing/BitmapMode.hpp>
43 #include <com/sun/star/drawing/EnhancedCustomShapeParameterPair.hpp>
44 #include <com/sun/star/drawing/Hatch.hpp>
45 #include <svx/msdffdef.hxx>
46 #include "filter/msfilter/msfilterdllapi.h"
47 
48         /*Record Name       FBT-Value   Instance                  Contents                                                          Wrd Exl PPt Ver*/
49 // In der Mickysoft-Doku heissen die msofbt... statt ESCHER_...
50 #define ESCHER_DggContainer      0xF000 /*                           per-document data                                                  X   X   X     */
51 #define   ESCHER_Dgg             0xF006 /*                           an FDGG and several FIDCLs                                         X   X   X   0 */
52 #define   ESCHER_CLSID           0xF016 /*                           the CLSID of the application that put the data on the clipboard    C   C   C   0 */
53 #define   ESCHER_OPT             0xF00B /* count of properties       the document-wide default shape properties                         X   X   X   3 */
54 #define   ESCHER_ColorMRU        0xF11A /* count of colors           the colors in the MRU swatch                                       X   X   X   0 */
55 #define   ESCHER_SplitMenuColors 0xF11E /* count of colors           the colors in the top-level split menus                            X   X   X   0 */
56 #define   ESCHER_BstoreContainer 0xF001 /* count of BLIPs            all images in the document (JPEGs, metafiles, etc.)                X   X   X     */
57 #define     ESCHER_BSE           0xF007 /* BLIP type                 an FBSE (one per BLIP)                                             X   X   X   2 */
58 #define     ESCHER_BlipFirst     0xF018 /*                           range of fbts reserved for various kinds of BLIPs                  X   X   X     */
59 #define     ESCHER_BlipLast      0xF117 /*                           range of fbts reserved for various kinds of BLIPs                  X   X   X     */
60 
61 #define ESCHER_DgContainer       0xF002 /*                           per-sheet/page/slide data                                          X   X   X     */
62 #define   ESCHER_Dg              0xF008 /* drawing ID                an FDG                                                             X   X   X   0 */
63 #define   ESCHER_RegroupItems    0xF118 /* count of regroup entries  several FRITs                                                      X   X   X   0 */
64 #define   ESCHER_ColorScheme     0xF120 /* count of colors           the colors of the source host's color scheme                           C   C   0 */
65 #define   ESCHER_SpgrContainer   0xF003 /*                           several SpContainers, the first of which is the group shape itself X   X   X     */
66 #define   ESCHER_SpContainer     0xF004 /*                           a shape                                                            X   X   X     */
67 #define     ESCHER_Spgr          0xF009 /*                           an FSPGR; only present if the shape is a group shape               X   X   X   1 */
68 #define     ESCHER_Sp            0xF00A /* shape type                an FSP                                                             X   X   X   2 */
69 //#define     ESCHER_OPT           0xF00B /* count of properties       a shape property table                                             X   X   X   3 */
70 #define     ESCHER_Textbox       0xF00C /*                           RTF text                                                           C   C   C   0 */
71 #define     ESCHER_ClientTextbox 0xF00D /* host-defined              the text in the textbox, in host-defined format                    X   X   X     */
72 #define     ESCHER_Anchor        0xF00E /*                           a RECT, in 100000ths of an inch                                    C   C   C   0 */
73 #define     ESCHER_ChildAnchor   0xF00F /*                           a RECT, in units relative to the parent group                      X   X   X   0 */
74 #define     ESCHER_ClientAnchor  0xF010 /* host-defined              the location of the shape, in a host-defined format                X   X   X     */
75 #define     ESCHER_ClientData    0xF011 /* host-defined              host-specific data                                                 X   X   X     */
76 #define     ESCHER_OleObject     0xF11F /*                           a serialized IStorage for an OLE object                            C   C   C   0 */
77 #define     ESCHER_DeletedPspl   0xF11D /*                           an FPSPL; only present in top-level deleted shapes                 X           0 */
78 #define   ESCHER_SolverContainer 0xF005 /* count of rules            the rules governing shapes                                         X   X   X     */
79 #define     ESCHER_ConnectorRule 0xF012 /*                           an FConnectorRule                                                      X   X   1 */
80 #define     ESCHER_AlignRule     0xF013 /*                           an FAlignRule                                                      X   X   X   0 */
81 #define     ESCHER_ArcRule       0xF014 /*                           an FARCRU                                                          X   X   X   0 */
82 #define     ESCHER_ClientRule    0xF015 /* host-defined              host-defined                                                                     */
83 #define     ESCHER_CalloutRule   0xF017 /*                           an FCORU                                                           X   X   X   0 */
84 #define ESCHER_Selection         0xF119 /*                           an FDGSL followed by the SPIDs of the shapes in the selection              X   0 */
85 #define ESCHER_UDefProp          0xF122
86 
87 #define SHAPEFLAG_GROUP         0x001   // This shape is a group shape
88 #define SHAPEFLAG_CHILD         0x002   // Not a top-level shape
89 #define SHAPEFLAG_PATRIARCH     0x004   // This is the topmost group shape. Exactly one of these per drawing.
90 #define SHAPEFLAG_DELETED       0x008   // The shape has been deleted
91 #define SHAPEFLAG_OLESHAPE      0x010   // The shape is an OLE object
92 #define SHAPEFLAG_HAVEMASTER    0x020   // Shape has a hspMaster property
93 #define SHAPEFLAG_FLIPH         0x040   // Shape is flipped horizontally
94 #define SHAPEFLAG_FLIPV         0x080   // Shape is flipped vertically
95 #define SHAPEFLAG_CONNECTOR     0x100   // Connector type of shape
96 #define SHAPEFLAG_HAVEANCHOR    0x200   // Shape has an anchor of some kind
97 #define SHAPEFLAG_BACKGROUND    0x400   // Background shape
98 #define SHAPEFLAG_HAVESPT       0x800   // Shape has a shape type property
99 
100 #define ESCHER_ShpInst_Min              0
101 #define ESCHER_ShpInst_NotPrimitive     ESCHER_ShpInst_Min
102 #define ESCHER_ShpInst_Rectangle        1
103 #define ESCHER_ShpInst_RoundRectangle   2
104 #define ESCHER_ShpInst_Ellipse          3
105 #define ESCHER_ShpInst_Diamond          4
106 #define ESCHER_ShpInst_IsocelesTriangle 5
107 #define ESCHER_ShpInst_RightTriangle    6
108 #define ESCHER_ShpInst_Parallelogram    7
109 #define ESCHER_ShpInst_Trapezoid        8
110 #define ESCHER_ShpInst_Hexagon          9
111 #define ESCHER_ShpInst_Octagon          10
112 #define ESCHER_ShpInst_Plus             11
113 #define ESCHER_ShpInst_Star             12
114 #define ESCHER_ShpInst_Arrow            13
115 #define ESCHER_ShpInst_ThickArrow       14
116 #define ESCHER_ShpInst_HomePlate        15
117 #define ESCHER_ShpInst_Cube             16
118 #define ESCHER_ShpInst_Balloon          17
119 #define ESCHER_ShpInst_Seal             18
120 #define ESCHER_ShpInst_Arc              19
121 #define ESCHER_ShpInst_Line             20
122 #define ESCHER_ShpInst_Plaque           21
123 #define ESCHER_ShpInst_Can              22
124 #define ESCHER_ShpInst_Donut            23
125 #define ESCHER_ShpInst_TextSimple       24
126 #define ESCHER_ShpInst_TextOctagon      25
127 #define ESCHER_ShpInst_TextHexagon      26
128 #define ESCHER_ShpInst_TextCurve        27
129 #define ESCHER_ShpInst_TextWave         28
130 #define ESCHER_ShpInst_TextRing         29
131 #define ESCHER_ShpInst_TextOnCurve      30
132 #define ESCHER_ShpInst_TextOnRing       31
133 #define ESCHER_ShpInst_StraightConnector1 32
134 #define ESCHER_ShpInst_BentConnector2   33
135 #define ESCHER_ShpInst_BentConnector3   34
136 #define ESCHER_ShpInst_BentConnector4   35
137 #define ESCHER_ShpInst_BentConnector5   36
138 #define ESCHER_ShpInst_CurvedConnector2 37
139 #define ESCHER_ShpInst_CurvedConnector3 38
140 #define ESCHER_ShpInst_CurvedConnector4 39
141 #define ESCHER_ShpInst_CurvedConnector5 40
142 #define ESCHER_ShpInst_Callout1         41
143 #define ESCHER_ShpInst_Callout2         42
144 #define ESCHER_ShpInst_Callout3         43
145 #define ESCHER_ShpInst_AccentCallout1   44
146 #define ESCHER_ShpInst_AccentCallout2   45
147 #define ESCHER_ShpInst_AccentCallout3   46
148 #define ESCHER_ShpInst_BorderCallout1   47
149 #define ESCHER_ShpInst_BorderCallout2   48
150 #define ESCHER_ShpInst_BorderCallout3   49
151 #define ESCHER_ShpInst_AccentBorderCallout1 50
152 #define ESCHER_ShpInst_AccentBorderCallout2 51
153 #define ESCHER_ShpInst_AccentBorderCallout3 52
154 #define ESCHER_ShpInst_Ribbon           53
155 #define ESCHER_ShpInst_Ribbon2          54
156 #define ESCHER_ShpInst_Chevron          55
157 #define ESCHER_ShpInst_Pentagon         56
158 #define ESCHER_ShpInst_NoSmoking        57
159 #define ESCHER_ShpInst_Seal8            58
160 #define ESCHER_ShpInst_Seal16           59
161 #define ESCHER_ShpInst_Seal32           60
162 #define ESCHER_ShpInst_WedgeRectCallout 61
163 #define ESCHER_ShpInst_WedgeRRectCallout    62
164 #define ESCHER_ShpInst_WedgeEllipseCallout  63
165 #define ESCHER_ShpInst_Wave             64
166 #define ESCHER_ShpInst_FoldedCorner     65
167 #define ESCHER_ShpInst_LeftArrow        66
168 #define ESCHER_ShpInst_DownArrow        67
169 #define ESCHER_ShpInst_UpArrow          68
170 #define ESCHER_ShpInst_LeftRightArrow   69
171 #define ESCHER_ShpInst_UpDownArrow      70
172 #define ESCHER_ShpInst_IrregularSeal1   71
173 #define ESCHER_ShpInst_IrregularSeal2   72
174 #define ESCHER_ShpInst_LightningBolt    73
175 #define ESCHER_ShpInst_Heart            74
176 #define ESCHER_ShpInst_PictureFrame     75
177 #define ESCHER_ShpInst_QuadArrow        76
178 #define ESCHER_ShpInst_LeftArrowCallout 77
179 #define ESCHER_ShpInst_RightArrowCallout    78
180 #define ESCHER_ShpInst_UpArrowCallout   79
181 #define ESCHER_ShpInst_DownArrowCallout 80
182 #define ESCHER_ShpInst_LeftRightArrowCallout    81
183 #define ESCHER_ShpInst_UpDownArrowCallout   82
184 #define ESCHER_ShpInst_QuadArrowCallout 83
185 #define ESCHER_ShpInst_Bevel            84
186 #define ESCHER_ShpInst_LeftBracket      85
187 #define ESCHER_ShpInst_RightBracket     86
188 #define ESCHER_ShpInst_LeftBrace        87
189 #define ESCHER_ShpInst_RightBrace       88
190 #define ESCHER_ShpInst_LeftUpArrow      89
191 #define ESCHER_ShpInst_BentUpArrow      90
192 #define ESCHER_ShpInst_BentArrow        91
193 #define ESCHER_ShpInst_Seal24           92
194 #define ESCHER_ShpInst_StripedRightArrow    93
195 #define ESCHER_ShpInst_NotchedRightArrow    94
196 #define ESCHER_ShpInst_BlockArc         95
197 #define ESCHER_ShpInst_SmileyFace       96
198 #define ESCHER_ShpInst_VerticalScroll   97
199 #define ESCHER_ShpInst_HorizontalScroll 98
200 #define ESCHER_ShpInst_CircularArrow    99
201 #define ESCHER_ShpInst_NotchedCircularArrow 100
202 #define ESCHER_ShpInst_UturnArrow       101
203 #define ESCHER_ShpInst_CurvedRightArrow 102
204 #define ESCHER_ShpInst_CurvedLeftArrow  103
205 #define ESCHER_ShpInst_CurvedUpArrow    104
206 #define ESCHER_ShpInst_CurvedDownArrow  105
207 #define ESCHER_ShpInst_CloudCallout     106
208 #define ESCHER_ShpInst_EllipseRibbon    107
209 #define ESCHER_ShpInst_EllipseRibbon2   108
210 #define ESCHER_ShpInst_FlowChartProcess 109
211 #define ESCHER_ShpInst_FlowChartDecision    110
212 #define ESCHER_ShpInst_FlowChartInputOutput 111
213 #define ESCHER_ShpInst_FlowChartPredefinedProcess   112
214 #define ESCHER_ShpInst_FlowChartInternalStorage 113
215 #define ESCHER_ShpInst_FlowChartDocument    114
216 #define ESCHER_ShpInst_FlowChartMultidocument   115
217 #define ESCHER_ShpInst_FlowChartTerminator  116
218 #define ESCHER_ShpInst_FlowChartPreparation 117
219 #define ESCHER_ShpInst_FlowChartManualInput 118
220 #define ESCHER_ShpInst_FlowChartManualOperation 119
221 #define ESCHER_ShpInst_FlowChartConnector   120
222 #define ESCHER_ShpInst_FlowChartPunchedCard 121
223 #define ESCHER_ShpInst_FlowChartPunchedTape 122
224 #define ESCHER_ShpInst_FlowChartSummingJunction 123
225 #define ESCHER_ShpInst_FlowChartOr      124
226 #define ESCHER_ShpInst_FlowChartCollate 125
227 #define ESCHER_ShpInst_FlowChartSort    126
228 #define ESCHER_ShpInst_FlowChartExtract 127
229 #define ESCHER_ShpInst_FlowChartMerge   128
230 #define ESCHER_ShpInst_FlowChartOfflineStorage  129
231 #define ESCHER_ShpInst_FlowChartOnlineStorage   130
232 #define ESCHER_ShpInst_FlowChartMagneticTape    131
233 #define ESCHER_ShpInst_FlowChartMagneticDisk    132
234 #define ESCHER_ShpInst_FlowChartMagneticDrum    133
235 #define ESCHER_ShpInst_FlowChartDisplay 134
236 #define ESCHER_ShpInst_FlowChartDelay   135
237 #define ESCHER_ShpInst_TextPlainText    136
238 #define ESCHER_ShpInst_TextStop         137
239 #define ESCHER_ShpInst_TextTriangle     138
240 #define ESCHER_ShpInst_TextTriangleInverted 139
241 #define ESCHER_ShpInst_TextChevron      140
242 #define ESCHER_ShpInst_TextChevronInverted  141
243 #define ESCHER_ShpInst_TextRingInside   142
244 #define ESCHER_ShpInst_TextRingOutside  143
245 #define ESCHER_ShpInst_TextArchUpCurve  144
246 #define ESCHER_ShpInst_TextArchDownCurve    145
247 #define ESCHER_ShpInst_TextCircleCurve  146
248 #define ESCHER_ShpInst_TextButtonCurve  147
249 #define ESCHER_ShpInst_TextArchUpPour   148
250 #define ESCHER_ShpInst_TextArchDownPour 149
251 #define ESCHER_ShpInst_TextCirclePour   150
252 #define ESCHER_ShpInst_TextButtonPour   151
253 #define ESCHER_ShpInst_TextCurveUp      152
254 #define ESCHER_ShpInst_TextCurveDown    153
255 #define ESCHER_ShpInst_TextCascadeUp    154
256 #define ESCHER_ShpInst_TextCascadeDown  155
257 #define ESCHER_ShpInst_TextWave1        156
258 #define ESCHER_ShpInst_TextWave2        157
259 #define ESCHER_ShpInst_TextWave3        158
260 #define ESCHER_ShpInst_TextWave4        159
261 #define ESCHER_ShpInst_TextInflate      160
262 #define ESCHER_ShpInst_TextDeflate      161
263 #define ESCHER_ShpInst_TextInflateBottom    162
264 #define ESCHER_ShpInst_TextDeflateBottom    163
265 #define ESCHER_ShpInst_TextInflateTop       164
266 #define ESCHER_ShpInst_TextDeflateTop       165
267 #define ESCHER_ShpInst_TextDeflateInflate   166
268 #define ESCHER_ShpInst_TextDeflateInflateDeflate    167
269 #define ESCHER_ShpInst_TextFadeRight    168
270 #define ESCHER_ShpInst_TextFadeLeft     169
271 #define ESCHER_ShpInst_TextFadeUp       170
272 #define ESCHER_ShpInst_TextFadeDown     171
273 #define ESCHER_ShpInst_TextSlantUp      172
274 #define ESCHER_ShpInst_TextSlantDown    173
275 #define ESCHER_ShpInst_TextCanUp        174
276 #define ESCHER_ShpInst_TextCanDown      175
277 #define ESCHER_ShpInst_FlowChartAlternateProcess    176
278 #define ESCHER_ShpInst_FlowChartOffpageConnector    177
279 #define ESCHER_ShpInst_Callout90        178
280 #define ESCHER_ShpInst_AccentCallout90  179
281 #define ESCHER_ShpInst_BorderCallout90  180
282 #define ESCHER_ShpInst_AccentBorderCallout90    181
283 #define ESCHER_ShpInst_LeftRightUpArrow 182
284 #define ESCHER_ShpInst_Sun              183
285 #define ESCHER_ShpInst_Moon             184
286 #define ESCHER_ShpInst_BracketPair      185
287 #define ESCHER_ShpInst_BracePair        186
288 #define ESCHER_ShpInst_Seal4            187
289 #define ESCHER_ShpInst_DoubleWave       188
290 #define ESCHER_ShpInst_ActionButtonBlank    189
291 #define ESCHER_ShpInst_ActionButtonHome     190
292 #define ESCHER_ShpInst_ActionButtonHelp     191
293 #define ESCHER_ShpInst_ActionButtonInformation  192
294 #define ESCHER_ShpInst_ActionButtonForwardNext  193
295 #define ESCHER_ShpInst_ActionButtonBackPrevious 194
296 #define ESCHER_ShpInst_ActionButtonEnd      195
297 #define ESCHER_ShpInst_ActionButtonBeginning    196
298 #define ESCHER_ShpInst_ActionButtonReturn   197
299 #define ESCHER_ShpInst_ActionButtonDocument 198
300 #define ESCHER_ShpInst_ActionButtonSound    199
301 #define ESCHER_ShpInst_ActionButtonMovie    200
302 #define ESCHER_ShpInst_HostControl          201
303 #define ESCHER_ShpInst_TextBox              202
304 
305 #define ESCHER_ShpInst_COUNT                203
306 #define ESCHER_ShpInst_Max                  0x0FFF
307 #define ESCHER_ShpInst_Nil                  ESCHER_ShpInst_Max
308 
309 enum ESCHER_BlibType
310 {                           // GEL provided types...
311    ERROR = 0,               // An error occured during loading
312    UNKNOWN,                 // An unknown blip type
313    EMF,                     // Windows Enhanced Metafile
314    WMF,                     // Windows Metafile
315    PICT,                    // Macintosh PICT
316    PEG,                     // JFIF
317    PNG,                     // PNG
318    DIB,                     // Windows DIB
319    FirstClient = 32,        // First client defined blip type
320    LastClient  = 255        // Last client defined blip type
321 };
322 
323 enum ESCHER_FillStyle
324 {
325     ESCHER_FillSolid,       // Fill with a solid color
326     ESCHER_FillPattern,     // Fill with a pattern (bitmap)
327     ESCHER_FillTexture,     // A texture (pattern with its own color map)
328     ESCHER_FillPicture,     // Center a picture in the shape
329     ESCHER_FillShade,       // Shade from start to end points
330     ESCHER_FillShadeCenter, // Shade from bounding rectangle to end point
331     ESCHER_FillShadeShape,  // Shade from shape outline to end point
332     ESCHER_FillShadeScale,
333     ESCHER_FillShadeTitle,
334     ESCHER_FillBackground
335 };
336 
337 enum ESCHER_wMode
338 {
339     ESCHER_wColor,          // only used for predefined shades
340     ESCHER_wAutomatic,      // depends on object type
341     ESCHER_wGrayScale,      // shades of gray only
342     ESCHER_wLightGrayScale, // shades of light gray only
343     ESCHER_wInverseGray,    // dark gray mapped to light gray, etc.
344     ESCHER_wGrayOutline,    // pure gray and white
345     ESCHER_wBlackTextLine,  // black text and lines, all else grayscale
346     ESCHER_wHighContrast,   // pure black and white mode (no grays)
347     ESCHER_wBlack,          // solid black   msobwWhite,          // solid white
348     ESCHER_wDontShow,       // object not drawn
349     ESCHER_wNumModes        // number of Black and white modes
350 };
351 
352 
353 //
354 enum ESCHER_ShapePath
355 {
356     ESCHER_ShapeLines,        // A line of straight segments
357     ESCHER_ShapeLinesClosed,  // A closed polygonal object
358     ESCHER_ShapeCurves,       // A line of Bezier curve segments
359     ESCHER_ShapeCurvesClosed, // A closed shape with curved edges
360     ESCHER_ShapeComplex      // pSegmentInfo must be non-empty
361 };
362 
363 
364 enum ESCHER_WrapMode
365 {
366     ESCHER_WrapSquare,
367     ESCHER_WrapByPoints,
368     ESCHER_WrapNone,
369     ESCHER_WrapTopBottom,
370     ESCHER_WrapThrough
371 };
372 
373 //
374 enum ESCHER_bwMode
375 {
376     ESCHER_bwColor,          // only used for predefined shades
377     ESCHER_bwAutomatic,      // depends on object type
378     ESCHER_bwGrayScale,      // shades of gray only
379     ESCHER_bwLightGrayScale, // shades of light gray only
380     ESCHER_bwInverseGray,    // dark gray mapped to light gray, etc.
381     ESCHER_bwGrayOutline,    // pure gray and white
382     ESCHER_bwBlackTextLine,  // black text and lines, all else grayscale
383     ESCHER_bwHighContrast,   // pure black and white mode (no grays)
384     ESCHER_bwBlack,          // solid black
385     ESCHER_bwWhite,          // solid white
386     ESCHER_bwDontShow,       // object not drawn
387     ESCHER_bwNumModes        // number of Black and white modes
388 };
389 
390 
391 enum ESCHER_AnchorText
392 {
393     ESCHER_AnchorTop,
394     ESCHER_AnchorMiddle,
395     ESCHER_AnchorBottom,
396     ESCHER_AnchorTopCentered,
397     ESCHER_AnchorMiddleCentered,
398     ESCHER_AnchorBottomCentered,
399     ESCHER_AnchorTopBaseline,
400     ESCHER_AnchorBottomBaseline,
401     ESCHER_AnchorTopCenteredBaseline,
402     ESCHER_AnchorBottomCenteredBaseline
403 };
404 
405 enum ESCHER_cDir
406 {
407     ESCHER_cDir0,       // Right
408     ESCHER_cDir90,      // Down
409     ESCHER_cDir180,     // Left
410     ESCHER_cDir270      // Up
411 };
412 
413 //  connector style
414 enum ESCHER_cxSTYLE
415 {
416     ESCHER_cxstyleStraight = 0,
417     ESCHER_cxstyleBent,
418     ESCHER_cxstyleCurved,
419     ESCHER_cxstyleNone
420 };
421 
422 //  text flow
423 enum ESCHER_txfl
424 {
425     ESCHER_txflHorzN,           // Horizontal non-@
426     ESCHER_txflTtoBA,           // Top to Bottom @-font
427     ESCHER_txflBtoT,            // Bottom to Top non-@
428     ESCHER_txflTtoBN,           // Top to Bottom non-@
429     ESCHER_txflHorzA,           // Horizontal @-font
430     ESCHER_txflVertN            // Vertical, non-@
431 };
432 
433 //  text direction (needed for Bi-Di support)
434 enum ESCHER_txDir
435 {
436     ESCHER_txdirLTR,            // left-to-right text direction
437     ESCHER_txdirRTL,            // right-to-left text direction
438     ESCHER_txdirContext         // context text direction
439 };
440 
441 // Callout Type
442 enum ESCHER_spcot
443 {
444     ESCHER_spcotRightAngle = 1,
445     ESCHER_spcotOneSegment = 2,
446     ESCHER_spcotTwoSegment = 3,
447     ESCHER_spcotThreeSegment = 4
448 };
449 
450 // Callout Angle
451 enum ESCHER_spcoa
452 {
453     ESCHER_spcoaAny,
454     ESCHER_spcoa30,
455     ESCHER_spcoa45,
456     ESCHER_spcoa60,
457     ESCHER_spcoa90,
458     ESCHER_spcoa0
459 };
460 
461 //  Callout Drop
462 enum ESCHER_spcod
463 {
464     ESCHER_spcodTop,
465     ESCHER_spcodCenter,
466     ESCHER_spcodBottom,
467     ESCHER_spcodSpecified
468 };
469 
470 // FontWork alignment
471 enum ESCHER_GeoTextAlign
472 {
473     ESCHER_AlignTextStretch,      /* Stretch each line of text to fit width. */
474     ESCHER_AlignTextCenter,       /* Center text on width. */
475     ESCHER_AlignTextLeft,         /* Left justify. */
476     ESCHER_AlignTextRight,        /* Right justify. */
477     ESCHER_AlignTextLetterJust,   /* Spread letters out to fit width. */
478     ESCHER_AlignTextWordJust,     /* Spread words out to fit width. */
479     ESCHER_AlignTextInvalid       /* Invalid */
480 };
481 
482 //  flags for pictures
483 enum ESCHER_BlipFlags
484 {
485     ESCHER_BlipFlagDefault = 0,
486     ESCHER_BlipFlagComment = 0,   // Blip name is a comment
487     ESCHER_BlipFlagFile,          // Blip name is a file name
488     ESCHER_BlipFlagURL,           // Blip name is a full URL
489     ESCHER_BlipFlagType = 3,      // Mask to extract type
490    /* Or the following flags with any of the above. */
491     ESCHER_BlipFlagDontSave = 4,  // A "dont" is the depression in the metal
492                              // body work of an automobile caused when a
493                              // cyclist violently thrusts his or her nose
494                              // at it, thus a DontSave is another name for
495                              // a cycle lane.
496     ESCHER_BlipFlagDoNotSave = 4, // For those who prefer English
497     ESCHER_BlipFlagLinkToFile = 8
498 };
499 
500 //
501 enum ESCHER_3DRenderMode
502 {
503     ESCHER_FullRender,      // Generate a full rendering
504     ESCHER_Wireframe,       // Generate a wireframe
505     ESCHER_BoundingCube     // Generate a bounding cube
506 };
507 
508 //
509 enum ESCHER_xFormType
510 {
511     ESCHER_xFormAbsolute,   // Apply transform in absolute space centered on shape
512     ESCHER_xFormShape,      // Apply transform to shape geometry
513     ESCHER_xFormDrawing     // Apply transform in drawing space
514 };
515 
516 //
517 enum ESCHER_ShadowType
518 {
519     ESCHER_ShadowOffset,    // N pixel offset shadow
520     ESCHER_ShadowDouble,    // Use second offset too
521     ESCHER_ShadowRich,      // Rich perspective shadow (cast relative to shape)
522     ESCHER_ShadowShape,     // Rich perspective shadow (cast in shape space)
523     ESCHER_ShadowDrawing,   // Perspective shadow cast in drawing space
524     ESCHER_ShadowEmbossOrEngrave
525 };
526 
527 //  - the type of a (length) measurement
528 enum ESCHER_dzType
529    {
530    ESCHER_dzTypeMin          = 0,
531    ESCHER_dzTypeDefault      = 0,  // Default size, ignore the values
532    ESCHER_dzTypeA            = 1,  // Values are in EMUs
533    ESCHER_dzTypeV            = 2,  // Values are in pixels
534    ESCHER_dzTypeShape        = 3,  // Values are 16.16 fractions of shape size
535    ESCHER_dzTypeFixedAspect  = 4,  // Aspect ratio is fixed
536    ESCHER_dzTypeAFixed       = 5,  // EMUs, fixed aspect ratio
537    ESCHER_dzTypeVFixed       = 6,  // Pixels, fixed aspect ratio
538    ESCHER_dzTypeShapeFixed   = 7,  // Proportion of shape, fixed aspect ratio
539    ESCHER_dzTypeFixedAspectEnlarge= 8,  // Aspect ratio is fixed, favor larger size
540    ESCHER_dzTypeAFixedBig    = 9,  // EMUs, fixed aspect ratio
541    ESCHER_dzTypeVFixedBig    = 10, // Pixels, fixed aspect ratio
542    ESCHER_dzTypeShapeFixedBig= 11, // Proportion of shape, fixed aspect ratio
543    ESCHER_dzTypeMax         = 11
544 };
545 
546 // how to interpret the colors in a shaded fill.
547 enum ESCHER_ShadeType
548 {
549     ESCHER_ShadeNone  = 0,        // Interpolate without correction between RGBs
550     ESCHER_ShadeGamma = 1,        // Apply gamma correction to colors
551     ESCHER_ShadeSigma = 2,        // Apply a sigma transfer function to position
552     ESCHER_ShadeBand  = 4,        // Add a flat band at the start of the shade
553     ESCHER_ShadeOneColor = 8,     // This is a one color shade
554 
555    /* A parameter for the band or sigma function can be stored in the top
556       16 bits of the value - this is a proportion of *each* band of the
557       shade to make flat (or the approximate equal value for a sigma
558       function).  NOTE: the parameter is not used for the sigma function,
559       instead a built in value is used.  This value should not be changed
560       from the default! */
561     ESCHER_ShadeParameterShift = 16,
562     ESCHER_ShadeParameterMask  = 0xffff0000,
563 
564     ESCHER_ShadeDefault = (ESCHER_ShadeGamma|ESCHER_ShadeSigma|
565                      (16384<<ESCHER_ShadeParameterShift))
566 };
567 
568 // compound line style
569 enum ESCHER_LineStyle
570 {
571     ESCHER_LineSimple,            // Single line (of width lineWidth)
572     ESCHER_LineDouble,            // Double lines of equal width
573     ESCHER_LineThickThin,         // Double lines, one thick, one thin
574     ESCHER_LineThinThick,         // Double lines, reverse order
575     ESCHER_LineTriple             // Three lines, thin, thick, thin
576 };
577 
578 //  how to "fill" the line contour
579 enum ESCHER_LineType
580 {
581    ESCHER_lineSolidType,         // Fill with a solid color
582    ESCHER_linePattern,           // Fill with a pattern (bitmap)
583    ESCHER_lineTexture,           // A texture (pattern with its own color map)
584    ESCHER_linePicture            // Center a picture in the shape
585 };
586 
587 // dashed line style
588 enum ESCHER_LineDashing
589 {
590     ESCHER_LineSolid,              // Solid (continuous) pen
591     ESCHER_LineDashSys,            // PS_DASH system   dash style
592     ESCHER_LineDotSys,             // PS_DOT system   dash style
593     ESCHER_LineDashDotSys,         // PS_DASHDOT system dash style
594     ESCHER_LineDashDotDotSys,      // PS_DASHDOTDOT system dash style
595     ESCHER_LineDotGEL,             // square dot style
596     ESCHER_LineDashGEL,            // dash style
597     ESCHER_LineLongDashGEL,        // long dash style
598     ESCHER_LineDashDotGEL,         // dash short dash
599     ESCHER_LineLongDashDotGEL,     // long dash short dash
600     ESCHER_LineLongDashDotDotGEL   // long dash short dash short dash
601 };
602 
603 // line end effect
604 enum ESCHER_LineEnd
605 {
606     ESCHER_LineNoEnd,
607     ESCHER_LineArrowEnd,
608     ESCHER_LineArrowStealthEnd,
609     ESCHER_LineArrowDiamondEnd,
610     ESCHER_LineArrowOvalEnd,
611     ESCHER_LineArrowOpenEnd
612 };
613 
614 // size of arrowhead
615 enum ESCHER_LineWidth
616 {
617     ESCHER_LineNarrowArrow,
618     ESCHER_LineMediumWidthArrow,
619     ESCHER_LineWideArrow
620 };
621 
622 // size of arrowhead
623 enum ESCHER_LineEndLenght
624 {
625     ESCHER_LineShortArrow,
626     ESCHER_LineMediumLenArrow,
627     ESCHER_LineLongArrow
628 };
629 
630 // line join style.
631 enum ESCHER_LineJoin
632 {
633     ESCHER_LineJoinBevel,     // Join edges by a straight line
634     ESCHER_LineJoinMiter,     // Extend edges until they join
635     ESCHER_LineJoinRound      // Draw an arc between the two edges
636 };
637 
638 // line cap style (applies to ends of dash segments too).
639 enum ESCHER_LineCap
640 {
641     ESCHER_LineEndCapRound,   // Rounded ends - the default
642     ESCHER_LineEndCapSquare,  // Square protrudes by half line width
643     ESCHER_LineEndCapFlat     // Line ends at end point
644 };
645 // Shape Properties
646 // 1pt = 12700 EMU (English Metric Units)
647 // 1pt = 20 Twip = 20/1440" = 1/72"
648 // 1twip=635 EMU
649 // 1" = 12700*72 = 914400 EMU
650 // 1" = 25.4mm
651 // 1mm = 36000 EMU
652 // Transform
653 #define ESCHER_Prop_Rotation                      4  /*  Fixed Point 16.16 degrees                  */
654 // Protection
655 #define ESCHER_Prop_LockRotation                119  /*  sal_Bool              No rotation                         */
656 #define ESCHER_Prop_LockAspectRatio             120  /*  sal_Bool              Don't allow changes in aspect ratio */
657 #define ESCHER_Prop_LockPosition                121  /*  sal_Bool              Don't allow the shape to be moved   */
658 #define ESCHER_Prop_LockAgainstSelect           122  /*  sal_Bool              Shape may not be selected           */
659 #define ESCHER_Prop_LockCropping                123  /*  sal_Bool              No cropping this shape              */
660 #define ESCHER_Prop_LockVertices                124  /*  sal_Bool              Edit Points not allowed             */
661 #define ESCHER_Prop_LockText                    125  /*  sal_Bool              Do not edit text                    */
662 #define ESCHER_Prop_LockAdjustHandles           126  /*  sal_Bool              Do not adjust                       */
663 #define ESCHER_Prop_LockAgainstGrouping         127  /*  sal_Bool              Do not group this shape             */
664 // Text
665 #define ESCHER_Prop_lTxid                       128  /*  LONG              id for the text, value determined by the host            */
666 #define ESCHER_Prop_dxTextLeft                  129  /*  LONG              margins relative to shape's inscribed                    */
667 #define ESCHER_Prop_dyTextTop                   130  /*  LONG                text rectangle (in EMUs)                               */
668 #define ESCHER_Prop_dxTextRight                 131  /*  LONG                                                                       */
669 #define ESCHER_Prop_dyTextBottom                132  /*  LONG                                                                       */
670 #define ESCHER_Prop_WrapText                    133  /*  MSOWRAPMODE       Wrap text at shape margins                               */
671 #define ESCHER_Prop_scaleText                   134  /*  LONG              Text zoom/scale (used if fFitTextToShape)                */
672 #define ESCHER_Prop_AnchorText                  135  /*  ESCHER_AnchorText How to anchor the text                                   */
673 #define ESCHER_Prop_txflTextFlow                136  /*  MSOTXFL           Text flow                                                */
674 #define ESCHER_Prop_cdirFont                    137  /*  MSOCDIR           Font rotation                                            */
675 #define ESCHER_Prop_hspNext                     138  /*  MSOHSP            ID of the next shape (used by Word for linked textboxes) */
676 #define ESCHER_Prop_txdir                       139  /*  MSOTXDIR          Bi-Di Text direction                                     */
677 #define ESCHER_Prop_SelectText                  187  /*  sal_Bool              sal_True if single click selects text, sal_False if two clicks   */
678 #define ESCHER_Prop_AutoTextMargin              188  /*  sal_Bool              use host's margin calculations                           */
679 #define ESCHER_Prop_RotateText                  189  /*  sal_Bool              Rotate text with shape                                   */
680 #define ESCHER_Prop_FitShapeToText              190  /*  sal_Bool              Size shape to fit text size                              */
681 #define ESCHER_Prop_FitTextToShape              191  /*  sal_Bool              Size text to fit shape size                              */
682 // GeoText
683 #define ESCHER_Prop_gtextUNICODE                192  /*  WCHAR*            UNICODE text string       */
684 #define ESCHER_Prop_gtextRTF                    193  /*  char*             RTF text string           */
685 #define ESCHER_Prop_gtextAlign                  194  /*  MSOGEOTEXTALIGN   alignment on curve        */
686 #define ESCHER_Prop_gtextSize                   195  /*  LONG              default point size        */
687 #define ESCHER_Prop_gtextSpacing                196  /*  LONG              fixed point 16.16         */
688 #define ESCHER_Prop_gtextFont                   197  /*  WCHAR*            font family name          */
689 #define ESCHER_Prop_gtextFReverseRows           240  /*  sal_Bool              Reverse row order         */
690 #define ESCHER_Prop_fGtext                      241  /*  sal_Bool              Has text effect           */
691 #define ESCHER_Prop_gtextFVertical              242  /*  sal_Bool              Rotate characters         */
692 #define ESCHER_Prop_gtextFKern                  243  /*  sal_Bool              Kern characters           */
693 #define ESCHER_Prop_gtextFTight                 244  /*  sal_Bool              Tightening or tracking    */
694 #define ESCHER_Prop_gtextFStretch               245  /*  sal_Bool              Stretch to fit shape      */
695 #define ESCHER_Prop_gtextFShrinkFit             246  /*  sal_Bool              Char bounding box         */
696 #define ESCHER_Prop_gtextFBestFit               247  /*  sal_Bool              Scale text-on-path        */
697 #define ESCHER_Prop_gtextFNormalize             248  /*  sal_Bool              Stretch char height       */
698 #define ESCHER_Prop_gtextFDxMeasure             249  /*  sal_Bool              Do not measure along path */
699 #define ESCHER_Prop_gtextFBold                  250  /*  sal_Bool              Bold font                 */
700 #define ESCHER_Prop_gtextFItalic                251  /*  sal_Bool              Italic font               */
701 #define ESCHER_Prop_gtextFUnderline             252  /*  sal_Bool              Underline font            */
702 #define ESCHER_Prop_gtextFShadow                253  /*  sal_Bool              Shadow font               */
703 #define ESCHER_Prop_gtextFSmallcaps             254  /*  sal_Bool              Small caps font           */
704 #define ESCHER_Prop_gtextFStrikethrough         255  /*  sal_Bool              Strike through font       */
705 // Blip
706 #define ESCHER_Prop_cropFromTop                 256  /*  LONG              16.16 fraction times total                          */
707 #define ESCHER_Prop_cropFromBottom              257  /*  LONG                image width or height,                            */
708 #define ESCHER_Prop_cropFromLeft                258  /*  LONG                as appropriate.                                   */
709 #define ESCHER_Prop_cropFromRight               259  /*  LONG                                                                  */
710 #define ESCHER_Prop_pib                         260  /*  IMsoBlip*         Blip to display                                     */
711 #define ESCHER_Prop_pibName                     261  /*  WCHAR*            Blip file name                                      */
712 #define ESCHER_Prop_pibFlags                    262  /*  MSOBLIPFLAGS      Blip flags                                          */
713 #define ESCHER_Prop_pictureTransparent          263  /*  LONG              transparent color (none if ~0UL)                    */
714 #define ESCHER_Prop_pictureContrast             264  /*  LONG              contrast setting                                    */
715 #define ESCHER_Prop_pictureBrightness           265  /*  LONG              brightness setting                                  */
716 #define ESCHER_Prop_pictureGamma                266  /*  LONG              16.16 gamma                                         */
717 #define ESCHER_Prop_pictureId                   267  /*  LONG              Host-defined ID for OLE objects (usually a pointer) */
718 #define ESCHER_Prop_pictureDblCrMod             268  /*  MSOCLR            Modification used if shape has double shadow        */
719 #define ESCHER_Prop_pictureFillCrMod            269  /*  MSOCLR                                                                */
720 #define ESCHER_Prop_pictureLineCrMod            270  /*  MSOCLR                                                                */
721 #define ESCHER_Prop_pibPrint                    271  /*  IMsoBlip*         Blip to display when printing                       */
722 #define ESCHER_Prop_pibPrintName                272  /*  WCHAR*            Blip file name                                      */
723 #define ESCHER_Prop_pibPrintFlags               273  /*  MSOBLIPFLAGS      Blip flags                                          */
724 #define ESCHER_Prop_fNoHitTestPicture           316  /*  sal_Bool              Do not hit test the picture                         */
725 #define ESCHER_Prop_pictureGray                 317  /*  sal_Bool              grayscale display                                   */
726 #define ESCHER_Prop_pictureBiLevel              318  /*  sal_Bool              bi-level display                                    */
727 #define ESCHER_Prop_pictureActive               319  /*  sal_Bool              Server is active (OLE objects only)                 */
728 // Geometry
729 #define ESCHER_Prop_geoLeft                     320  /*  LONG              Defines the G (geometry) coordinate space.  */
730 #define ESCHER_Prop_geoTop                      321  /*  LONG                                                          */
731 #define ESCHER_Prop_geoRight                    322  /*  LONG                                                          */
732 #define ESCHER_Prop_geoBottom                   323  /*  LONG                                                          */
733 #define ESCHER_Prop_shapePath                   324  /*  MSOSHAPEPATH                                                  */
734 #define ESCHER_Prop_pVertices                   325  /*  IMsoArray         An array of points, in G units.             */
735 #define ESCHER_Prop_pSegmentInfo                326  /*  IMsoArray                                                     */
736 #define ESCHER_Prop_adjustValue                 327  /*  LONG              Adjustment values corresponding to          */
737 #define ESCHER_Prop_adjust2Value                328  /*  LONG                the positions of the adjust handles       */
738 #define ESCHER_Prop_adjust3Value                329  /*  LONG                of the shape. The number of values        */
739 #define ESCHER_Prop_adjust4Value                330  /*  LONG                used and their allowable ranges vary      */
740 #define ESCHER_Prop_adjust5Value                331  /*  LONG                from shape type to shape type.            */
741 #define ESCHER_Prop_adjust6Value                332  /*  LONG                                                          */
742 #define ESCHER_Prop_adjust7Value                333  /*  LONG                                                          */
743 #define ESCHER_Prop_adjust8Value                334  /*  LONG                                                          */
744 #define ESCHER_Prop_adjust9Value                335  /*  LONG                                                          */
745 #define ESCHER_Prop_adjust10Value               336  /*  LONG                                                          */
746 #define ESCHER_Prop_fShadowOK                   378  /*  sal_Bool              Shadow may be set                           */
747 #define ESCHER_Prop_f3DOK                       379  /*  sal_Bool              3D may be set                               */
748 #define ESCHER_Prop_fLineOK                     380  /*  sal_Bool              Line style may be set                       */
749 #define ESCHER_Prop_fGtextOK                    381  /*  sal_Bool              Text effect (FontWork) supported             */
750 #define ESCHER_Prop_fFillShadeShapeOK           382  /*  sal_Bool                                                          */
751 #define ESCHER_Prop_fFillOK                     383  /*  sal_Bool              OK to fill the shape through the UI or VBA? */
752 // FillStyle
753 #define ESCHER_Prop_fillType                    384  /*  ESCHER_FillStyle  Type of fill                                  */
754 #define ESCHER_Prop_fillColor                   385  /*  MSOCLR            Foreground color                              */
755 #define ESCHER_Prop_fillOpacity                 386  /*  LONG              Fixed 16.16                                   */
756 #define ESCHER_Prop_fillBackColor               387  /*  MSOCLR            Background color                              */
757 #define ESCHER_Prop_fillBackOpacity             388  /*  LONG              Shades only                                   */
758 #define ESCHER_Prop_fillCrMod                   389  /*  MSOCLR            Modification for BW views                     */
759 #define ESCHER_Prop_fillBlip                    390  /*  IMsoBlip*         Pattern/texture                               */
760 #define ESCHER_Prop_fillBlipName                391  /*  WCHAR*            Blip file name                                */
761 #define ESCHER_Prop_fillBlipFlags               392  /*  MSOBLIPFLAGS      Blip flags                                    */
762 #define ESCHER_Prop_fillWidth                   393  /*  LONG              How big (A units) to make a metafile texture. */
763 #define ESCHER_Prop_fillHeight                  394  /*  LONG                                                            */
764 #define ESCHER_Prop_fillAngle                   395  /*  LONG              Fade angle - degrees in 16.16                 */
765 #define ESCHER_Prop_fillFocus                   396  /*  LONG              Linear shaded fill focus percent              */
766 #define ESCHER_Prop_fillToLeft                  397  /*  LONG              Fraction 16.16                                */
767 #define ESCHER_Prop_fillToTop                   398  /*  LONG              Fraction 16.16                                */
768 #define ESCHER_Prop_fillToRight                 399  /*  LONG              Fraction 16.16                                */
769 #define ESCHER_Prop_fillToBottom                400  /*  LONG              Fraction 16.16                                */
770 #define ESCHER_Prop_fillRectLeft                401  /*  LONG              For shaded fills, use the specified rectangle */
771 #define ESCHER_Prop_fillRectTop                 402  /*  LONG                instead of the shape's bounding rect to     */
772 #define ESCHER_Prop_fillRectRight               403  /*  LONG                define how large the fade is going to be.   */
773 #define ESCHER_Prop_fillRectBottom              404  /*  LONG                                                            */
774 #define ESCHER_Prop_fillDztype                  405  /*  MSODZTYPE                                                       */
775 #define ESCHER_Prop_fillShadePreset             406  /*  LONG              Special shades                                */
776 #define ESCHER_Prop_fillShadeColors             407  /*  IMsoArray         a preset array of colors                      */
777 #define ESCHER_Prop_fillOriginX                 408  /*  LONG                                                            */
778 #define ESCHER_Prop_fillOriginY                 409  /*  LONG                                                            */
779 #define ESCHER_Prop_fillShapeOriginX            410  /*  LONG                                                            */
780 #define ESCHER_Prop_fillShapeOriginY            411  /*  LONG                                                            */
781 #define ESCHER_Prop_fillShadeType               412  /*  MSOSHADETYPE      Type of shading, if a shaded (gradient) fill. */
782 #define ESCHER_Prop_fFilled                     443  /*  sal_Bool              Is shape filled?                              */
783 #define ESCHER_Prop_fHitTestFill                444  /*  sal_Bool              Should we hit test fill?                      */
784 #define ESCHER_Prop_fillShape                   445  /*  sal_Bool              Register pattern on shape                     */
785 #define ESCHER_Prop_fillUseRect                 446  /*  sal_Bool              Use the large rect?                           */
786 #define ESCHER_Prop_fNoFillHitTest              447  /*  sal_Bool              Hit test a shape as though filled             */
787 // LineStyle
788 #define ESCHER_Prop_lineColor                   448  /*  MSOCLR            Color of line                              */
789 #define ESCHER_Prop_lineOpacity                 449  /*  LONG              Not implemented                            */
790 #define ESCHER_Prop_lineBackColor               450  /*  MSOCLR            Background color                           */
791 #define ESCHER_Prop_lineCrMod                   451  /*  MSOCLR            Modification for BW views                  */
792 #define ESCHER_Prop_lineType                    452  /*  MSOLINETYPE       Type of line                               */
793 #define ESCHER_Prop_lineFillBlip                453  /*  IMsoBlip*         Pattern/texture                            */
794 #define ESCHER_Prop_lineFillBlipName            454  /*  WCHAR*            Blip file name                             */
795 #define ESCHER_Prop_lineFillBlipFlags           455  /*  MSOBLIPFLAGS      Blip flags                                 */
796 #define ESCHER_Prop_lineFillWidth               456  /*  LONG              How big (A units) to make                  */
797 #define ESCHER_Prop_lineFillHeight              457  /*  LONG                a metafile texture.                      */
798 #define ESCHER_Prop_lineFillDztype              458  /*  MSODZTYPE         How to interpret fillWidth/Height numbers. */
799 #define ESCHER_Prop_lineWidth                   459  /*  LONG              A units; 1pt == 12700 EMUs                 */
800 #define ESCHER_Prop_lineMiterLimit              460  /*  LONG              ratio (16.16) of width                     */
801 #define ESCHER_Prop_lineStyle                   461  /*  MSOLINESTYLE      Draw parallel lines?                       */
802 #define ESCHER_Prop_lineDashing                 462  /*  MSOLINEDASHING    Can be overridden by:                      */
803 #define ESCHER_Prop_lineDashStyle               463  /*  IMsoArray         As Win32 ExtCreatePen                      */
804 #define ESCHER_Prop_lineStartArrowhead          464  /*  MSOLINEEND        Arrow at start                             */
805 #define ESCHER_Prop_lineEndArrowhead            465  /*  MSOLINEEND        Arrow at end                               */
806 #define ESCHER_Prop_lineStartArrowWidth         466  /*  MSOLINEENDWIDTH   Arrow at start                             */
807 #define ESCHER_Prop_lineStartArrowLength        467  /*  MSOLINEENDLENGTH  Arrow at end                               */
808 #define ESCHER_Prop_lineEndArrowWidth           468  /*  MSOLINEENDWIDTH   Arrow at start                             */
809 #define ESCHER_Prop_lineEndArrowLength          469  /*  MSOLINEENDLENGTH  Arrow at end                               */
810 #define ESCHER_Prop_lineJoinStyle               470  /*  MSOLINEJOIN       How to join lines                          */
811 #define ESCHER_Prop_lineEndCapStyle             471  /*  MSOLINECAP        How to end lines                           */
812 #define ESCHER_Prop_fArrowheadsOK               507  /*  sal_Bool              Allow arrowheads if prop. is set           */
813 #define ESCHER_Prop_fLine                       508  /*  sal_Bool              Any line?                                  */
814 #define ESCHER_Prop_fHitTestLine                509  /*  sal_Bool              Should we hit test lines?                  */
815 #define ESCHER_Prop_lineFillShape               510  /*  sal_Bool              Register pattern on shape                  */
816 #define ESCHER_Prop_fNoLineDrawDash             511  /*  sal_Bool              Draw a dashed line if no line              */
817 // ShadowStyle
818 #define ESCHER_Prop_shadowType                  512  /*  MSOSHADOWTYPE     Type of effect            */
819 #define ESCHER_Prop_shadowColor                 513  /*  MSOCLR            Foreground color          */
820 #define ESCHER_Prop_shadowHighlight             514  /*  MSOCLR            Embossed color            */
821 #define ESCHER_Prop_shadowCrMod                 515  /*  MSOCLR            Modification for BW views */
822 #define ESCHER_Prop_shadowOpacity               516  /*  LONG              Fixed 16.16               */
823 #define ESCHER_Prop_shadowOffsetX               517  /*  LONG              Offset shadow             */
824 #define ESCHER_Prop_shadowOffsetY               518  /*  LONG              Offset shadow             */
825 #define ESCHER_Prop_shadowSecondOffsetX         519  /*  LONG              Double offset shadow      */
826 #define ESCHER_Prop_shadowSecondOffsetY         520  /*  LONG              Double offset shadow      */
827 #define ESCHER_Prop_shadowScaleXToX             521  /*  LONG              16.16                     */
828 #define ESCHER_Prop_shadowScaleYToX             522  /*  LONG              16.16                     */
829 #define ESCHER_Prop_shadowScaleXToY             523  /*  LONG              16.16                     */
830 #define ESCHER_Prop_shadowScaleYToY             524  /*  LONG              16.16                     */
831 #define ESCHER_Prop_shadowPerspectiveX          525  /*  LONG              16.16 / weight            */
832 #define ESCHER_Prop_shadowPerspectiveY          526  /*  LONG              16.16 / weight            */
833 #define ESCHER_Prop_shadowWeight                527  /*  LONG              scaling factor            */
834 #define ESCHER_Prop_shadowOriginX               528  /*  LONG                                        */
835 #define ESCHER_Prop_shadowOriginY               529  /*  LONG                                        */
836 #define ESCHER_Prop_fShadow                     574  /*  sal_Bool              Any shadow?               */
837 #define ESCHER_Prop_fshadowObscured             575  /*  sal_Bool              Excel5-style shadow       */
838 // PerspectiveStyle
839 #define ESCHER_Prop_perspectiveType             576  /*  MSOXFORMTYPE      Where transform applies        */
840 #define ESCHER_Prop_perspectiveOffsetX          577  /*  LONG              The LONG values define a       */
841 #define ESCHER_Prop_perspectiveOffsetY          578  /*  LONG                transformation matrix,       */
842 #define ESCHER_Prop_perspectiveScaleXToX        579  /*  LONG                effectively, each value      */
843 #define ESCHER_Prop_perspectiveScaleYToX        580  /*  LONG                is scaled by the             */
844 #define ESCHER_Prop_perspectiveScaleXToY        581  /*  LONG                perspectiveWeight parameter. */
845 #define ESCHER_Prop_perspectiveScaleYToY        582  /*  LONG                                             */
846 #define ESCHER_Prop_perspectivePerspectiveX     583  /*  LONG                                             */
847 #define ESCHER_Prop_perspectivePerspectiveY     584  /*  LONG                                             */
848 #define ESCHER_Prop_perspectiveWeight           585  /*  LONG              Scaling factor                 */
849 #define ESCHER_Prop_perspectiveOriginX          586  /*  LONG                                             */
850 #define ESCHER_Prop_perspectiveOriginY          587  /*  LONG                                             */
851 #define ESCHER_Prop_fPerspective                639  /*  sal_Bool              On/off                         */
852 // 3D Object
853 #define ESCHER_Prop_c3DSpecularAmt              640  /*  LONG         Fixed-point 16.16                                                                                                   */
854 #define ESCHER_Prop_c3DDiffuseAmt               641  /*  LONG         Fixed-point 16.16                                                                                                   */
855 #define ESCHER_Prop_c3DShininess                642  /*  LONG         Default gives OK results                                                                                            */
856 #define ESCHER_Prop_c3DEdgeThickness            643  /*  LONG         Specular edge thickness                                                                                             */
857 #define ESCHER_Prop_c3DExtrudeForward           644  /*  LONG         Distance of extrusion in EMUs                                                                                       */
858 #define ESCHER_Prop_c3DExtrudeBackward          645  /*  LONG                                                                                                                             */
859 #define ESCHER_Prop_c3DExtrudePlane             646  /*  LONG         Extrusion direction                                                                                                 */
860 #define ESCHER_Prop_c3DExtrusionColor           647  /*  MSOCLR       Basic color of extruded part of shape; the lighting model used will determine the exact shades used when rendering. */
861 #define ESCHER_Prop_c3DCrMod                    648  /*  MSOCLR       Modification for BW views                                                                                           */
862 #define ESCHER_Prop_f3D                         700  /*  sal_Bool         Does this shape have a 3D effect?                                                                                   */
863 #define ESCHER_Prop_fc3DMetallic                701  /*  sal_Bool         Use metallic specularity?                                                                                           */
864 #define ESCHER_Prop_fc3DUseExtrusionColor       702  /*  sal_Bool                                                                                                                             */
865 #define ESCHER_Prop_fc3DLightFace               703  /*  sal_Bool                                                                                                                             */
866 // 3D Style
867 #define ESCHER_Prop_c3DYRotationAngle           704  /*  LONG            degrees (16.16) about y axis         */
868 #define ESCHER_Prop_c3DXRotationAngle           705  /*  LONG            degrees (16.16) about x axis         */
869 #define ESCHER_Prop_c3DRotationAxisX            706  /*  LONG            These specify the rotation axis;     */
870 #define ESCHER_Prop_c3DRotationAxisY            707  /*  LONG              only their relative magnitudes     */
871 #define ESCHER_Prop_c3DRotationAxisZ            708  /*  LONG              matter.                            */
872 #define ESCHER_Prop_c3DRotationAngle            709  /*  LONG            degrees (16.16) about axis           */
873 #define ESCHER_Prop_c3DRotationCenterX          710  /*  LONG            rotation center x (16.16 or g-units) */
874 #define ESCHER_Prop_c3DRotationCenterY          711  /*  LONG            rotation center y (16.16 or g-units) */
875 #define ESCHER_Prop_c3DRotationCenterZ          712  /*  LONG            rotation center z (absolute (emus))  */
876 #define ESCHER_Prop_c3DRenderMode               713  /*  MSO3DRENDERMODE Full,wireframe, or bcube             */
877 #define ESCHER_Prop_c3DTolerance                714  /*  LONG            pixels (16.16)                       */
878 #define ESCHER_Prop_c3DXViewpoint               715  /*  LONG            X view point (emus)                  */
879 #define ESCHER_Prop_c3DYViewpoint               716  /*  LONG            Y view point (emus)                  */
880 #define ESCHER_Prop_c3DZViewpoint               717  /*  LONG            Z view distance (emus)               */
881 #define ESCHER_Prop_c3DOriginX                  718  /*  LONG                                                 */
882 #define ESCHER_Prop_c3DOriginY                  719  /*  LONG                                                 */
883 #define ESCHER_Prop_c3DSkewAngle                720  /*  LONG            degree (16.16) skew angle            */
884 #define ESCHER_Prop_c3DSkewAmount               721  /*  LONG            Percentage skew amount               */
885 #define ESCHER_Prop_c3DAmbientIntensity         722  /*  LONG            Fixed point intensity                */
886 #define ESCHER_Prop_c3DKeyX                     723  /*  LONG            Key light source direc-              */
887 #define ESCHER_Prop_c3DKeyY                     724  /*  LONG            tion; only their relative            */
888 #define ESCHER_Prop_c3DKeyZ                     725  /*  LONG            magnitudes matter                    */
889 #define ESCHER_Prop_c3DKeyIntensity             726  /*  LONG            Fixed point intensity                */
890 #define ESCHER_Prop_c3DFillX                    727  /*  LONG            Fill light source direc-             */
891 #define ESCHER_Prop_c3DFillY                    728  /*  LONG            tion; only their relative            */
892 #define ESCHER_Prop_c3DFillZ                    729  /*  LONG            magnitudes matter                    */
893 #define ESCHER_Prop_c3DFillIntensity            730  /*  LONG            Fixed point intensity                */
894 #define ESCHER_Prop_fc3DConstrainRotation       763  /*  sal_Bool                                                 */
895 #define ESCHER_Prop_fc3DRotationCenterAuto      764  /*  sal_Bool                                                 */
896 #define ESCHER_Prop_fc3DParallel                765  /*  sal_Bool            Parallel projection?                 */
897 #define ESCHER_Prop_fc3DKeyHarsh                766  /*  sal_Bool            Is key lighting harsh?               */
898 #define ESCHER_Prop_fc3DFillHarsh               767  /*  sal_Bool            Is fill lighting harsh?              */
899 // Shape
900 #define ESCHER_Prop_hspMaster                   769  /*  MSOHSP          master shape                                        */
901 #define ESCHER_Prop_cxstyle                     771  /*  MSOCXSTYLE      Type of connector                                   */
902 #define ESCHER_Prop_bWMode                      772  /*  ESCHERwMode     Settings for modifications to                       */
903 #define ESCHER_Prop_bWModePureBW                773  /*  ESCHERwMode     be made when in different                         */
904 #define ESCHER_Prop_bWModeBW                    774  /*  ESCHERwMode     forms of black-and-white mode.                    */
905 #define ESCHER_Prop_fOleIcon                    826  /*  sal_Bool            For OLE objects, whether the object is in icon form */
906 #define ESCHER_Prop_fPreferRelativeResize       827  /*  sal_Bool            For UI only. Prefer relative resizing.              */
907 #define ESCHER_Prop_fLockShapeType              828  /*  sal_Bool            Lock the shape type (don't allow Change Shape)      */
908 #define ESCHER_Prop_fDeleteAttachedObject       830  /*  sal_Bool                                                                */
909 #define ESCHER_Prop_fBackground                 831  /*  sal_Bool            If sal_True, this is the background shape.              */
910 // Callout
911 #define ESCHER_Prop_spcot                       832  /*  MSOSPCOT        Callout type                                           */
912 #define ESCHER_Prop_dxyCalloutGap               833  /*  LONG            Distance from box to first point.(EMUs)                */
913 #define ESCHER_Prop_spcoa                       834  /*  MSOSPCOA        Callout angle                                          */
914 #define ESCHER_Prop_spcod                       835  /*  MSOSPCOD        Callout drop type                                      */
915 #define ESCHER_Prop_dxyCalloutDropSpecified     836  /*  LONG            if msospcodSpecified, the actual drop distance         */
916 #define ESCHER_Prop_dxyCalloutLengthSpecified   837  /*  LONG            if fCalloutLengthSpecified, the actual distance        */
917 #define ESCHER_Prop_fCallout                    889  /*  sal_Bool            Is the shape a callout?                                */
918 #define ESCHER_Prop_fCalloutAccentBar           890  /*  sal_Bool            does callout have accent bar                           */
919 #define ESCHER_Prop_fCalloutTextBorder          891  /*  sal_Bool            does callout have a text border                        */
920 #define ESCHER_Prop_fCalloutMinusX              892  /*  sal_Bool                                                                   */
921 #define ESCHER_Prop_fCalloutMinusY              893  /*  sal_Bool                                                                   */
922 #define ESCHER_Prop_fCalloutDropAuto            894  /*  sal_Bool            If true, then we occasionally invert the drop distance */
923 #define ESCHER_Prop_fCalloutLengthSpecified     895  /*  sal_Bool            if true, we look at dxyCalloutLengthSpecified          */
924 // GroupShape
925 #define ESCHER_Prop_wzName                      896  /*  WCHAR*          Shape Name (present only if explicitly set)                                                            */
926 #define ESCHER_Prop_wzDescription               897  /*  WCHAR*          alternate text                                                                                         */
927 #define ESCHER_Prop_pihlShape                   898  /*  IHlink*         The hyperlink in the shape.                                                                            */
928 #define ESCHER_Prop_pWrapPolygonVertices        899  /*  IMsoArray       The polygon that text will be wrapped around (Word)                                                    */
929 #define ESCHER_Prop_dxWrapDistLeft              900  /*  LONG            Left wrapping distance from text (Word)                                                                */
930 #define ESCHER_Prop_dyWrapDistTop               901  /*  LONG            Top wrapping distance from text (Word)                                                                 */
931 #define ESCHER_Prop_dxWrapDistRight             902  /*  LONG            Right wrapping distance from text (Word)                                                               */
932 #define ESCHER_Prop_dyWrapDistBottom            903  /*  LONG            Bottom wrapping distance from text (Word)                                                              */
933 #define ESCHER_Prop_lidRegroup                  904  /*  LONG            Regroup ID                                                                                             */
934 #define ESCHER_Prop_tableProperties             927
935 #define ESCHER_Prop_tableRowProperties          928
936 #define ESCHER_Prop_fEditedWrap                 953  /*  sal_Bool            Has the wrap polygon been edited?                                                                      */
937 #define ESCHER_Prop_fBehindDocument             954  /*  sal_Bool            Word-only (shape is behind text)                                                                       */
938 #define ESCHER_Prop_fOnDblClickNotify           955  /*  sal_Bool            Notify client on a double click                                                                        */
939 #define ESCHER_Prop_fIsButton                   956  /*  sal_Bool            A button shape (i.e., clicking performs an action). Set for shapes with attached hyperlinks or macros. */
940 #define ESCHER_Prop_fOneD                       957  /*  sal_Bool            1D adjustment                                                                                          */
941 #define ESCHER_Prop_fHidden                     958  /*  sal_Bool            Do not display                                                                                         */
942 #define ESCHER_Prop_fPrint                      959  /*  sal_Bool            Print this shape                                                                                       */
943 
944 #define ESCHER_PERSISTENTRY_PREALLOCATE     64
945 
946 #define ESCHER_Persist_PrivateEntry         0x80000000
947 #define ESCHER_Persist_Dgg                  0x00010000
948 #define ESCHER_Persist_Dg                   0x00020000
949 #define ESCHER_Persist_CurrentPosition      0x00040000
950 #define ESCHER_Persist_Grouping_Snap        0x00050000
951 #define ESCHER_Persist_Grouping_Logic       0x00060000
952 
953 const sal_uInt32 DFF_DGG_CLUSTER_SIZE       = 0x00000400;   /// Shape IDs per cluster in DGG atom.
954 
955 // ---------------------------------------------------------------------------------------------
956 
957 namespace com { namespace sun { namespace star {
958     namespace awt {
959         struct Gradient;
960     }
961     namespace drawing {
962         struct EnhancedCustomShapeAdjustmentValue;
963         class XShape;
964         class XShapes;
965     }
966 }}}
967 
968 struct MSFILTER_DLLPUBLIC EscherConnectorListEntry
969 {
970     ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >   mXConnector;
971     ::com::sun::star::awt::Point            maPointA;
972     ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >   mXConnectToA;
973     ::com::sun::star::awt::Point            maPointB;
974     ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >   mXConnectToB;
975 
976     sal_uInt32      GetConnectorRule( sal_Bool bFirst );
977 
EscherConnectorListEntryEscherConnectorListEntry978                     EscherConnectorListEntry( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rC,
979                                         const ::com::sun::star::awt::Point& rPA,
980                                         ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rSA ,
981                                         const ::com::sun::star::awt::Point& rPB,
982                                         ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rSB ) :
983                                             mXConnector ( rC ),
984                                             maPointA    ( rPA ),
985                                             mXConnectToA( rSA ),
986                                             maPointB    ( rPB ),
987                                             mXConnectToB( rSB ) {}
988 
989     sal_uInt32      GetClosestPoint( const Polygon& rPoly, const ::com::sun::star::awt::Point& rP );
990 };
991 
992 struct MSFILTER_DLLPUBLIC EscherExContainer
993 {
994     sal_uInt32  nContPos;
995     SvStream&   rStrm;
996 
997     EscherExContainer( SvStream& rSt, const sal_uInt16 nRecType, const sal_uInt16 nInstance = 0 );
998     ~EscherExContainer();
999 };
1000 struct MSFILTER_DLLPUBLIC EscherExAtom
1001 {
1002     sal_uInt32  nContPos;
1003     SvStream&   rStrm;
1004 
1005     EscherExAtom( SvStream& rSt, const sal_uInt16 nRecType, const sal_uInt16 nInstance = 0, const sal_uInt8 nVersion = 0 );
1006     ~EscherExAtom();
1007 };
1008 
1009 struct EscherPropertyValueHelper
1010 {
1011         static sal_Bool GetPropertyValue(
1012                 ::com::sun::star::uno::Any& rAny,
1013                     const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &,
1014                         const String& rPropertyName,
1015                             sal_Bool bTestPropertyAvailability = sal_False );
1016 
1017         static ::com::sun::star::beans::PropertyState GetPropertyState(
1018                     const ::com::sun::star::uno::Reference < ::com::sun::star::beans::XPropertySet > &,
1019                         const String& rPropertyName );
1020 };
1021 
1022 // ---------------------------------------------------------------------------------------------
1023 
1024 struct EscherPersistEntry
1025 {
1026     sal_uInt32  mnID;
1027     sal_uInt32  mnOffset;
EscherPersistEntryEscherPersistEntry1028             EscherPersistEntry( sal_uInt32 nId, sal_uInt32 nOffset ) { mnID = nId; mnOffset = nOffset; };
1029 
1030 };
1031 
1032 // ---------------------------------------------------------------------------------------------
1033 
1034 class EscherBlibEntry
1035 {
1036 
1037         friend class EscherGraphicProvider;
1038         friend class EscherEx;
1039 
1040     protected:
1041 
1042         sal_uInt32          mnIdentifier[ 4 ];
1043         sal_uInt32          mnPictureOffset;        // offset auf die grafik im PictureStreams
1044         sal_uInt32          mnSize;                 // size of real graphic
1045 
1046         sal_uInt32          mnRefCount;             // !! reference count
1047         sal_uInt32          mnSizeExtra;            // !! size of preceding header
1048 
1049         ESCHER_BlibType meBlibType;
1050 
1051         Size            maPrefSize;
1052         MapMode         maPrefMapMode;
1053 
1054         sal_Bool        mbIsEmpty;
1055         sal_Bool        mbIsNativeGraphicPossible;
1056 
1057     public:
1058 
1059                         EscherBlibEntry( sal_uInt32 nPictureOffset, const GraphicObject& rObj,
1060                                                 const ByteString& rId, const GraphicAttr* pAttr = NULL );
1061 
1062                         ~EscherBlibEntry();
1063 
1064         void            WriteBlibEntry( SvStream& rSt, sal_Bool bWritePictureOffset, sal_uInt32 nResize = 0 );
IsEmpty() const1065         sal_Bool        IsEmpty() const { return mbIsEmpty; };
1066 
1067         sal_Bool            operator==( const EscherBlibEntry& ) const;
1068 };
1069 
1070 // ---------------------------------------------------------------------------------------------
1071 
1072 #define _E_GRAPH_PROV_USE_INSTANCES             1
1073 #define _E_GRAPH_PROV_DO_NOT_ROTATE_METAFILES   2
1074 
1075 class MSFILTER_DLLPUBLIC EscherGraphicProvider
1076 {
1077         sal_uInt32              mnFlags;
1078 
1079         EscherBlibEntry**       mpBlibEntrys;
1080         sal_uInt32              mnBlibBufSize;
1081         sal_uInt32              mnBlibEntrys;
1082 
1083         rtl::OUString           maBaseURI;
1084 
1085     protected :
1086 
1087         sal_uInt32                  ImplInsertBlib( EscherBlibEntry* p_EscherBlibEntry );
1088 
1089     public :
1090 
1091         sal_uInt32  GetBlibStoreContainerSize( SvStream* pMergePicStreamBSE = NULL ) const;
1092         void        WriteBlibStoreContainer( SvStream& rStrm, SvStream* pMergePicStreamBSE = NULL  );
1093         sal_Bool WriteBlibStoreEntry(SvStream& rStrm, sal_uInt32 nBlipId,
1094             sal_Bool bWritePictureOffset, sal_uInt32 nResize = 0);
1095         sal_uInt32  GetBlibID( SvStream& rPicOutStream, const ByteString& rGraphicId, const Rectangle& rBoundRect,
1096                     const com::sun::star::awt::Rectangle* pVisArea = NULL, const GraphicAttr* pGrafikAttr = NULL );
HasGraphics() const1097         sal_Bool    HasGraphics() const { return mnBlibEntrys != 0; };
1098 
1099         void        SetNewBlipStreamOffset( sal_Int32 nOffset );
1100 
1101         sal_Bool    GetPrefSize( const sal_uInt32 nBlibId, Size& rSize, MapMode& rMapMode );
1102 
SetBaseURI(const rtl::OUString & rBaseURI)1103         void        SetBaseURI( const rtl::OUString& rBaseURI ) { maBaseURI = rBaseURI; };
GetBaseURI()1104         const rtl::OUString& GetBaseURI(){ return maBaseURI; };
1105 
1106         EscherGraphicProvider( sal_uInt32 nFlags = _E_GRAPH_PROV_DO_NOT_ROTATE_METAFILES );
1107         ~EscherGraphicProvider();
1108 
1109 };
1110 
1111 class MSFILTER_DLLPUBLIC EscherSolverContainer
1112 {
1113     List                maShapeList;
1114     List                maConnectorList;
1115 
1116 public:
1117 
1118     sal_uInt32          GetShapeId( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rShape ) const;
1119 
1120     void                AddShape( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > &, sal_uInt32 nId );
1121     void                AddConnector( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > &,
1122                                         const ::com::sun::star::awt::Point& rA,
1123                                     ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > &,
1124                                         const ::com::sun::star::awt::Point& rB,
1125                                     ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rConB );
1126 
1127     void                WriteSolver( SvStream& );
1128 
EscherSolverContainer()1129                         EscherSolverContainer(){};
1130                         ~EscherSolverContainer();
1131 };
1132 
1133 // ---------------------------------------------------------------------------------------------
1134 
1135 #define ESCHER_CREATEPOLYGON_LINE           1
1136 #define ESCHER_CREATEPOLYGON_POLYLINE       2
1137 #define ESCHER_CREATEPOLYGON_POLYPOLYGON    4
1138 
1139 class GraphicAttr;
1140 class SdrObjCustomShape;
1141 
1142 struct EscherPropSortStruct
1143 {
1144     sal_uInt8*  pBuf;
1145     sal_uInt32  nPropSize;
1146     sal_uInt32  nPropValue;
1147     sal_uInt16  nPropId;
1148 };
1149 
1150 typedef std::vector< EscherPropSortStruct > EscherProperties;
1151 
1152 class MSFILTER_DLLPUBLIC EscherPropertyContainer
1153 {
1154         EscherGraphicProvider*  pGraphicProvider;
1155         SvStream*               pPicOutStrm;
1156         Rectangle*              pShapeBoundRect;
1157 
1158         EscherPropSortStruct*   pSortStruct;
1159 
1160         sal_uInt32              nSortCount;
1161         sal_uInt32              nSortBufSize;
1162         sal_uInt32              nCountCount;
1163         sal_uInt32              nCountSize;
1164 
1165         sal_Bool                bHasComplexData;
1166 
1167         sal_uInt32  ImplGetColor( const sal_uInt32 rColor, sal_Bool bSwap = sal_True );
1168         void        ImplCreateGraphicAttributes( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
1169                                                     sal_uInt32 nBlibId, sal_Bool bCreateCroppingAttributes );
1170         sal_Bool    ImplCreateEmbeddedBmp( const ByteString& rUniqueId );
1171         void        ImplInit();
1172 
1173     public :
1174 
1175         EscherPropertyContainer();
1176         EscherPropertyContainer(
1177             EscherGraphicProvider& rGraphicProvider,    // the PropertyContainer needs to know
1178                     SvStream* pPicOutStrm,              // the GraphicProvider to be able to write
1179                         Rectangle& rShapeBoundRect );   // FillBitmaps or GraphicObjects.
1180                                                         // under some cirumstances the ShapeBoundRect is adjusted
1181                                                         // this will happen when rotated GraphicObjects
1182                                                         // are saved to PowerPoint
1183         ~EscherPropertyContainer();
1184 
1185         void        AddOpt( sal_uInt16 nPropertyID, const rtl::OUString& rString );
1186 
1187         void        AddOpt( sal_uInt16 nPropertyID, sal_uInt32 nPropValue,
1188                             sal_Bool bBlib = sal_False );
1189 
1190         void        AddOpt( sal_uInt16 nPropertyID, sal_Bool bBlib, sal_uInt32 nPropValue,
1191                             sal_uInt8* pProp, sal_uInt32 nPropSize );
1192 
1193         sal_Bool    GetOpt( sal_uInt16 nPropertyID, sal_uInt32& rPropValue ) const;
1194 
1195         sal_Bool    GetOpt( sal_uInt16 nPropertyID, EscherPropSortStruct& rPropValue ) const;
1196 
1197         EscherProperties GetOpts() const;
1198 
1199         void        Commit( SvStream& rSt, sal_uInt16 nVersion = 3, sal_uInt16 nRecType = ESCHER_OPT );
1200 
1201         sal_Bool    CreateShapeProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape );
1202         sal_Bool    CreateOLEGraphicProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXOleObject );
1203 
1204         sal_Bool    CreateGraphicProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape,
1205             const GraphicObject& rGraphicObj );
1206         sal_Bool    CreateMediaGraphicProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXMediaObject );
1207         /** Creates a complex ESCHER_Prop_fillBlip containing the BLIP directly (for Excel charts). */
1208         sal_Bool    CreateEmbeddedBitmapProperties( const ::rtl::OUString& rBitmapUrl,
1209                         ::com::sun::star::drawing::BitmapMode eBitmapMode );
1210         /** Creates a complex ESCHER_Prop_fillBlip containing a hatch style (for Excel charts). */
1211         sal_Bool    CreateEmbeddedHatchProperties( const ::com::sun::star::drawing::Hatch& rHatch,
1212                         const Color& rBackColor, bool bFillBackground );
1213 
1214                     // the GraphicProperties will only be created if a GraphicProvider and PicOutStrm is known
1215                     // DR: #99897# if no GraphicProvider is present, a complex ESCHER_Prop_fillBlip
1216                     //             will be created, containing the BLIP directly (e.g. for Excel charts).
1217         sal_Bool    CreateGraphicProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
1218                         const String& rSource, const sal_Bool bCreateFillBitmap, const sal_Bool bCreateCroppingAttributes = sal_False,
1219                             const sal_Bool bFillBitmapModeAllowed = sal_True );
1220         sal_Bool   CreateBlipPropertiesforOLEControl( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet, const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape);
1221         sal_Bool    CreatePolygonProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
1222                         sal_uInt32 nFlags, sal_Bool bBezier, ::com::sun::star::awt::Rectangle& rGeoRect, Polygon* pPolygon = NULL );
1223 
1224         static sal_uInt32 GetGradientColor( const ::com::sun::star::awt::Gradient* pGradient, sal_uInt32 nStartColor );
1225 
1226         void        CreateGradientProperties( const ::com::sun::star::awt::Gradient & rGradient );
1227         void        CreateGradientProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & , sal_Bool bTransparentGradient = sal_False );
1228         void        CreateLineProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &, sal_Bool bEdge );
1229         void        CreateFillProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &, sal_Bool bEdge , sal_Bool bTransparentGradient = sal_False );
1230         void        CreateFillProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &, sal_Bool bEdge ,  const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape );
1231         void        CreateTextProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > &, sal_uInt32 nText,
1232                         const sal_Bool bIsCustomShape = sal_False, const sal_Bool bIsTextFrame = sal_True );
1233 
1234         sal_Bool    CreateConnectorProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape,
1235                                                 EscherSolverContainer& rSolver, ::com::sun::star::awt::Rectangle& rGeoRect,
1236                                                     sal_uInt16& rShapeType, sal_uInt16& rShapeFlags );
1237 
1238                     // Because shadow properties depends to the line and fillstyle, the CreateShadowProperties method should be called at last.
1239                     // It activ only when at least a FillStyle or LineStyle is set.
1240         sal_Bool    CreateShadowProperties( const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & );
1241 
1242         sal_Int32   GetValueForEnhancedCustomShapeParameter( const ::com::sun::star::drawing::EnhancedCustomShapeParameter& rParameter,
1243                             const std::vector< sal_Int32 >& rEquationOrder, sal_Bool bAdjustTrans = sal_False );
1244         // creates all necessary CustomShape properties, this includes also Text-, Shadow-, Fill-, and LineProperties
1245         void        CreateCustomShapeProperties( const MSO_SPT eShapeType, const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & );
1246         sal_Bool    IsFontWork() const;
1247 
1248         // helper functions which are also used by the escher import
1249         static PolyPolygon GetPolyPolygon( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape );
1250         static PolyPolygon GetPolyPolygon( const ::com::sun::star::uno::Any& rSource );
1251         static MSO_SPT GetCustomShapeType( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape, sal_uInt32& nMirrorFlags );
1252         static MSO_SPT GetCustomShapeType( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > & rXShape, sal_uInt32& nMirrorFlags, rtl::OUString& rShapeType );
1253 
1254     // helper functions which are also used in ooxml export
1255     static sal_Bool GetLineArrow( const sal_Bool bLineStart,
1256                       const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > & rXPropSet,
1257                       ESCHER_LineEnd& reLineEnd, sal_Int32& rnArrowLength, sal_Int32& rnArrowWidth );
1258     static sal_Bool IsDefaultObject( SdrObjCustomShape* pCustoShape, const MSO_SPT eShapeType );
1259     static void LookForPolarHandles( const MSO_SPT eShapeType, sal_Int32& nAdjustmentsWhichNeedsToBeConverted );
1260     static sal_Bool GetAdjustmentValue( const com::sun::star::drawing::EnhancedCustomShapeAdjustmentValue & rkProp, sal_Int32 nIndex, sal_Int32 nAdjustmentsWhichNeedsToBeConverted, sal_Int32& nValue );
1261 };
1262 
1263 // ---------------------------------------------------------------------------------------------
1264 
1265 class MSFILTER_DLLPUBLIC EscherPersistTable
1266 {
1267 
1268     public:
1269         List    maPersistTable;
1270 
1271         sal_Bool    PtIsID( sal_uInt32 nID );
1272         void    PtInsert( sal_uInt32 nID, sal_uInt32 nOfs );
1273         sal_uInt32  PtDelete( sal_uInt32 nID );
1274         sal_uInt32  PtGetOffsetByID( sal_uInt32 nID );
1275         sal_uInt32  PtReplace( sal_uInt32 nID, sal_uInt32 nOfs );
1276         sal_uInt32  PtReplaceOrInsert( sal_uInt32 nID, sal_uInt32 nOfs );
PtGetCount() const1277         sal_uInt32  PtGetCount() const { return maPersistTable.Count(); };
1278 
1279                 EscherPersistTable();
1280         virtual ~EscherPersistTable();
1281 };
1282 
1283 // ---------------------------------------------------------------------------------------------
1284 
1285 class EscherEx;
1286 
1287 /// abstract base class for ESCHER_ClientTextbox, ESCHER_ClientData
1288 class MSFILTER_DLLPUBLIC EscherExClientRecord_Base
1289 {
1290 public:
EscherExClientRecord_Base()1291                                 EscherExClientRecord_Base() {}
1292     virtual                     ~EscherExClientRecord_Base();
1293 
1294                                 /// Application writes the record header
1295                                 /// using rEx.AddAtom(...) followed by
1296                                 /// record data written to rEx.GetStream()
1297     virtual void                WriteData( EscherEx& rEx ) const = 0;
1298 };
1299 
1300 
1301 /// abstract base class for ESCHER_ClientAnchor
1302 class MSFILTER_DLLPUBLIC EscherExClientAnchor_Base
1303 {
1304 public:
EscherExClientAnchor_Base()1305                                 EscherExClientAnchor_Base() {}
1306     virtual                     ~EscherExClientAnchor_Base();
1307 
1308                                 /// Application writes the record header
1309                                 /// using rEx.AddAtom(...) followed by
1310                                 /// record data written to rEx.GetStream()
1311     virtual void                WriteData( EscherEx& rEx,
1312                                     const Rectangle& rRect ) = 0;
1313 };
1314 
1315 
1316 class EscherExHostAppData
1317 {
1318 private:
1319         EscherExClientAnchor_Base*  pClientAnchor;
1320         EscherExClientRecord_Base*  pClientData;
1321         EscherExClientRecord_Base*  pClientTextbox;
1322         // ignore single shape if entire pages are written
1323         sal_Bool                        bDontWriteShape;
1324 
1325 public:
EscherExHostAppData()1326         EscherExHostAppData() : pClientAnchor(0), pClientData(0),
1327                                 pClientTextbox(0), bDontWriteShape(sal_False)
1328         {}
1329 
SetClientAnchor(EscherExClientAnchor_Base * p)1330         void SetClientAnchor( EscherExClientAnchor_Base* p )
1331             { pClientAnchor = p; }
SetClientData(EscherExClientRecord_Base * p)1332         void SetClientData( EscherExClientRecord_Base* p )
1333             { pClientData = p; }
SetClientTextbox(EscherExClientRecord_Base * p)1334         void SetClientTextbox( EscherExClientRecord_Base* p )
1335             { pClientTextbox = p; }
SetDontWriteShape(sal_Bool b)1336         void SetDontWriteShape( sal_Bool b )
1337             { bDontWriteShape = b; }
GetClientAnchor() const1338         EscherExClientAnchor_Base* GetClientAnchor() const
1339             { return pClientAnchor; }
GetClientData() const1340         EscherExClientRecord_Base* GetClientData() const
1341             { return pClientData; }
GetClientTextbox() const1342         EscherExClientRecord_Base* GetClientTextbox() const
1343             { return pClientTextbox; }
1344 
WriteClientAnchor(EscherEx & rEx,const Rectangle & rRect)1345         void WriteClientAnchor( EscherEx& rEx, const Rectangle& rRect )
1346             { if( pClientAnchor )   pClientAnchor->WriteData( rEx, rRect ); }
WriteClientData(EscherEx & rEx)1347         void WriteClientData( EscherEx& rEx )
1348             { if( pClientData )     pClientData->WriteData( rEx ); }
WriteClientTextbox(EscherEx & rEx)1349         void WriteClientTextbox( EscherEx& rEx )
1350             { if( pClientTextbox )  pClientTextbox->WriteData( rEx ); }
1351 
DontWriteShape() const1352         sal_Bool DontWriteShape() const { return bDontWriteShape; }
1353 };
1354 
1355 
1356 // ============================================================================
1357 
1358 /** Instance for global DFF data, shared through various instances of EscherEx. */
1359 class MSFILTER_DLLPUBLIC EscherExGlobal : public EscherGraphicProvider
1360 {
1361 public:
1362     explicit            EscherExGlobal( sal_uInt32 nGraphicProvFlags = _E_GRAPH_PROV_DO_NOT_ROTATE_METAFILES );
1363     virtual             ~EscherExGlobal();
1364 
1365     /** Returns a new drawing ID for a new drawing container (DGCONTAINER). */
1366     sal_uInt32          GenerateDrawingId();
1367     /** Creates and returns a new shape identifier, updates the internal shape
1368         counters and registers the identifier in the DGG cluster table.
1369         @param nDrawingId  Drawing identifier has to be passed to be able to
1370             generate shape identifiers for multiple drawings simultaniously. */
1371     sal_uInt32          GenerateShapeId( sal_uInt32 nDrawingId, bool bIsInSpgr );
1372     /** Returns the number of shapes in the current drawing, based on number of
1373         calls to the GenerateShapeId() function. */
1374     sal_uInt32          GetDrawingShapeCount( sal_uInt32 nDrawingId ) const;
1375     /** Returns the last shape identifier generated by the GenerateShapeId()
1376         function. */
1377     sal_uInt32          GetLastShapeId( sal_uInt32 nDrawingId ) const;
1378 
1379     /** Sets the flag indicating that the DGGCONTAINER exists. */
SetDggContainer()1380     inline void         SetDggContainer() { mbHasDggCont = true; }
1381     /** Sets the flag indicating that the DGGCONTAINER exists. */
HasDggContainer() const1382     inline bool         HasDggContainer() const { return mbHasDggCont; }
1383     /** Returns the total size of the DGG atom (including header). */
1384     sal_uInt32          GetDggAtomSize() const;
1385     /** Writes the complete DGG atom to the passed stream (overwrites existing data!). */
1386     void                WriteDggAtom( SvStream& rStrm ) const;
1387 
1388     /** Called if a picture shall be written and no picture stream is set at
1389         class ImplEscherExSdr.
1390 
1391         On first invokation, this function calls the virtual member function
1392         ImplQueryPictureStream(). The return value will be cached internally
1393         for subsequent calls and for the GetPictureStream() function.
1394      */
1395     SvStream*           QueryPictureStream();
1396 
1397     /** Returns the picture stream if existing (queried), otherwise null. */
GetPictureStream()1398     inline SvStream*    GetPictureStream() { return mpPicStrm; }
1399 
1400 private:
1401     /** Derived classes may implement to create a new stream used to store the
1402         picture data.
1403 
1404         The implementation has to take care about lifetime of the returned
1405         stream (it will not be destructed automatically). This function is
1406         called exactly once. The return value will be cached internally for
1407         repeated calls of the public QueryPictureStream() function.
1408      */
1409     virtual SvStream*   ImplQueryPictureStream();
1410 
1411 private:
1412     struct ClusterEntry
1413     {
1414         sal_uInt32          mnDrawingId;        /// Identifier of drawing this cluster belongs to (one-based index into maDrawingInfos).
1415         sal_uInt32          mnNextShapeId;      /// Next free shape identifier in this cluster.
ClusterEntryEscherExGlobal::ClusterEntry1416         inline explicit     ClusterEntry( sal_uInt32 nDrawingId ) : mnDrawingId( nDrawingId ), mnNextShapeId( 0 ) {}
1417     };
1418     typedef ::std::vector< ClusterEntry > ClusterTable;
1419 
1420     struct DrawingInfo
1421     {
1422         sal_uInt32          mnClusterId;        /// Currently used cluster (one-based index into maClusterTable).
1423         sal_uInt32          mnShapeCount;       /// Current number of shapes in this drawing.
1424         sal_uInt32          mnLastShapeId;      /// Last shape identifier generated for this drawing.
DrawingInfoEscherExGlobal::DrawingInfo1425         inline explicit     DrawingInfo( sal_uInt32 nClusterId ) : mnClusterId( nClusterId ), mnShapeCount( 0 ), mnLastShapeId( 0 ) {}
1426     };
1427     typedef ::std::vector< DrawingInfo > DrawingInfoVector;
1428 
1429     ClusterTable        maClusterTable;     /// List with cluster IDs (used object IDs in drawings).
1430     DrawingInfoVector   maDrawingInfos;     /// Data about all used drawings.
1431     SvStream*           mpPicStrm;          /// Cached result of ImplQueryPictureStream().
1432     bool                mbHasDggCont;       /// True = the DGGCONTAINER has been initialized.
1433     bool                mbPicStrmQueried;   /// True = ImplQueryPictureStream() has been called.
1434 };
1435 
1436 typedef ::boost::shared_ptr< EscherExGlobal > EscherExGlobalRef;
1437 
1438 // ---------------------------------------------------------------------------------------------
1439 
1440 class SdrObject;
1441 class SdrPage;
1442 class ImplEscherExSdr;
1443 
1444 class MSFILTER_DLLPUBLIC EscherEx : public EscherPersistTable
1445 {
1446     protected:
1447         typedef ::std::auto_ptr< ImplEscherExSdr > ImplEscherExSdrPtr;
1448 
1449         EscherExGlobalRef           mxGlobal;
1450         ImplEscherExSdrPtr          mpImplEscherExSdr;
1451         SvStream*                   mpOutStrm;
1452         sal_uInt32                  mnStrmStartOfs;
1453         std::vector< sal_uInt32 >   mOffsets;
1454         std::vector< sal_uInt16 >   mRecTypes;
1455 
1456         sal_uInt32                  mnCurrentDg;
1457         sal_uInt32                  mnCountOfs;
1458 
1459         sal_uInt32                  mnGroupLevel;
1460         sal_uInt16                  mnHellLayerId;
1461 
1462         sal_Bool                    mbEscherSpgr;
1463         sal_Bool                    mbEscherDg;
1464         sal_Bool                    mbOleEmf;                   // OLE is EMF instead of WMF
1465 
1466 
1467         virtual sal_Bool DoSeek( sal_uInt32 nKey );
1468 
1469 public:
1470     explicit            EscherEx( const EscherExGlobalRef& rxGlobal, SvStream& rOutStrm );
1471     virtual             ~EscherEx();
1472 
1473     /** Creates and returns a new shape identifier, updates the internal shape
1474         counters and registers the identifier in the DGG cluster table. */
GenerateShapeId()1475     inline sal_uInt32   GenerateShapeId() { return mxGlobal->GenerateShapeId( mnCurrentDg, mbEscherSpgr ); }
1476 
1477     /** Returns the graphic provider from the global object that has been
1478         passed to the constructor.
1479      */
1480     inline EscherGraphicProvider&
GetGraphicProvider()1481                         GetGraphicProvider() { return *mxGlobal; }
1482 
1483     /** Called if a picture shall be written and no picture stream is set at
1484         class ImplEscherExSdr.
1485      */
QueryPictureStream()1486     inline SvStream*    QueryPictureStream() { return mxGlobal->QueryPictureStream(); }
1487 
1488                 /// Fuegt in den EscherStream interne Daten ein, dieser Vorgang
1489                 /// darf und muss nur einmal ausgefuehrt werden.
1490                 /// Wenn pPicStreamMergeBSE angegeben ist, werden die BLIPs
1491                 /// aus diesem Stream in die MsofbtBSE Records des EscherStream
1492                 /// gemerged, wie es fuer Excel (und Word?) benoetigt wird.
1493         virtual void Flush( SvStream* pPicStreamMergeBSE = NULL );
1494 
1495     /** Inserts the passed number of bytes at the current position of the
1496         output stream.
1497 
1498         Inserts dummy bytes and moves all following stream data, and updates
1499         all internal stream offsets stored in the PersistTable and the affected
1500         container sizes, which makes this operation very expensive. (!)
1501 
1502         @param nBytes  The number of bytes to be inserted into the stream.
1503 
1504         @param bExpandEndOfAtom  If set to true, an atom that currently ends
1505             exactly at the current stream position will be expanded to include
1506             the inserted data. If set to false, an atom that currently ends
1507             exactly at the current stream position will not be expanded to
1508             include the inserted data (used to insert e.g. a new atom after an
1509             existing atom). Note that containers that end exactly at the
1510             current stream position are always expanded to include the inserted
1511             data.
1512      */
1513     void                InsertAtCurrentPos( sal_uInt32 nBytes, bool bExpandEndOfAtom );
1514 
1515         void    InsertPersistOffset( sal_uInt32 nKey, sal_uInt32 nOffset ); // Es wird nicht geprueft, ob sich jener schluessel schon in der PersistantTable befindet
1516         void    ReplacePersistOffset( sal_uInt32 nKey, sal_uInt32 nOffset );
1517         sal_uInt32  GetPersistOffset( sal_uInt32 nKey );
1518         sal_Bool    SeekToPersistOffset( sal_uInt32 nKey );
1519         virtual sal_Bool InsertAtPersistOffset( sal_uInt32 nKey, sal_uInt32 nValue );// nValue wird im Stream an entrsprechender Stelle eingefuegt(overwrite modus), ohne dass sich die
1520                                                                     // aktuelle StreamPosition aendert
1521 
GetStream() const1522         SvStream&   GetStream() const   { return *mpOutStrm; }
GetStreamPos() const1523         sal_uLong   GetStreamPos() const    { return mpOutStrm->Tell(); }
1524 
1525         virtual sal_Bool SeekBehindRecHeader( sal_uInt16 nRecType );                // der stream muss vor einem gueltigen Record Header oder Atom stehen
1526 
1527                 // features beim erzeugen folgender Container:
1528                 //
1529                 //      ESCHER_DggContainer:    ein EscherDgg Atom wird automatisch erzeugt und verwaltet
1530                 //      ESCHER_DgContainer:     ein EscherDg Atom wird automatisch erzeugt und verwaltet
1531                 //      ESCHER_SpgrContainer:
1532                 //      ESCHER_SpContainer:
1533 
1534         virtual void OpenContainer( sal_uInt16 nEscherContainer, int nRecInstance = 0 );
1535         virtual void CloseContainer();
1536 
1537         virtual void BeginAtom();
1538         virtual void EndAtom( sal_uInt16 nRecType, int nRecVersion = 0, int nRecInstance = 0 );
1539         virtual void AddAtom( sal_uInt32 nAtomSitze, sal_uInt16 nRecType, int nRecVersion = 0, int nRecInstance = 0 );
1540         virtual void AddChildAnchor( const Rectangle& rRectangle );
1541         virtual void AddClientAnchor( const Rectangle& rRectangle );
1542 
1543         virtual sal_uInt32 EnterGroup( const String& rShapeName, const Rectangle* pBoundRect = 0 );
1544         sal_uInt32  EnterGroup( const Rectangle* pBoundRect = NULL );
GetGroupLevel() const1545         sal_uInt32  GetGroupLevel() const { return mnGroupLevel; };
1546         virtual sal_Bool SetGroupSnapRect( sal_uInt32 nGroupLevel, const Rectangle& rRect );
1547         virtual sal_Bool SetGroupLogicRect( sal_uInt32 nGroupLevel, const Rectangle& rRect );
1548         virtual void LeaveGroup();
1549 
1550                 // ein ESCHER_Sp wird geschrieben ( Ein ESCHER_DgContainer muss dazu geoeffnet sein !!)
1551         virtual void AddShape( sal_uInt32 nShpInstance, sal_uInt32 nFlagIds, sal_uInt32 nShapeID = 0 );
1552 
1553         virtual void Commit( EscherPropertyContainer& rProps, const Rectangle& rRect );
1554 
1555         sal_uInt32  GetColor( const sal_uInt32 nColor, sal_Bool bSwap = sal_True );
1556         sal_uInt32  GetColor( const Color& rColor, sal_Bool bSwap = sal_True );
1557 
1558                 // ...Sdr... implemented in eschesdo.cxx
1559 
1560         void    AddSdrPage( const SdrPage& rPage );
1561         void    AddUnoShapes( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& rxShapes );
1562 
1563                 /// returns the ShapeID
1564         sal_uInt32  AddSdrObject( const SdrObject& rObj );
1565 
1566                 /// If objects are written through AddSdrObject the
1567                 /// SolverContainer has to be written, and maybe some
1568                 /// maintenance to be done.
1569         void    EndSdrObjectPage();
1570 
1571                 /// Called before a shape is written, application supplies
1572                 /// ClientRecords. May set AppData::bDontWriteShape so the
1573                 /// shape is ignored.
1574     virtual EscherExHostAppData* StartShape(
1575                             const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& rShape,
1576                             const Rectangle* pChildAnchor );
1577 
1578                 /// Called after a shape is written to inform the application
1579                 /// of the resulted shape type and ID.
1580     virtual void    EndShape( sal_uInt16 nShapeType, sal_uInt32 nShapeID );
1581 
1582                 /// Called before an AdditionalText EnterGroup occurs.
1583                 /// The current shape will be written in three parts:
1584                 /// a group shape, the shape itself, and an extra textbox shape.
1585                 /// The complete flow is:
1586                 /// StartShape sets HostData1.
1587                 /// EnterAdditionalTextGroup sets HostData2, App may modify
1588                 ///   HostData1 and keep track of the change.
1589                 /// The group shape is written with HostData2.
1590                 /// Another StartShape with the same (!) object sets HostData3.
1591                 /// The current shape is written with HostData3.
1592                 /// EndShape is called for the current shape.
1593                 /// Another StartShape with the same (!) object sets HostData4.
1594                 /// The textbox shape is written with HostData4.
1595                 /// EndShape is called for the textbox shape.
1596                 /// EndShape is called for the group shape, this provides
1597                 ///   the same functionality as an ordinary recursive group.
1598     virtual EscherExHostAppData*    EnterAdditionalTextGroup();
1599 
1600                 /// Called if an ESCHER_Prop_lTxid shall be written
1601     virtual sal_uInt32  QueryTextID( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >&, sal_uInt32 nShapeId );
1602             // add an dummy rectangle shape into the escher stream
1603         sal_uInt32  AddDummyShape();
1604 
1605     static const SdrObject* GetSdrObject( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape >& rXShape );
1606 
SetHellLayerId(sal_uInt16 nId)1607     void SetHellLayerId( sal_uInt16 nId )       { mnHellLayerId = nId; }
GetHellLayerId() const1608     sal_uInt16 GetHellLayerId() const           { return mnHellLayerId; }
1609 
1610 private:
1611                         EscherEx( const EscherEx& );
1612     EscherEx&           operator=( const EscherEx& );
1613 
1614     // prevent C-style cast to former base class EscherGraphicProvider
1615     operator EscherGraphicProvider&();
1616     operator EscherGraphicProvider const&();
1617 };
1618 
1619 
1620 #endif
1621