Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 : #ifndef _XTABLE_HXX
20 : #define _XTABLE_HXX
21 :
22 : #include <rtl/ref.hxx>
23 : #include <svx/xpoly.hxx>
24 : #include <svx/xdash.hxx>
25 : #include <svx/xhatch.hxx>
26 : #include <svx/xgrad.hxx>
27 : #include <svx/xflasit.hxx>
28 : #include <svx/xlnasit.hxx>
29 :
30 : #include <tools/color.hxx>
31 : #include <tools/string.hxx>
32 : #include <tools/contnr.hxx>
33 :
34 : #include <cppuhelper/weak.hxx>
35 :
36 : #include <svx/svxdllapi.h>
37 : #include <com/sun/star/embed/XStorage.hpp>
38 : #include <basegfx/polygon/b2dpolypolygon.hxx>
39 : #include <com/sun/star/container/XNameContainer.hpp>
40 : #include <svtools/grfmgr.hxx>
41 : #include <svx/XPropertyEntry.hxx>
42 :
43 : class Color;
44 : class Bitmap;
45 : class VirtualDevice;
46 :
47 : // Standard-Vergleichsstring
48 : extern sal_Unicode pszStandard[]; // "standard"
49 :
50 : // Funktion zum Konvertieren in echte RGB-Farben, da mit
51 : // enum COL_NAME nicht verglichen werden kann.
52 : SVX_DLLPUBLIC Color RGB_Color( ColorData nColorName );
53 :
54 : // ------------------
55 : // class XColorEntry
56 : // ------------------
57 :
58 21120 : class SVX_DLLPUBLIC XColorEntry : public XPropertyEntry
59 : {
60 : private:
61 : Color aColor;
62 :
63 : public:
64 : XColorEntry(const Color& rColor, const String& rName);
65 : XColorEntry(const XColorEntry& rOther);
66 :
67 20460 : const Color& GetColor() const
68 : {
69 20460 : return aColor;
70 : }
71 : };
72 :
73 : // --------------------
74 : // class XLineEndEntry
75 : // --------------------
76 :
77 160 : class SVX_DLLPUBLIC XLineEndEntry : public XPropertyEntry
78 : {
79 : private:
80 : basegfx::B2DPolyPolygon aB2DPolyPolygon;
81 :
82 : public:
83 : XLineEndEntry(const basegfx::B2DPolyPolygon& rB2DPolyPolygon, const String& rName);
84 : XLineEndEntry(const XLineEndEntry& rOther);
85 :
86 0 : const basegfx::B2DPolyPolygon& GetLineEnd() const
87 : {
88 0 : return aB2DPolyPolygon;
89 : }
90 : };
91 :
92 : // ------------------
93 : // class XDashEntry
94 : // ------------------
95 :
96 1422 : class SVX_DLLPUBLIC XDashEntry : public XPropertyEntry
97 : {
98 : private:
99 : XDash aDash;
100 :
101 : public:
102 : XDashEntry(const XDash& rDash, const String& rName);
103 : XDashEntry(const XDashEntry& rOther);
104 :
105 683 : const XDash& GetDash() const
106 : {
107 683 : return aDash;
108 : }
109 : };
110 :
111 : // ------------------
112 : // class XHatchEntry
113 : // ------------------
114 :
115 86 : class SVX_DLLPUBLIC XHatchEntry : public XPropertyEntry
116 : {
117 : private:
118 : XHatch aHatch;
119 :
120 : public:
121 : XHatchEntry(const XHatch& rHatch, const String& rName);
122 : XHatchEntry(const XHatchEntry& rOther);
123 :
124 151 : const XHatch& GetHatch() const
125 : {
126 151 : return aHatch;
127 : }
128 : };
129 :
130 : // ---------------------
131 : // class XGradientEntry
132 : // ---------------------
133 :
134 372 : class SVX_DLLPUBLIC XGradientEntry : public XPropertyEntry
135 : {
136 : private:
137 : XGradient aGradient;
138 :
139 : public:
140 : XGradientEntry(const XGradient& rGradient, const String& rName);
141 : XGradientEntry(const XGradientEntry& rOther);
142 :
143 54 : const XGradient& GetGradient() const
144 : {
145 54 : return aGradient;
146 : }
147 : };
148 :
149 : // ---------------------
150 : // class XBitmapEntry
151 : // ---------------------
152 :
153 168 : class SVX_DLLPUBLIC XBitmapEntry : public XPropertyEntry
154 : {
155 : private:
156 : GraphicObject maGraphicObject;
157 :
158 : public:
159 : XBitmapEntry(const GraphicObject& rGraphicObject, const String& rName);
160 : XBitmapEntry(const XBitmapEntry& rOther);
161 :
162 0 : const GraphicObject& GetGraphicObject() const
163 : {
164 0 : return maGraphicObject;
165 : }
166 : };
167 :
168 : // --------------------
169 : // class XPropertyList
170 : // --------------------
171 :
172 : enum XPropertyListType {
173 : XCOLOR_LIST,
174 : XLINE_END_LIST,
175 : XDASH_LIST,
176 : XHATCH_LIST,
177 : XGRADIENT_LIST,
178 : XBITMAP_LIST,
179 : XPROPERTY_LIST_COUNT
180 : };
181 :
182 : typedef rtl::Reference< class XPropertyList > XPropertyListRef;
183 :
184 : class XDashList ; typedef rtl::Reference< class XDashList > XDashListRef;
185 : class XHatchList ; typedef rtl::Reference< class XHatchList > XHatchListRef;
186 : class XColorList ; typedef rtl::Reference< class XColorList > XColorListRef;
187 : class XBitmapList ; typedef rtl::Reference< class XBitmapList > XBitmapListRef;
188 : class XLineEndList ; typedef rtl::Reference< class XLineEndList > XLineEndListRef;
189 : class XGradientList ; typedef rtl::Reference< class XGradientList > XGradientListRef;
190 :
191 : class SVX_DLLPUBLIC XPropertyList : public cppu::OWeakObject
192 : {
193 : private:
194 : SAL_DLLPRIVATE void* operator new(size_t);
195 : protected:
196 : SAL_DLLPRIVATE void operator delete(void *);
197 : protected:
198 : typedef ::std::vector< XPropertyEntry* > XPropertyEntryList_impl;
199 : typedef ::std::vector< Bitmap* > BitmapList_impl;
200 :
201 : XPropertyListType meType;
202 : String maName; // not persistent
203 : String maPath;
204 :
205 : XPropertyEntryList_impl maList;
206 :
207 : bool mbListDirty;
208 : bool mbEmbedInDocument;
209 :
210 : XPropertyList(XPropertyListType t, const String& rPath);
211 :
212 : virtual Bitmap CreateBitmapForUI(long nIndex) = 0;
213 :
214 : public:
215 : virtual ~XPropertyList();
216 :
217 1113 : XPropertyListType Type() const { return meType; }
218 : long Count() const;
219 :
220 : void Insert(XPropertyEntry* pEntry, long nIndex = CONTAINER_APPEND);
221 : XPropertyEntry* Replace(XPropertyEntry* pEntry, long nIndex);
222 : XPropertyEntry* Remove(long nIndex);
223 :
224 : XPropertyEntry* Get(long nIndex) const;
225 : long GetIndex(const String& rName) const;
226 : Bitmap GetUiBitmap(long nIndex) const;
227 :
228 36 : const String& GetName() const { return maName; }
229 : void SetName(const String& rString);
230 :
231 36 : const String& GetPath() const { return maPath; }
232 0 : void SetPath(const String& rString) { maPath = rString; }
233 :
234 : bool IsDirty() const { return mbListDirty; }
235 0 : void SetDirty(bool bDirty = true) { mbListDirty = bDirty; }
236 :
237 36 : bool IsEmbedInDocument() const { return mbEmbedInDocument; }
238 0 : void SetEmbedInDocument(bool b) { mbEmbedInDocument = b; }
239 :
240 : static OUString GetDefaultExt(XPropertyListType t);
241 : static OUString GetDefaultExtFilter(XPropertyListType t);
242 169 : OUString GetDefaultExt() const { return GetDefaultExt(meType); }
243 :
244 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer >
245 : createInstance() = 0;
246 : bool Load();
247 : bool LoadFrom(const ::com::sun::star::uno::Reference<
248 : ::com::sun::star::embed::XStorage > &xStorage,
249 : const OUString &rURL);
250 : bool Save();
251 : bool SaveTo (const ::com::sun::star::uno::Reference<
252 : ::com::sun::star::embed::XStorage > &xStorage,
253 : const OUString &rURL,
254 : OUString *pOptName);
255 : virtual bool Create() = 0;
256 :
257 : // Factory method for sub-classes
258 : static XPropertyListRef CreatePropertyList(XPropertyListType t,
259 : const String& rPath);
260 : // as above but initializes name as expected
261 : static XPropertyListRef CreatePropertyListFromURL(XPropertyListType t,
262 : const OUString & rUrl);
263 :
264 : // helper accessors
265 : inline XDashListRef AsDashList();
266 : inline XHatchListRef AsHatchList();
267 : inline XColorListRef AsColorList();
268 : inline XBitmapListRef AsBitmapList();
269 : inline XLineEndListRef AsLineEndList();
270 : inline XGradientListRef AsGradientList();
271 : };
272 :
273 : // ------------------
274 : // class XColorList
275 : // ------------------
276 :
277 470 : class SVX_DLLPUBLIC XColorList : public XPropertyList
278 : {
279 : protected:
280 : virtual Bitmap CreateBitmapForUI(long nIndex);
281 :
282 : public:
283 248 : explicit XColorList(const String& rPath)
284 248 : : XPropertyList(XCOLOR_LIST, rPath) {}
285 :
286 : using XPropertyList::Replace;
287 : using XPropertyList::Remove;
288 :
289 : XColorEntry* Replace(long nIndex, XColorEntry* pEntry);
290 : XColorEntry* Remove(long nIndex);
291 : XColorEntry* GetColor(long nIndex) const;
292 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createInstance();
293 : virtual bool Create();
294 :
295 : static XColorListRef CreateStdColorList();
296 : static XColorListRef GetStdColorList(); // returns a singleton
297 : };
298 :
299 : // -------------------
300 : // class XLineEndList
301 : // -------------------
302 :
303 : class SVX_DLLPUBLIC XLineEndList : public XPropertyList
304 : {
305 : protected:
306 : virtual Bitmap CreateBitmapForUI(long nIndex);
307 :
308 : public:
309 : explicit XLineEndList(const String& rPath);
310 : virtual ~XLineEndList();
311 :
312 : using XPropertyList::Remove;
313 : XLineEndEntry* Remove(long nIndex);
314 : XLineEndEntry* GetLineEnd(long nIndex) const;
315 :
316 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createInstance();
317 : virtual bool Create();
318 : };
319 :
320 : // -------------------
321 : // class XDashList
322 : // -------------------
323 :
324 : class SVX_DLLPUBLIC XDashList : public XPropertyList
325 : {
326 : private:
327 : Bitmap maBitmapSolidLine;
328 : String maStringSolidLine;
329 : String maStringNoLine;
330 :
331 : protected:
332 : Bitmap ImpCreateBitmapForXDash(const XDash* pDash);
333 : virtual Bitmap CreateBitmapForUI(long nIndex);
334 :
335 : public:
336 : explicit XDashList(const String& rPath);
337 : virtual ~XDashList();
338 :
339 : using XPropertyList::Replace;
340 : XDashEntry* Replace(XDashEntry* pEntry, long nIndex);
341 : using XPropertyList::Remove;
342 : XDashEntry* Remove(long nIndex);
343 : XDashEntry* GetDash(long nIndex) const;
344 :
345 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createInstance();
346 : virtual bool Create();
347 :
348 : // Special call to get a bitmap for the solid line representation. It
349 : // creates a bitmap fitting in size and style to the ones you get by
350 : // using GetUiBitmap for existing entries.
351 : Bitmap GetBitmapForUISolidLine() const;
352 :
353 : // Special calls to get the translated strings for the UI entry for no
354 : // line style (XLINE_NONE) and solid line style (XLINE_SOLID) for dialogs
355 : String GetStringForUiSolidLine() const;
356 : String GetStringForUiNoLine() const;
357 : };
358 :
359 : // -------------------
360 : // class XHatchList
361 : // -------------------
362 :
363 : class SVX_DLLPUBLIC XHatchList : public XPropertyList
364 : {
365 : protected:
366 : virtual Bitmap CreateBitmapForUI(long nIndex);
367 :
368 : public:
369 : explicit XHatchList(const String& rPath);
370 : virtual ~XHatchList();
371 :
372 : using XPropertyList::Replace;
373 : XHatchEntry* Replace(XHatchEntry* pEntry, long nIndex);
374 : using XPropertyList::Remove;
375 : XHatchEntry* Remove(long nIndex);
376 : XHatchEntry* GetHatch(long nIndex) const;
377 :
378 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createInstance();
379 : virtual bool Create();
380 : };
381 :
382 : // -------------------
383 : // class XGradientList
384 : // -------------------
385 : class SVX_DLLPUBLIC XGradientList : public XPropertyList
386 : {
387 : protected:
388 : virtual Bitmap CreateBitmapForUI(long nIndex);
389 :
390 : public:
391 : explicit XGradientList(const String& rPath);
392 : virtual ~XGradientList();
393 :
394 : using XPropertyList::Replace;
395 : XGradientEntry* Replace(XGradientEntry* pEntry, long nIndex);
396 : using XPropertyList::Remove;
397 : XGradientEntry* Remove(long nIndex);
398 : XGradientEntry* GetGradient(long nIndex) const;
399 :
400 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createInstance();
401 : virtual bool Create();
402 : };
403 :
404 : // -------------------
405 : // class XBitmapList
406 : // -------------------
407 :
408 2522 : class SVX_DLLPUBLIC XBitmapList : public XPropertyList
409 : {
410 : protected:
411 : virtual Bitmap CreateBitmapForUI(long nIndex);
412 :
413 : public:
414 1276 : explicit XBitmapList(const String& rPath)
415 1276 : : XPropertyList(XBITMAP_LIST, rPath) {}
416 :
417 : using XPropertyList::Replace;
418 : using XPropertyList::Remove;
419 : XBitmapEntry* Remove(long nIndex);
420 : XBitmapEntry* GetBitmap(long nIndex) const;
421 :
422 : virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameContainer > createInstance();
423 : virtual bool Create();
424 : };
425 :
426 :
427 : // FIXME: could add type checking too ...
428 1492 : inline XDashListRef XPropertyList::AsDashList() { return XDashListRef( static_cast<XDashList *> (this) ); }
429 1358 : inline XHatchListRef XPropertyList::AsHatchList() { return XHatchListRef( static_cast<XHatchList *> (this) ); }
430 496 : inline XColorListRef XPropertyList::AsColorList() { return XColorListRef( static_cast<XColorList *> (this) ); }
431 1358 : inline XBitmapListRef XPropertyList::AsBitmapList() { return XBitmapListRef( static_cast<XBitmapList *> (this) ); }
432 1358 : inline XLineEndListRef XPropertyList::AsLineEndList() { return XLineEndListRef( static_cast<XLineEndList *> (this) ); }
433 1358 : inline XGradientListRef XPropertyList::AsGradientList() { return XGradientListRef( static_cast<XGradientList *> (this) ); }
434 :
435 : #endif // _XTABLE_HXX
436 :
437 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|