tdf#137105: crash in table with Style Inspector active
[LibreOffice.git] / lotuswordpro / source / filter / lwpdrawobj.hxx
blob0ccf8c8f338844a57d836820d98231b2b29f270a
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*************************************************************************
4 * The Contents of this file are made available subject to the terms of
5 * either of the following licenses
7 * - GNU Lesser General Public License Version 2.1
8 * - Sun Industry Standards Source License Version 1.1
10 * Sun Microsystems Inc., October, 2000
12 * GNU Lesser General Public License Version 2.1
13 * =============================================
14 * Copyright 2000 by Sun Microsystems, Inc.
15 * 901 San Antonio Road, Palo Alto, CA 94303, USA
17 * This library is free software; you can redistribute it and/or
18 * modify it under the terms of the GNU Lesser General Public
19 * License version 2.1, as published by the Free Software Foundation.
21 * This library is distributed in the hope that it will be useful,
22 * but WITHOUT ANY WARRANTY; without even the implied warranty of
23 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
24 * Lesser General Public License for more details.
26 * You should have received a copy of the GNU Lesser General Public
27 * License along with this library; if not, write to the Free Software
28 * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
29 * MA 02111-1307 USA
32 * Sun Industry Standards Source License Version 1.1
33 * =================================================
34 * The contents of this file are subject to the Sun Industry Standards
35 * Source License Version 1.1 (the "License"); You may not use this file
36 * except in compliance with the License. You may obtain a copy of the
37 * License at http://www.openoffice.org/license.html.
39 * Software provided under this License is provided on an "AS IS" basis,
40 * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
41 * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
42 * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
43 * See the License for the specific provisions governing your rights and
44 * obligations concerning the Software.
46 * The Initial Developer of the Original Code is: IBM Corporation
48 * Copyright: 2008 by IBM Corporation
50 * All Rights Reserved.
52 * Contributor(s): _______________________________________
55 ************************************************************************/
56 /**
57 * @file
58 * The file declares the LwpDrawObjcts and associated class like LwpDrawGroup, LwpDrawRectangle
59 * and so on.
62 #ifndef INCLUDED_LOTUSWORDPRO_SOURCE_FILTER_LWPDRAWOBJ_HXX
63 #define INCLUDED_LOTUSWORDPRO_SOURCE_FILTER_LWPDRAWOBJ_HXX
65 #include <sal/config.h>
67 #include <rtl/ref.hxx>
68 #include <rtl/ustring.hxx>
70 #include "lwpsdwdrawheader.hxx"
72 #include <memory>
74 class SvStream;
75 class XFFrame;
76 class XFDrawStyle;
78 /**
79 * @brief
80 * Lwp-base-draw object.
82 class LwpDrawObj
84 protected:
85 DrawObjectType m_eType;
86 SvStream* m_pStream;
87 SdwDrawObjHeader m_aObjHeader;
88 SdwClosedObjStyleRec m_aClosedObjStyleRec;
89 DrawingOffsetAndScale* m_pTransData;
91 public:
92 LwpDrawObj(SvStream* pStream, DrawingOffsetAndScale* pTransData = nullptr);
93 virtual ~LwpDrawObj() {}
95 private:
96 void ReadObjHeaderRecord();
98 protected:
99 void ReadClosedObjStyle();
100 void SetFillStyle(XFDrawStyle* pStyle);
101 static void SetLineStyle(XFDrawStyle* pStyle, sal_uInt8 nWidth, sal_uInt8 nLineStyle,
102 const SdwColor& rColor);
103 void SetPosition(XFFrame* pObj);
104 static void SetArrowHead(XFDrawStyle* pOpenedObjStyle, sal_uInt8 nArrowFlag, sal_uInt8 nLineWidth);
105 static OUString GetArrowName(sal_uInt8 nArrowStyle);
107 protected:
109 * @descr read out the record of a draw object.
111 virtual void Read() = 0;
114 * @descr register styles of a draw object according to the saved records data.
115 * @return the style name which has been registered.
117 virtual OUString RegisterStyle() = 0;
120 * @descr create XF-draw object and assign the style name to it.
121 * @param style name.
122 * @return pointer of the created XF-draw object.
124 virtual XFFrame* CreateDrawObj(const OUString& rStyleName) = 0;
127 * @descr create XF-draw object and assign the style name to it.
128 * @param style name.
129 * @return pointer of the created XF-draw object.
131 virtual XFFrame* CreateStandardDrawObj(const OUString& rStyleName) = 0;
133 public:
135 * @descr create a completed XF-draw object(read data, register styles and create XF-draw object)
136 * @return pointer of the created competed XF-draw object.
138 XFFrame* CreateXFDrawObject();
141 * @param type of the object.
142 * @descr set the type to the draw object.
144 void SetObjectType(DrawObjectType eType) { m_eType = eType; }
148 * @brief
149 * Lwp-draw-group object.
151 class LwpDrawGroup : public LwpDrawObj
153 public:
154 explicit LwpDrawGroup(SvStream* pStream) : LwpDrawObj(pStream) {}
156 protected:
157 virtual void Read() override {}
158 virtual OUString RegisterStyle() override
160 return OUString();
162 virtual XFFrame* CreateDrawObj(const OUString& /*rStyleName*/) override { return nullptr; }
163 virtual XFFrame* CreateStandardDrawObj(const OUString& /*rStyleName*/) override { return nullptr; }
167 * @brief
168 * Lwp-draw-line object.
170 class LwpDrawLine : public LwpDrawObj
172 private:
173 SdwLineRecord m_aLineRec;
175 public:
176 LwpDrawLine(SvStream * pStream, DrawingOffsetAndScale* pTransData);
178 protected:
179 virtual void Read() override;
180 virtual OUString RegisterStyle() override;
181 virtual XFFrame* CreateDrawObj(const OUString& rStyleName) override;
182 virtual XFFrame* CreateStandardDrawObj(const OUString& rStyleName) override;
186 * @brief
187 * Lwp-draw-polyline object.
189 class LwpDrawPolyLine : public LwpDrawObj
191 private:
192 SdwPolyLineRecord m_aPolyLineRec;
193 std::unique_ptr<SdwPoint[]> m_pVector;
195 public:
196 LwpDrawPolyLine(SvStream * pStream, DrawingOffsetAndScale* pTransData);
197 virtual ~LwpDrawPolyLine() override;
199 protected:
200 virtual void Read() override;
201 virtual OUString RegisterStyle() override;
202 virtual XFFrame* CreateDrawObj(const OUString& rStyleName) override;
203 virtual XFFrame* CreateStandardDrawObj(const OUString& rStyleName) override;
207 * @brief
208 * Lwp-draw-polygon object.
210 class LwpDrawPolygon : public LwpDrawObj
212 private:
213 sal_uInt16 m_nNumPoints;
214 std::unique_ptr<SdwPoint[]> m_pVector;
216 public:
217 LwpDrawPolygon(SvStream * pStream, DrawingOffsetAndScale* pTransData);
218 virtual ~LwpDrawPolygon() override;
220 protected:
221 virtual void Read() override;
222 virtual OUString RegisterStyle() override;
223 virtual XFFrame* CreateDrawObj(const OUString& rStyleName) override;
224 virtual XFFrame* CreateStandardDrawObj(const OUString& rStyleName) override;
228 * @brief
229 * Lwp-draw-rectangle(rounded-corner rectangle) object.
231 class LwpDrawRectangle : public LwpDrawObj
233 private:
234 SdwPoint m_aVector[16];
236 public:
237 LwpDrawRectangle(SvStream* pStream, DrawingOffsetAndScale* pTransData);
239 protected:
240 virtual void Read() override;
241 virtual OUString RegisterStyle() override;
242 virtual XFFrame* CreateDrawObj(const OUString& rStyleName) override;
243 virtual XFFrame* CreateStandardDrawObj(const OUString& rStyleName) override;
245 private:
246 XFFrame* CreateRoundedRect(const OUString& rStyleName);
250 * @brief
251 * Lwp-draw-ellipse object.
253 class LwpDrawEllipse : public LwpDrawObj
255 private:
256 SdwPoint m_aVector[13];
258 public:
259 LwpDrawEllipse(SvStream * pStream, DrawingOffsetAndScale* pTransData);
261 protected:
262 virtual void Read() override;
263 virtual OUString RegisterStyle() override;
264 virtual XFFrame* CreateDrawObj(const OUString& rStyleName) override;
265 virtual XFFrame* CreateStandardDrawObj(const OUString& rStyleName) override;
269 * @brief
270 * Lwp-draw-arc object.
272 class LwpDrawArc : public LwpDrawObj
274 private:
275 SdwArcRecord m_aArcRec;
276 SdwPoint m_aVector[4];
278 public:
279 LwpDrawArc(SvStream * pStream, DrawingOffsetAndScale* pTransData);
281 protected:
282 virtual void Read() override;
283 virtual OUString RegisterStyle() override;
284 virtual XFFrame* CreateDrawObj(const OUString& rStyleName) override;
285 virtual XFFrame* CreateStandardDrawObj(const OUString& rStyleName) override;
289 * @brief
290 * Lwp-draw-textbox object.
292 class XFFont;
293 class LwpDrawTextBox : public LwpDrawObj
295 private:
296 SdwTextBoxRecord m_aTextRec;
297 SdwPoint m_aVector;
299 public:
300 explicit LwpDrawTextBox(SvStream* pStream);
301 virtual ~LwpDrawTextBox() override;
302 static void SetFontStyle(rtl::Reference<XFFont> const & pFont, SdwTextBoxRecord const * pRec);
304 protected:
305 virtual void Read() override;
306 virtual OUString RegisterStyle() override;
307 virtual XFFrame* CreateDrawObj(const OUString& rStyleName) override;
308 virtual XFFrame* CreateStandardDrawObj(const OUString& rStyleName) override;
312 * @brief
313 * Lwp-draw-curved-text object.
315 class XFDrawPath;
316 class LwpDrawTextArt : public LwpDrawObj
318 private:
319 SdwTextArt m_aTextArtRec;
320 SdwPoint m_aVector[4];
322 private:
323 void CreateFWPath(XFDrawPath* pPath);
325 public:
326 LwpDrawTextArt(SvStream* pStream, DrawingOffsetAndScale* pTransData);
327 virtual ~LwpDrawTextArt() override;
329 protected:
330 virtual void Read() override;
331 virtual OUString RegisterStyle() override;
332 virtual XFFrame* CreateDrawObj(const OUString& rStyleName) override;
333 virtual XFFrame* CreateStandardDrawObj(const OUString& rStyleName) override;
337 * @brief
338 * Lwp-draw-metafile object.
340 class LwpDrawMetafile : public LwpDrawObj
342 public:
343 explicit LwpDrawMetafile(SvStream* pStream);
345 protected:
346 virtual void Read() override;
347 virtual OUString RegisterStyle() override
349 return OUString();
351 virtual XFFrame* CreateDrawObj(const OUString& /*rStyleName*/) override {return nullptr;}
352 virtual XFFrame* CreateStandardDrawObj(const OUString& /*rStyleName*/) override {return nullptr;}
356 * @brief
357 * Lwp-draw-bitmap object.
359 class LwpDrawBitmap : public LwpDrawObj
361 private:
362 SdwBmpRecord m_aBmpRec;
363 std::unique_ptr<sal_uInt8[]> m_pImageData;
364 public:
365 explicit LwpDrawBitmap(SvStream* pStream);
366 virtual ~LwpDrawBitmap() override;
368 protected:
369 virtual void Read() override;
370 virtual OUString RegisterStyle() override;
371 virtual XFFrame* CreateDrawObj(const OUString& rStyleName) override;
372 virtual XFFrame* CreateStandardDrawObj(const OUString& rStyleName) override;
374 #endif
376 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */