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
41{
42public:
48 };
55
56 /* subformat:
57 NUMBER DATE TIME TEXT
58 0 : default default[3/2/2000] default[10:03:00] default
59 1 : decimal
60 2 : exponential
61 3 : percent
62 4 : money
63 5 : thousand
64 6 : fixed
65 7 : fraction
66 */
67
82 WPSCellFormat(WPSCellFormat const &)=default;
85 virtual ~WPSCellFormat();
87 bool hasBasicFormat() const
88 {
90 }
91
92 std::string getValueType() const;
94 void addTo(librevenge::RVNGPropertyList &propList) const;
96 bool getNumberingProperties(librevenge::RVNGPropertyList &propList) const;
97
99 WPSFont const &getFont() const
100 {
101 return m_font;
102 }
103
104 void setFont(WPSFont const &font)
105 {
106 m_font=font;
107 }
108
110 {
111 return m_hAlign;
112 }
113
115 {
116 m_hAlign = align;
117 }
118
121 {
122 return m_vAlign;
123 }
124
126 {
127 m_vAlign = align;
128 }
129
131 {
132 return m_wrapping;
133 }
134
136 {
137 m_wrapping = align;
138 }
139
141 int getTextRotation() const
142 {
143 return m_rotation;
144 }
145
146 void setTextRotation(int rotation)
147 {
148 m_rotation = rotation;
149 }
150
153 {
154 return m_format;
155 }
156
157 int getSubFormat() const
158 {
159 return m_subFormat;
160 }
161
162 std::string getDTFormat() const
163 {
164 return m_DTFormat;
165 }
166
167 void setFormat(FormatType form, int subForm=0)
168 {
169 m_format = form;
170 m_subFormat = subForm;
171 }
172
173 void setDTFormat(FormatType form, std::string const &dtFormat="")
174 {
175 m_format = form;
176 m_subFormat = 0;
177 m_DTFormat = dtFormat;
178 }
179
181 int digits() const
182 {
183 return m_digits;
184 }
185
186 void setDigits(int newDigit)
187 {
188 m_digits = newDigit;
189 }
190
192 bool isProtected() const
193 {
194 return m_protected;
195 }
196
198 void setProtected(bool fl)
199 {
200 m_protected = fl;
201 }
202
204 bool hasBorders() const
205 {
206 return m_bordersList.size() != 0;
207 }
208
210 std::vector<WPSBorder> const &borders() const
211 {
212 return m_bordersList;
213 }
214
217 {
218 m_bordersList.resize(0);
219 }
220
222 void setBorders(int wh, WPSBorder const &border);
224 void setBorders(std::vector<WPSBorder> const &newBorders)
225 {
226 m_bordersList=newBorders;
227 }
228
231 {
232 return m_backgroundColor;
233 }
234
235 void setBackgroundColor(WPSColor const &color)
236 {
237 m_backgroundColor = color;
238 }
239
241 int compare(WPSCellFormat const &cell, bool onlyNumbering=false) const;
242
244 friend std::ostream &operator<<(std::ostream &o, WPSCellFormat const &cell);
245
248 {
252 bool operator()(WPSCellFormat const &c1, WPSCellFormat const &c2) const
253 {
254 return c1.compare(c2, true) < 0;
255 }
256 };
257
258protected:
260 static bool convertDTFormat(std::string const &dtFormat, librevenge::RVNGPropertyListVector &propListVector);
272 std::vector<WPSBorder> m_bordersList;
278 std::string m_DTFormat;
285};
286
287class WPSTable;
288
290class WPSCell : public WPSCellFormat
291{
292 friend class WPSTable;
293public:
296 : WPSCellFormat()
297 , m_box()
298 , m_verticalSet(true)
299 , m_position(0,0)
300 , m_numberCellSpanned(1,1) {}
301 WPSCell(WPSCell const &)=default;
302 WPSCell &operator=(WPSCell const &)=default;
304 ~WPSCell() override;
305
307 void addTo(librevenge::RVNGPropertyList &propList) const;
308
310 void setBox(WPSBox2f const &b)
311 {
312 m_box = b;
313 }
314
315 WPSBox2f const &box() const
316 {
317 return m_box;
318 }
319
320 bool isVerticalSet() const
321 {
322 return m_verticalSet;
323 }
324
325 void setVerticalSet(bool verticalSet)
326 {
327 m_verticalSet = verticalSet;
328 }
329
331 {
332 return m_position;
333 }
334
335 Vec2i const &position() const
336 {
337 return m_position;
338 }
339
341 {
342 m_position = posi;
343 }
344
346 Vec2i const &numSpannedCells() const
347 {
348 return m_numberCellSpanned;
349 }
350
351 void setNumSpannedCells(Vec2i numSpanned)
352 {
353 m_numberCellSpanned=numSpanned;
354 }
355
357 virtual bool send(WPSListenerPtr &listener) = 0;
358
360 virtual bool sendContent(WPSListenerPtr &listener) = 0;
361
363 friend std::ostream &operator<<(std::ostream &o, WPSCell const &cell);
364
365protected:
367 struct Compare
368 {
369 explicit Compare(int dim)
370 : m_coord(dim) {}
371
372 struct Point
373 {
374 Point(int wh, WPSCell const *cell)
375 : m_which(wh)
376 , m_cell(cell) {}
377 float getPos(int coord) const
378 {
379 if (m_which)
380 return m_cell->box().max()[coord];
381 return m_cell->box().min()[coord];
382 }
383 float getSize(int coord) const
384 {
385 return m_cell->box().size()[coord];
386 }
389 };
390
392 bool operator()(Point const &c1, Point const &c2) const
393 {
394 float diffF = c1.getPos(m_coord)-c2.getPos(m_coord);
395 if (diffF < 0) return true;
396 if (diffF > 0) return false;
397 int diff = c2.m_which - c1.m_which;
398 if (diff) return (diff < 0);
399 diffF = c1.m_cell->box().size()[m_coord]
400 - c2.m_cell->box().size()[m_coord];
401 if (diffF < 0) return true;
402 if (diffF > 0) return false;
403 if (c1.m_cell->m_verticalSet != c2.m_cell->m_verticalSet) return c1.m_cell->m_verticalSet;
404#ifdef _WIN64
405 return ((__int64)c1.m_cell < (__int64)c2.m_cell);
406#else
407 return long(c1.m_cell) < long(c2.m_cell);
408#endif
409 }
410
413 };
414
423};
424
425#endif
426/* vim:set shiftwidth=4 softtabstop=4 noexpandtab: */
Vec2< T > size() const
the box size
Definition libwps_internal.h:754
a structure used to defined the cell format
Definition WPSCell.h:41
void setFont(WPSFont const &font)
sets the font
Definition WPSCell.h:104
Wrapping wrapping() const
returns the wrapping
Definition WPSCell.h:130
bool isProtected() const
returns true if the cell is protected
Definition WPSCell.h:192
void setHAlignment(HorizontalAlignment align)
sets the horizontal alignement
Definition WPSCell.h:114
WPSFont m_font
the cell font ( used in spreadsheet code )
Definition WPSCell.h:262
WPSCellFormat()
constructor
Definition WPSCell.h:69
void setVAlignment(VerticalAlignment align)
sets the vertical alignement
Definition WPSCell.h:125
void setBorders(int wh, WPSBorder const &border)
sets the cell border: wh=WPSBorder::LeftBit|...
Definition WPSCell.cpp:143
WPSCellFormat(WPSCellFormat const &)=default
static bool convertDTFormat(std::string const &dtFormat, librevenge::RVNGPropertyListVector &propListVector)
convert a DTFormat in a propertyList
Definition WPSCell.cpp:39
HorizontalAlignment
the default horizontal alignement.
Definition WPSCell.h:46
@ HALIGN_DEFAULT
Definition WPSCell.h:47
@ HALIGN_CENTER
Definition WPSCell.h:46
@ HALIGN_RIGHT
Definition WPSCell.h:46
@ HALIGN_FULL
Definition WPSCell.h:47
@ HALIGN_LEFT
Definition WPSCell.h:46
std::string getDTFormat() const
returns the date/time format ( if set)
Definition WPSCell.h:162
void setFormat(FormatType form, int subForm=0)
sets the format type
Definition WPSCell.h:167
std::string m_DTFormat
a date/time format ( using a subset of strftime format )
Definition WPSCell.h:278
int m_rotation
the text rotation
Definition WPSCell.h:270
WPSColor m_backgroundColor
the backgroung color
Definition WPSCell.h:284
std::string getValueType() const
returns a value type
Definition WPSCell.cpp:246
bool m_protected
cell protected
Definition WPSCell.h:282
void setDigits(int newDigit)
set the number of digits ( for a number)
Definition WPSCell.h:186
int getSubFormat() const
returns the subformat type
Definition WPSCell.h:157
FormatType m_format
the cell format : by default unknown
Definition WPSCell.h:274
int digits() const
returns the number of digits ( for a number)
Definition WPSCell.h:181
HorizontalAlignment m_hAlign
the cell alignement : by default nothing
Definition WPSCell.h:264
void addTo(librevenge::RVNGPropertyList &propList) const
add to the propList
Definition WPSCell.cpp:163
void setTextRotation(int rotation)
sets the text rotation angle
Definition WPSCell.h:146
bool getNumberingProperties(librevenge::RVNGPropertyList &propList) const
get the number style
Definition WPSCell.cpp:281
int compare(WPSCellFormat const &cell, bool onlyNumbering=false) const
a comparison function
Definition WPSCell.cpp:366
Wrapping m_wrapping
the wrapping : by default nothing
Definition WPSCell.h:268
void setWrapping(Wrapping align)
sets the wrapping
Definition WPSCell.h:135
std::vector< WPSBorder > const & borders() const
return the cell border: libwps::LeftBit | ...
Definition WPSCell.h:210
void setBackgroundColor(WPSColor const &color)
set the background color
Definition WPSCell.h:235
int m_digits
the number of digits
Definition WPSCell.h:280
VerticalAlignment m_vAlign
the cell vertical alignement : by default nothing
Definition WPSCell.h:266
HorizontalAlignment hAlignment() const
returns the horizontal alignement
Definition WPSCell.h:109
void resetBorders()
reset the border
Definition WPSCell.h:216
Wrapping
the wrapping
Definition WPSCell.h:52
@ WRAP_NO_WRAP
Definition WPSCell.h:52
@ WRAP_WRAP
Definition WPSCell.h:52
@ WRAP_DEFAULT
Definition WPSCell.h:52
WPSCellFormat & operator=(WPSCellFormat const &)=default
void setProtected(bool fl)
returns true if the cell is protected
Definition WPSCell.h:198
WPSFont const & getFont() const
returns the font
Definition WPSCell.h:99
VerticalAlignment vAlignment() const
returns the vertical alignement
Definition WPSCell.h:120
std::vector< WPSBorder > m_bordersList
the cell border WPSBorder::Pos
Definition WPSCell.h:272
FormatType
the different types of cell's field
Definition WPSCell.h:54
@ F_NUMBER
Definition WPSCell.h:54
@ F_DATE
Definition WPSCell.h:54
@ F_TIME
Definition WPSCell.h:54
@ F_UNKNOWN
Definition WPSCell.h:54
@ F_BOOLEAN
Definition WPSCell.h:54
@ F_TEXT
Definition WPSCell.h:54
int m_subFormat
the sub format
Definition WPSCell.h:276
bool hasBorders() const
return true if the cell has some border
Definition WPSCell.h:204
friend std::ostream & operator<<(std::ostream &o, WPSCellFormat const &cell)
operator<<
Definition WPSCell.cpp:398
FormatType getFormat() const
returns the format type
Definition WPSCell.h:152
void setDTFormat(FormatType form, std::string const &dtFormat="")
sets the format type
Definition WPSCell.h:173
VerticalAlignment
the default vertical alignement.
Definition WPSCell.h:50
@ VALIGN_BOTTOM
Definition WPSCell.h:50
@ VALIGN_DEFAULT
Definition WPSCell.h:50
@ VALIGN_CENTER
Definition WPSCell.h:50
@ VALIGN_TOP
Definition WPSCell.h:50
void setBorders(std::vector< WPSBorder > const &newBorders)
sets the cell borders
Definition WPSCell.h:224
int getTextRotation() const
returns the text rotation angle
Definition WPSCell.h:141
virtual ~WPSCellFormat()
destructor
Definition WPSCell.cpp:35
WPSColor backgroundColor() const
returns the background color
Definition WPSCell.h:230
bool hasBasicFormat() const
returns true if this is a basic format style
Definition WPSCell.h:87
Vec2i const & position() const
position accessor
Definition WPSCell.h:335
Vec2i & position()
position accessor
Definition WPSCell.h:330
bool m_verticalSet
true if y size is fixed
Definition WPSCell.h:418
~WPSCell() override
destructor
Definition WPSCell.cpp:530
WPSCell(WPSCell const &)=default
Vec2i m_position
the cell row and column : 0,0 -> A1, 0,1 -> A2
Definition WPSCell.h:420
Vec2i const & numSpannedCells() const
returns the number of spanned cells
Definition WPSCell.h:346
friend std::ostream & operator<<(std::ostream &o, WPSCell const &cell)
operator<<
Definition WPSCell.cpp:545
Vec2i m_numberCellSpanned
the cell spanned : by default (1,1)
Definition WPSCell.h:422
void addTo(librevenge::RVNGPropertyList &propList) const
add to the propList
Definition WPSCell.cpp:534
WPSCell()
constructor
Definition WPSCell.h:295
virtual bool sendContent(WPSListenerPtr &listener)=0
call when the content of a cell must be send
bool isVerticalSet() const
returns true if the vertical is fixed
Definition WPSCell.h:320
WPSBox2f const & box() const
return the bounding box
Definition WPSCell.h:315
void setVerticalSet(bool verticalSet)
fixes or not the vertical size
Definition WPSCell.h:325
friend class WPSTable
Definition WPSCell.h:292
WPSCell & operator=(WPSCell const &)=default
virtual bool send(WPSListenerPtr &listener)=0
call when a cell must be send
void setBox(WPSBox2f const &b)
set the bounding box (units in point)
Definition WPSCell.h:310
void setNumSpannedCells(Vec2i numSpanned)
sets the number of spanned cells : Vec2i(1,1) means 1 cellule
Definition WPSCell.h:351
void setPosition(Vec2i posi)
set the cell positions : 0,0 -> A1, 0,1 -> A2
Definition WPSCell.h:340
WPSBox2f m_box
the cell bounding box (unit in point)
Definition WPSCell.h:416
define the font properties
Definition WPSFont.h:37
Definition WPSTable.h:157
Vec2< int > Vec2i
Vec2 of int.
Definition libwps_internal.h:702
WPSBox2< float > WPSBox2f
WPSBox2 of float.
Definition libwps_internal.h:890
std::shared_ptr< WPSListener > WPSListenerPtr
shared pointer to WPSListener
Definition libwps_internal.h:105
a border list
Definition libwps_internal.h:395
CompareFormat()
constructor
Definition WPSCell.h:250
bool operator()(WPSCellFormat const &c1, WPSCellFormat const &c2) const
comparaison function
Definition WPSCell.h:252
small structure to define a cell point
Definition WPSCell.h:373
WPSCell const * m_cell
Definition WPSCell.h:388
float getSize(int coord) const
Definition WPSCell.h:383
float getPos(int coord) const
Definition WPSCell.h:377
Point(int wh, WPSCell const *cell)
Definition WPSCell.h:374
int m_which
Definition WPSCell.h:387
bool operator()(Point const &c1, Point const &c2) const
comparaison function
Definition WPSCell.h:392
Compare(int dim)
Definition WPSCell.h:369
int m_coord
the coord to compare
Definition WPSCell.h:412
the class to store a color
Definition libwps_internal.h:281

Generated on Sat Jul 19 2025 05:24:40 for libwps by doxygen 1.14.0