LibreOffice Module svx (master)  1
xtable.hxx
Go to the documentation of this file.
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 INCLUDED_SVX_XTABLE_HXX
20 #define INCLUDED_SVX_XTABLE_HXX
21 
22 #include <rtl/ref.hxx>
23 #include <rtl/ustring.hxx>
24 #include <svx/xdash.hxx>
25 #include <svx/xhatch.hxx>
26 #include <svx/xgrad.hxx>
27 
28 #include <tools/color.hxx>
29 
30 #include <cppuhelper/weak.hxx>
31 
32 #include <svx/svxdllapi.h>
33 #include <com/sun/star/embed/XStorage.hpp>
35 #include <com/sun/star/container/XNameContainer.hpp>
36 #include <vcl/GraphicObject.hxx>
37 #include <svx/XPropertyEntry.hxx>
38 
39 #include <limits>
40 #include <memory>
41 
43 {
44 private:
46 
47 public:
48  XColorEntry(const Color& rColor, const OUString& rName);
49 
50  const Color& GetColor() const
51  {
52  return aColor;
53  }
54 };
55 
57 {
58 private:
60 
61 public:
62  XLineEndEntry(const basegfx::B2DPolyPolygon& rB2DPolyPolygon, const OUString& rName);
63  XLineEndEntry(const XLineEndEntry& rOther);
64 
66  {
67  return aB2DPolyPolygon;
68  }
69 };
70 
72 {
73 private:
75 
76 public:
77  XDashEntry(const XDash& rDash, const OUString& rName);
78  XDashEntry(const XDashEntry& rOther);
79 
80  const XDash& GetDash() const
81  {
82  return aDash;
83  }
84 };
85 
87 {
88 private:
90 
91 public:
92  XHatchEntry(const XHatch& rHatch, const OUString& rName);
93  XHatchEntry(const XHatchEntry& rOther);
94 
95  const XHatch& GetHatch() const
96  {
97  return aHatch;
98  }
99 };
100 
102 {
103 private:
105 
106 public:
107  XGradientEntry(const XGradient& rGradient, const OUString& rName);
108  XGradientEntry(const XGradientEntry& rOther);
109 
110  const XGradient& GetGradient() const
111  {
112  return aGradient;
113  }
114 };
115 
117 {
118 private:
120 
121 public:
122  XBitmapEntry(const GraphicObject& rGraphicObject, const OUString& rName);
123  XBitmapEntry(const XBitmapEntry& rOther);
124 
126  {
127  return maGraphicObject;
128  }
129 };
130 
131 enum class XPropertyListType {
132  Unknown = -1,
133  Color,
134  LineEnd,
135  Dash,
136  Hatch,
137  Gradient,
138  Bitmap,
139  Pattern,
140  LAST = Pattern
141 };
142 
144 
152 
154 {
155 protected:
157  OUString maName; // not persistent
158  OUString maPath;
159  OUString maReferer;
160 
161  std::vector< std::unique_ptr<XPropertyEntry> > maList;
162 
165 
166  XPropertyList(XPropertyListType t, const OUString& rPath, const OUString& rReferer);
167  bool isValidIdx(tools::Long nIndex) const;
168  virtual BitmapEx CreateBitmapForUI(tools::Long nIndex) = 0;
169 
170 public:
171  XPropertyList(const XPropertyList&) = delete;
172  XPropertyList& operator=(const XPropertyList&) = delete;
173  virtual ~XPropertyList() override;
174 
175  XPropertyListType Type() const { return meType; }
176  tools::Long Count() const;
177 
178  void Insert(std::unique_ptr<XPropertyEntry> pEntry, tools::Long nIndex = std::numeric_limits<tools::Long>::max());
179  void Replace(std::unique_ptr<XPropertyEntry> pEntry, tools::Long nIndex);
180  void Remove(tools::Long nIndex);
181 
182  XPropertyEntry* Get(tools::Long nIndex) const;
183  tools::Long GetIndex(std::u16string_view rName) const;
184  BitmapEx GetUiBitmap(tools::Long nIndex) const;
185 
186  const OUString& GetName() const { return maName; }
187  void SetName(const OUString& rString);
188 
189  const OUString& GetPath() const { return maPath; }
190  void SetPath(const OUString& rString) { maPath = rString; }
191 
192  void SetDirty(bool bDirty) { mbListDirty = bDirty; }
193 
194  bool IsEmbedInDocument() const { return mbEmbedInDocument; }
195 
196  static OUString GetDefaultExt(XPropertyListType t);
197  OUString GetDefaultExt() const { return GetDefaultExt(meType); }
198 
199  virtual css::uno::Reference< css::container::XNameContainer >
200  createInstance() = 0;
201  bool Load();
202  bool LoadFrom(const css::uno::Reference<
203  css::embed::XStorage > &xStorage,
204  const OUString &rURL, const OUString &rReferer);
205  bool Save();
206  bool SaveTo (const css::uno::Reference<
207  css::embed::XStorage > &xStorage,
208  const OUString &rURL,
209  OUString *pOptName);
210  virtual bool Create() = 0;
211 
212  // Factory method for sub-classes
213  static XPropertyListRef CreatePropertyList(XPropertyListType t,
214  const OUString& rPath,
215  const OUString& rReferer);
216  // as above but initializes name as expected
217  static XPropertyListRef CreatePropertyListFromURL(XPropertyListType t,
218  const OUString & rUrl);
219 
220  // helper accessors
221  static inline XDashListRef AsDashList(
222  rtl::Reference<XPropertyList> const & plist);
223  static inline XHatchListRef AsHatchList(
224  rtl::Reference<XPropertyList> const & plist);
225  static inline XColorListRef AsColorList(
226  rtl::Reference<XPropertyList> const & plist);
227  static inline XBitmapListRef AsBitmapList(
228  rtl::Reference<XPropertyList> const & plist);
229  static inline XPatternListRef AsPatternList(
230  rtl::Reference<XPropertyList> const & plist);
231  static inline XLineEndListRef AsLineEndList(
232  rtl::Reference<XPropertyList> const & plist);
233  static inline XGradientListRef AsGradientList(
234  rtl::Reference<XPropertyList> const & plist);
235 };
236 
238 {
239  virtual BitmapEx CreateBitmapForUI(tools::Long nIndex) override;
240 
241 public:
242  XColorList(const OUString& rPath, const OUString& rReferer)
243  : XPropertyList(XPropertyListType::Color, rPath, rReferer) {}
244 
245  void Replace(tools::Long nIndex, std::unique_ptr<XColorEntry> pEntry);
246  XColorEntry* GetColor(tools::Long nIndex) const;
247  tools::Long GetIndexOfColor( const Color& rColor) const;
248  virtual css::uno::Reference< css::container::XNameContainer > createInstance() override;
249  virtual bool Create() override;
250 
251  static XColorListRef CreateStdColorList();
252  static XColorListRef GetStdColorList(); // returns a singleton
253 };
254 
256 {
257  virtual BitmapEx CreateBitmapForUI(tools::Long nIndex) override;
258 
259 public:
260  XLineEndList(const OUString& rPath, const OUString& rReferer);
261  virtual ~XLineEndList() override;
262 
263  XLineEndEntry* GetLineEnd(tools::Long nIndex) const;
264 
265  virtual css::uno::Reference< css::container::XNameContainer > createInstance() override;
266  virtual bool Create() override;
267 };
268 
270 {
271 private:
274  OUString maStringNoLine;
275 
276  static BitmapEx ImpCreateBitmapForXDash(const XDash* pDash);
277  virtual BitmapEx CreateBitmapForUI(tools::Long nIndex) override;
278 
279 public:
280  XDashList(const OUString& rPath, const OUString& rReferer);
281  virtual ~XDashList() override;
282 
283  void Replace(std::unique_ptr<XDashEntry> pEntry, tools::Long nIndex);
284  XDashEntry* GetDash(tools::Long nIndex) const;
285 
286  virtual css::uno::Reference< css::container::XNameContainer > createInstance() override;
287  virtual bool Create() override;
288 
289  // Special call to get a bitmap for the solid line representation. It
290  // creates a bitmap fitting in size and style to the ones you get by
291  // using GetUiBitmap for existing entries.
292  BitmapEx const & GetBitmapForUISolidLine() const;
293 
294  // Special calls to get the translated strings for the UI entry for no
295  // line style (XLINE_NONE) and solid line style (XLINE_SOLID) for dialogs
296  OUString const & GetStringForUiSolidLine() const;
297  OUString const & GetStringForUiNoLine() const;
298 };
299 
301 {
302 private:
303  BitmapEx CreateBitmap(tools::Long nIndex, const Size& rSize) const;
304  virtual BitmapEx CreateBitmapForUI(tools::Long nIndex) override;
305 public:
306  XHatchList(const OUString& rPath, const OUString& rReferer);
307  virtual ~XHatchList() override;
308 
309  void Replace(std::unique_ptr<XHatchEntry> pEntry, tools::Long nIndex);
310  XHatchEntry* GetHatch(tools::Long nIndex) const;
311  BitmapEx GetBitmapForPreview(tools::Long nIndex, const Size& rSize);
312 
313  virtual css::uno::Reference< css::container::XNameContainer > createInstance() override;
314  virtual bool Create() override;
315 };
316 
318 {
319 private:
320  BitmapEx CreateBitmap(tools::Long nIndex, const Size& rSize) const;
321  virtual BitmapEx CreateBitmapForUI(tools::Long nIndex) override;
322 
323 public:
324  XGradientList(const OUString& rPath, const OUString& rReferer);
325  virtual ~XGradientList() override;
326 
327  void Replace(std::unique_ptr<XGradientEntry> pEntry, tools::Long nIndex);
328  XGradientEntry* GetGradient(tools::Long nIndex) const;
329  BitmapEx GetBitmapForPreview(tools::Long nIndex, const Size& rSize);
330 
331  virtual css::uno::Reference< css::container::XNameContainer > createInstance() override;
332  virtual bool Create() override;
333 };
334 
336 {
337 private:
338  BitmapEx CreateBitmap( tools::Long nIndex, const Size& rSize ) const;
339  virtual BitmapEx CreateBitmapForUI(tools::Long nIndex) override;
340 
341 public:
342  XBitmapList(const OUString& rPath, const OUString& rReferer)
343  : XPropertyList(XPropertyListType::Bitmap, rPath, rReferer) {}
344 
345  XBitmapEntry* GetBitmap(tools::Long nIndex) const;
346  BitmapEx GetBitmapForPreview(tools::Long nIndex, const Size& rSize);
347 
348  virtual css::uno::Reference< css::container::XNameContainer > createInstance() override;
349  virtual bool Create() override;
350 };
351 
353 {
354 private:
355  BitmapEx CreateBitmap( tools::Long nIndex, const Size& rSize ) const;
356  virtual BitmapEx CreateBitmapForUI(tools::Long nIndex) override;
357 
358 public:
359  XPatternList(const OUString& rPath, const OUString& rReferer)
360  : XPropertyList(XPropertyListType::Pattern, rPath, rReferer) {}
361 
362  XBitmapEntry* GetBitmap(tools::Long nIndex) const;
363  BitmapEx GetBitmapForPreview(tools::Long nIndex, const Size& rSize);
364 
365  virtual css::uno::Reference< css::container::XNameContainer > createInstance() override;
366  virtual bool Create() override;
367 };
368 
369 // FIXME: could add type checking too ...
371  rtl::Reference<XPropertyList> const & plist)
372 { return XDashListRef( static_cast<XDashList *> (plist.get()) ); }
374  rtl::Reference<XPropertyList> const & plist)
375 { return XHatchListRef( static_cast<XHatchList *> (plist.get()) ); }
377  rtl::Reference<XPropertyList> const & plist)
378 { return XColorListRef( static_cast<XColorList *> (plist.get()) ); }
380  rtl::Reference<XPropertyList> const & plist)
381 { return XBitmapListRef( static_cast<XBitmapList *> (plist.get()) ); }
383  rtl::Reference<XPropertyList> const & plist)
384 { return XPatternListRef( static_cast<XPatternList *> (plist.get()) ); }
386  rtl::Reference<XPropertyList> const & plist)
387 { return XLineEndListRef( static_cast<XLineEndList *> (plist.get()) ); }
389  rtl::Reference<XPropertyList> const & plist)
390 { return XGradientListRef( static_cast<XGradientList *> (plist.get()) ); }
391 
392 #endif // INCLUDED_SVX_XTABLE_HXX
393 
394 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
OWeakObject &SAL_CALL operator=(const OWeakObject &)
OUString maStringNoLine
Definition: xtable.hxx:274
XPropertyListType t
Definition: xtable.cxx:370
sal_Int32 nIndex
rtl::Reference< class XBitmapList > XBitmapListRef
Definition: xtable.hxx:148
XPropertyListType Type() const
Definition: xtable.hxx:175
static XLineEndListRef AsLineEndList(rtl::Reference< XPropertyList > const &plist)
Definition: xtable.hxx:385
XBitmapList(const OUString &rPath, const OUString &rReferer)
Definition: xtable.hxx:342
const OUString & GetName() const
Definition: xtable.hxx:186
void Create(SwFormatVertOrient &rItem, SvStream &rStrm, sal_uInt16 nVersionAbusedAsSize)
long Long
static XBitmapListRef AsBitmapList(rtl::Reference< XPropertyList > const &plist)
Definition: xtable.hxx:379
OUString GetDefaultExt() const
Definition: xtable.hxx:197
rtl::Reference< class XColorList > XColorListRef
Definition: xtable.hxx:147
rtl::Reference< class XPatternList > XPatternListRef
Definition: xtable.hxx:149
BitmapEx maBitmapSolidLine
Definition: xtable.hxx:272
virtual bool Create()=0
rtl::Reference< class XHatchList > XHatchListRef
Definition: xtable.hxx:146
static XPatternListRef AsPatternList(rtl::Reference< XPropertyList > const &plist)
Definition: xtable.hxx:382
const XGradient & GetGradient() const
Definition: xtable.hxx:110
Definition: xdash.hxx:31
Color aColor
Definition: xtable.hxx:45
rtl::Reference< class XGradientList > XGradientListRef
Definition: xtable.hxx:151
XHatch aHatch
Definition: xtable.hxx:89
const XDash & GetDash() const
Definition: xtable.hxx:80
const GraphicObject & GetGraphicObject() const
Definition: xtable.hxx:125
OUString maName
Definition: xtable.hxx:157
void Replace(std::unique_ptr< XPropertyEntry > pEntry, tools::Long nIndex)
Definition: xtable.cxx:192
XGradient aGradient
Definition: xtable.hxx:104
static XColorListRef AsColorList(rtl::Reference< XPropertyList > const &plist)
Definition: xtable.hxx:376
OUString maStringSolidLine
Definition: xtable.hxx:273
XPropertyListType
Definition: xtable.hxx:131
XColorList(const OUString &rPath, const OUString &rReferer)
Definition: xtable.hxx:242
bool IsEmbedInDocument() const
Definition: xtable.hxx:194
bool mbListDirty
Definition: xtable.hxx:163
OUString maReferer
Definition: xtable.hxx:159
Count
HRESULT createInstance(REFIID iid, Ifc **ppIfc)
XPatternList(const OUString &rPath, const OUString &rReferer)
Definition: xtable.hxx:359
XPropertyListType meType
Definition: xtable.hxx:156
rtl::Reference< class XPropertyList > XPropertyListRef
Definition: xtable.hxx:143
const OUString & GetPath() const
Definition: xtable.hxx:189
basegfx::B2DPolyPolygon aB2DPolyPolygon
Definition: xtable.hxx:59
void SetDirty(bool bDirty)
Definition: xtable.hxx:192
void SetPath(const OUString &rString)
Definition: xtable.hxx:190
LineEnd
const basegfx::B2DPolyPolygon & GetLineEnd() const
Definition: xtable.hxx:65
bool mbEmbedInDocument
Definition: xtable.hxx:164
static XGradientListRef AsGradientList(rtl::Reference< XPropertyList > const &plist)
Definition: xtable.hxx:388
const XHatch & GetHatch() const
Definition: xtable.hxx:95
OUString maPath
Definition: xtable.hxx:158
#define SVXCORE_DLLPUBLIC
Definition: svxdllapi.h:35
virtual BitmapEx CreateBitmapForUI(tools::Long nIndex)=0
const Color & GetColor() const
Definition: xtable.hxx:50
static XDashListRef AsDashList(rtl::Reference< XPropertyList > const &plist)
Definition: xtable.hxx:370
GraphicObject maGraphicObject
Definition: xtable.hxx:119
XDash aDash
Definition: xtable.hxx:74
rtl::Reference< class XLineEndList > XLineEndListRef
Definition: xtable.hxx:150
static XHatchListRef AsHatchList(rtl::Reference< XPropertyList > const &plist)
Definition: xtable.hxx:373
std::vector< std::unique_ptr< XPropertyEntry > > maList
Definition: xtable.hxx:161
virtual css::uno::Reference< css::container::XNameContainer > createInstance()=0
STDMETHOD() Get(VARIANT *val)=0
rtl::Reference< class XDashList > XDashListRef
Definition: xtable.hxx:145