- Main Page
- Namespaces
- Classes
- Files

- File List
- File Members

WPSCell.h
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
2 /* libwps
3 * Version: MPL 2.0 / LGPLv2.1+
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 * Major Contributor(s):
10 * Copyright (C) 2009, 2011 Alonso Laurent (alonso@loria.fr)
11 * Copyright (C) 2006, 2007 Andrew Ziem
12 * Copyright (C) 2004-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
13 * Copyright (C) 2004 Marc Maurer (uwog@uwog.net)
14 * Copyright (C) 2003-2005 William Lachance (william.lachance@sympatico.ca)
15 *
16 * For minor contributions see the git repository.
17 *
18 * Alternatively, the contents of this file may be used under the terms
19 * of the GNU Lesser General Public License Version 2.1 or later
20 * (LGPLv2.1+), in which case the provisions of the LGPLv2.1+ are
21 * applicable instead of those above.
22 *
23 * For further information visit http://libwps.sourceforge.net
24 */
25
26 /* Define some classes used to store a Cell
27 */
28
29 #ifndef WPS_CELL_H
30 # define WPS_CELL_H
31
32 #include <iostream>
33 #include <vector>
34
35 #include "libwps_internal.h"
36
37 #include "WPSFont.h"
38
40 class WPSCellFormat
41 {
42 public:
46 enum HorizontalAlignment { HALIGN_LEFT, HALIGN_RIGHT, HALIGN_CENTER,
47 HALIGN_FULL, HALIGN_DEFAULT
48 };
50 enum VerticalAlignment { VALIGN_TOP, VALIGN_CENTER, VALIGN_BOTTOM, VALIGN_DEFAULT };
51
53 enum FormatType { F_TEXT, F_BOOLEAN, F_NUMBER, F_DATE, F_TIME, F_UNKNOWN };
54
55 /* subformat:
56 NUMBER DATE TIME TEXT
57 0 : default default[3/2/2000] default[10:03:00] default
58 1 : decimal
59 2 : exponential
60 3 : percent
61 4 : money
62 5 : thousand
63 6 : fixed
64 7 : fraction
65 */
66
68 WPSCellFormat() :
69 m_font(), m_hAlign(HALIGN_DEFAULT), m_vAlign(VALIGN_DEFAULT), m_bordersList(), m_format(F_UNKNOWN), m_subFormat(0), m_DTFormat(""), m_digits(-1000), m_protected(false), m_backgroundColor(WPSColor::white()) { }
71 virtual ~WPSCellFormat() {}
73 bool hasBasicFormat() const
74 {
75 return m_format==F_TEXT || m_format==F_UNKNOWN;
76 }
78 std::string getValueType() const;
80 void addTo(librevenge::RVNGPropertyList &propList) const;
82 bool getNumberingProperties(librevenge::RVNGPropertyList &propList) const;
83
85 WPSFont const &getFont() const
86 {
87 return m_font;
88 }
90 void setFont(WPSFont const &font)
91 {
92 m_font=font;
93 }
95 HorizontalAlignment hAlignement() const
96 {
97 return m_hAlign;
98 }
100 void setHAlignement(HorizontalAlignment align)
101 {
102 m_hAlign = align;
103 }
104
106 VerticalAlignment vAlignement() const
107 {
108 return m_vAlign;
109 }
111 void setVAlignement(VerticalAlignment align)
112 {
113 m_vAlign = align;
114 }
115
117 FormatType getFormat() const
118 {
119 return m_format;
120 }
122 int getSubFormat() const
123 {
124 return m_subFormat;
125 }
127 std::string getDTFormat() const
128 {
129 return m_DTFormat;
130 }
132 void setFormat(FormatType form, int subForm=0)
133 {
134 m_format = form;
135 m_subFormat = subForm;
136 }
138 void setDTFormat(FormatType form, std::string const &dtFormat="")
139 {
140 m_format = form;
141 m_subFormat = 0;
142 m_DTFormat = dtFormat;
143 }
144
146 int digits() const
147 {
148 return m_digits;
149 }
151 void setDigits(int newDigit)
152 {
153 m_digits = newDigit;
154 }
155
157 bool isProtected() const
158 {
159 return m_protected;
160 }
161
163 void setProtected(bool fl)
164 {
165 m_protected = fl;
166 }
167
169 bool hasBorders() const
170 {
171 return m_bordersList.size() != 0;
172 }
173
175 std::vector<WPSBorder> const &borders() const
176 {
177 return m_bordersList;
178 }
179
181 void resetBorders()
182 {
183 m_bordersList.resize(0);
184 }
185
187 void setBorders(int wh, WPSBorder const &border);
189 void setBorders(std::vector<WPSBorder> const &newBorders)
190 {
191 m_bordersList=newBorders;
192 }
193
195 WPSColor backgroundColor() const
196 {
197 return m_backgroundColor;
198 }
200 void setBackgroundColor(WPSColor const &color)
201 {
202 m_backgroundColor = color;
203 }
204
206 int compare(WPSCellFormat const &cell, bool onlyNumbering=false) const;
207
209 friend std::ostream &operator<<(std::ostream &o, WPSCellFormat const &cell);
210
212 struct CompareFormat
213 {
215 CompareFormat() {}
217 bool operator()(WPSCellFormat const &c1, WPSCellFormat const &c2) const
218 {
219 return c1.compare(c2, true) < 0;
220 }
221 };
222
223 protected:
225 static bool convertDTFormat(std::string const &dtFormat, librevenge::RVNGPropertyListVector &propListVector);
227 WPSFont m_font;
229 HorizontalAlignment m_hAlign;
231 VerticalAlignment m_vAlign;
233 std::vector<WPSBorder> m_bordersList;
235 FormatType m_format;
237 int m_subFormat;
239 std::string m_DTFormat;
241 int m_digits;
243 bool m_protected;
245 WPSColor m_backgroundColor;
246 };
247
248 class WPSTable;
249
251 class WPSCell : public WPSCellFormat
252 {
253 friend class WPSTable;
254 public:
256 WPSCell() : WPSCellFormat(), m_box(), m_verticalSet(true), m_position(0,0), m_numberCellSpanned(1,1) {}
258 virtual ~WPSCell() {}
259
261 void addTo(librevenge::RVNGPropertyList &propList) const;
262
264 void setBox(Box2f const &b)
265 {
266 m_box = b;
267 }
269 Box2f const &box() const
270 {
271 return m_box;
272 }
274 bool isVerticalSet() const
275 {
276 return m_verticalSet;
277 }
279 void setVerticalSet(bool verticalSet)
280 {
281 m_verticalSet = verticalSet;
282 }
284 Vec2i &position()
285 {
286 return m_position;
287 }
289 Vec2i const &position() const
290 {
291 return m_position;
292 }
294 void setPosition(Vec2i posi)
295 {
296 m_position = posi;
297 }
298
300 Vec2i const &numSpannedCells() const
301 {
302 return m_numberCellSpanned;
303 }
305 void setNumSpannedCells(Vec2i numSpanned)
306 {
307 m_numberCellSpanned=numSpanned;
308 }
309
311 virtual bool send(WPSListenerPtr &listener) = 0;
312
314 virtual bool sendContent(WPSListenerPtr &listener) = 0;
315
317 friend std::ostream &operator<<(std::ostream &o, WPSCell const &cell);
318
319 protected:
321 struct Compare
322 {
323 explicit Compare(int dim) : m_coord(dim) {}
325 struct Point
326 {
327 Point(int wh, WPSCell const *cell) : m_which(wh), m_cell(cell) {}
328 float getPos(int coord) const
329 {
330 if (m_which)
331 return m_cell->box().max()[coord];
332 return m_cell->box().min()[coord];
333 }
334 float getSize(int coord) const
335 {
336 return m_cell->box().size()[coord];
337 }
338 int m_which;
339 WPSCell const *m_cell;
340 };
341
343 bool operator()(Point const &c1, Point const &c2) const
344 {
345 float diffF = c1.getPos(m_coord)-c2.getPos(m_coord);
346 if (diffF < 0) return true;
347 if (diffF > 0) return false;
348 int diff = c2.m_which - c1.m_which;
349 if (diff) return (diff < 0);
350 diffF = c1.m_cell->box().size()[m_coord]
351 - c2.m_cell->box().size()[m_coord];
352 if (diffF < 0) return true;
353 if (diffF > 0) return false;
354 if (c1.m_cell->m_verticalSet != c2.m_cell->m_verticalSet) return c1.m_cell->m_verticalSet;
355 #ifdef _WIN64
356 return ((__int64)c1.m_cell < (__int64)c2.m_cell);
357 #else
358 return long(c1.m_cell) < long(c2.m_cell);
359 #endif
360 }
361
363 int m_coord;
364 };
365
367 Box2f m_box;
369 bool m_verticalSet;
371 Vec2i m_position;
373 Vec2i m_numberCellSpanned;
374 };
375
376 #endif
377 /* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */
WPSCellFormat::F_TIME
Definition: WPSCell.h:53
WPSCellFormat::m_digits
int m_digits
the number of digits
Definition: WPSCell.h:241
WPSCellFormat::backgroundColor
WPSColor backgroundColor() const
returns the background color
Definition: WPSCell.h:195
WPSCell::setBox
void setBox(Box2f const &b)
set the bounding box (units in point)
Definition: WPSCell.h:264
WPSCellFormat::operator<<
friend std::ostream & operator<<(std::ostream &o, WPSCellFormat const &cell)
operator<<
Definition: WPSCell.cpp:371
WPSBorder
a border list
Definition: libwps_internal.h:372
WPSCell::Compare
a comparaison structure used retrieve the rows and the columns
Definition: WPSCell.h:321
WPSCell::Compare::Point::Point
Point(int wh, WPSCell const *cell)
Definition: WPSCell.h:327
WPSCell::m_numberCellSpanned
Vec2i m_numberCellSpanned
the cell spanned : by default (1,1)
Definition: WPSCell.h:373
WPSCellFormat::setDigits
void setDigits(int newDigit)
set the number of digits ( for a number)
Definition: WPSCell.h:151
WPSCell::~WPSCell
virtual ~WPSCell()
destructor
Definition: WPSCell.h:258
WPSCellFormat::m_vAlign
VerticalAlignment m_vAlign
the cell vertical alignement : by default nothing
Definition: WPSCell.h:231
WPSCellFormat::VALIGN_BOTTOM
Definition: WPSCell.h:50
Box2< float >
WPSCellFormat::setFormat
void setFormat(FormatType form, int subForm=0)
sets the format type
Definition: WPSCell.h:132
WPSCellFormat::F_DATE
Definition: WPSCell.h:53
WPSFont
define the font properties
Definition: WPSFont.h:36
WPSCellFormat::VALIGN_DEFAULT
Definition: WPSCell.h:50
WPSCellFormat::CompareFormat::operator()
bool operator()(WPSCellFormat const &c1, WPSCellFormat const &c2) const
comparaison function
Definition: WPSCell.h:217
WPSCellFormat::hasBorders
bool hasBorders() const
return true if the cell has some border
Definition: WPSCell.h:169
WPSCellFormat::m_format
FormatType m_format
the cell format : by default unknown
Definition: WPSCell.h:235
WPSCellFormat::setBorders
void setBorders(int wh, WPSBorder const &border)
sets the cell border: wh=WPSBorder::LeftBit|...
Definition: WPSCell.cpp:136
WPSCell::WPSCell
WPSCell()
constructor
Definition: WPSCell.h:256
WPSCell::setVerticalSet
void setVerticalSet(bool verticalSet)
fixes or not the vertical size
Definition: WPSCell.h:279
WPSCell::Compare::Point::getSize
float getSize(int coord) const
Definition: WPSCell.h:334
WPSCellFormat::VALIGN_CENTER
Definition: WPSCell.h:50
WPSCellFormat::m_hAlign
HorizontalAlignment m_hAlign
the cell alignement : by default nothing
Definition: WPSCell.h:229
WPSCellFormat::m_DTFormat
std::string m_DTFormat
a date/time format ( using a subset of strftime format )
Definition: WPSCell.h:239
WPSCellFormat::HALIGN_LEFT
Definition: WPSCell.h:46
WPSCellFormat::F_TEXT
Definition: WPSCell.h:53
WPSCellFormat
a structure used to defined the cell format
Definition: WPSCell.h:40
WPSCellFormat::setDTFormat
void setDTFormat(FormatType form, std::string const &dtFormat="")
sets the format type
Definition: WPSCell.h:138
WPSCellFormat::setVAlignement
void setVAlignement(VerticalAlignment align)
sets the vertical alignement
Definition: WPSCell.h:111
WPSCellFormat::setFont
void setFont(WPSFont const &font)
sets the font
Definition: WPSCell.h:90
WPSCellFormat::F_NUMBER
Definition: WPSCell.h:53
WPSCell::numSpannedCells
Vec2i const & numSpannedCells() const
returns the number of spanned cells
Definition: WPSCell.h:300
WPSCell
a structure used to defined the cell position, and a format
Definition: WPSCell.h:251
WPSCell::setNumSpannedCells
void setNumSpannedCells(Vec2i numSpanned)
sets the number of spanned cells : Vec2i(1,1) means 1 cellule
Definition: WPSCell.h:305
WPSCellFormat::FormatType
FormatType
the different types of cell&#39;s field
Definition: WPSCell.h:53
WPSCellFormat::CompareFormat
a comparaison structure used to store data
Definition: WPSCell.h:212
WPSCell::isVerticalSet
bool isVerticalSet() const
returns true if the vertical is fixed
Definition: WPSCell.h:274
WPSCellFormat::getFont
WPSFont const & getFont() const
returns the font
Definition: WPSCell.h:85
WPSCellFormat::setProtected
void setProtected(bool fl)
returns true if the cell is protected
Definition: WPSCell.h:163
WPSCellFormat::hAlignement
HorizontalAlignment hAlignement() const
returns the horizontal alignement
Definition: WPSCell.h:95
WPSCellFormat::addTo
void addTo(librevenge::RVNGPropertyList &propList) const
add to the propList
Definition: WPSCell.cpp:156
WPSCellFormat::m_bordersList
std::vector< WPSBorder > m_bordersList
the cell border WPSBorder::Pos
Definition: WPSCell.h:233
WPSListenerPtr
shared_ptr< WPSListener > WPSListenerPtr
shared pointer to WPSListener
Definition: libwps_internal.h:104
WPSCellFormat::setBackgroundColor
void setBackgroundColor(WPSColor const &color)
set the background color
Definition: WPSCell.h:200
WPSCellFormat::VALIGN_TOP
Definition: WPSCell.h:50
libwps_internal.h
WPSCellFormat::getFormat
FormatType getFormat() const
returns the format type
Definition: WPSCell.h:117
WPSCellFormat::F_BOOLEAN
Definition: WPSCell.h:53
WPSCellFormat::vAlignement
VerticalAlignment vAlignement() const
returns the vertical alignement
Definition: WPSCell.h:106
WPSCell::m_box
Box2f m_box
the cell bounding box (unit in point)
Definition: WPSCell.h:367
WPSCellFormat::getNumberingProperties
bool getNumberingProperties(librevenge::RVNGPropertyList &propList) const
get the number style
Definition: WPSCell.cpp:258
WPSCellFormat::F_UNKNOWN
Definition: WPSCell.h:53
WPSCellFormat::getDTFormat
std::string getDTFormat() const
returns the date/time format ( if set)
Definition: WPSCell.h:127
WPSCell::Compare::m_coord
int m_coord
the coord to compare
Definition: WPSCell.h:363
WPSCellFormat::compare
int compare(WPSCellFormat const &cell, bool onlyNumbering=false) const
a comparison function
Definition: WPSCell.cpp:343
WPSCell::position
Vec2i const & position() const
position accessor
Definition: WPSCell.h:289
WPSCellFormat::m_subFormat
int m_subFormat
the sub format
Definition: WPSCell.h:237
WPSCell::Compare::Compare
Compare(int dim)
Definition: WPSCell.h:323
WPSCell::Compare::operator()
bool operator()(Point const &c1, Point const &c2) const
comparaison function
Definition: WPSCell.h:343
WPSCell::Compare::Point
small structure to define a cell point
Definition: WPSCell.h:325
WPSCell::Compare::Point::getPos
float getPos(int coord) const
Definition: WPSCell.h:328
WPSCellFormat::convertDTFormat
static bool convertDTFormat(std::string const &dtFormat, librevenge::RVNGPropertyListVector &propListVector)
convert a DTFormat in a propertyList
Definition: WPSCell.cpp:35
WPSCellFormat::resetBorders
void resetBorders()
reset the border
Definition: WPSCell.h:181
WPSCellFormat::HALIGN_DEFAULT
Definition: WPSCell.h:47
WPSCell::box
Box2f const & box() const
return the bounding box
Definition: WPSCell.h:269
WPSCell::setPosition
void setPosition(Vec2i posi)
set the cell positions : 0,0 -> A1, 0,1 -> A2
Definition: WPSCell.h:294
WPSCellFormat::getValueType
std::string getValueType() const
returns a value type
Definition: WPSCell.cpp:223
WPSCellFormat::getSubFormat
int getSubFormat() const
returns the subformat type
Definition: WPSCell.h:122
WPSColor
the class to store a color
Definition: libwps_internal.h:266
WPSCellFormat::digits
int digits() const
returns the number of digits ( for a number)
Definition: WPSCell.h:146
WPSCell::m_position
Vec2i m_position
the cell row and column : 0,0 -> A1, 0,1 -> A2
Definition: WPSCell.h:371
WPSCell::Compare::Point::m_cell
WPSCell const * m_cell
Definition: WPSCell.h:339
WPSCellFormat::m_protected
bool m_protected
cell protected
Definition: WPSCell.h:243
WPSCellFormat::setHAlignement
void setHAlignement(HorizontalAlignment align)
sets the horizontal alignement
Definition: WPSCell.h:100
WPSCellFormat::HALIGN_CENTER
Definition: WPSCell.h:46
WPSCellFormat::HALIGN_FULL
Definition: WPSCell.h:47
WPSCell::Compare::Point::m_which
int m_which
Definition: WPSCell.h:338
WPSCellFormat::borders
std::vector< WPSBorder > const & borders() const
return the cell border: libwps::LeftBit | ...
Definition: WPSCell.h:175
WPSCellFormat::m_font
WPSFont m_font
the cell font ( used in spreadsheet code )
Definition: WPSCell.h:227
WPSFont.h
WPSCellFormat::m_backgroundColor
WPSColor m_backgroundColor
the backgroung color
Definition: WPSCell.h:245
WPSCellFormat::~WPSCellFormat
virtual ~WPSCellFormat()
destructor
Definition: WPSCell.h:71
WPSTable
Definition: WPSTable.h:39
Vec2< int >
WPSCell::m_verticalSet
bool m_verticalSet
true if y size is fixed
Definition: WPSCell.h:369
Box2::size
Vec2< T > size() const
the box size
Definition: libwps_internal.h:764
WPSCellFormat::HALIGN_RIGHT
Definition: WPSCell.h:46
WPSCellFormat::HorizontalAlignment
HorizontalAlignment
the default horizontal alignement.
Definition: WPSCell.h:46
WPSCellFormat::setBorders
void setBorders(std::vector< WPSBorder > const &newBorders)
sets the cell borders
Definition: WPSCell.h:189
WPSCellFormat::VerticalAlignment
VerticalAlignment
the default vertical alignement.
Definition: WPSCell.h:50
WPSCellFormat::CompareFormat::CompareFormat
CompareFormat()
constructor
Definition: WPSCell.h:215
WPSCell::position
Vec2i & position()
position accessor
Definition: WPSCell.h:284
WPSCellFormat::isProtected
bool isProtected() const
returns true if the cell is protected
Definition: WPSCell.h:157
WPSCellFormat::WPSCellFormat
WPSCellFormat()
constructor
Definition: WPSCell.h:68
WPSCellFormat::hasBasicFormat
bool hasBasicFormat() const
returns true if this is a basic format style
Definition: WPSCell.h:73