MWAWTable.hxx
Go to the documentation of this file.
1 /* -*- Mode: C++; c-default-style: "k&r"; indent-tabs-mode: nil; tab-width: 2; c-basic-offset: 2 -*- */
2 
3 /* libmwaw
4 * Version: MPL 2.0 / LGPLv2+
5 *
6 * The contents of this file are subject to the Mozilla Public License Version
7 * 2.0 (the "License"); you may not use this file except in compliance with
8 * the License or as specified alternatively below. You may obtain a copy of
9 * the License at http://www.mozilla.org/MPL/
10 *
11 * Software distributed under the License is distributed on an "AS IS" basis,
12 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
13 * for the specific language governing rights and limitations under the
14 * License.
15 *
16 * Major Contributor(s):
17 * Copyright (C) 2002 William Lachance (wrlach@gmail.com)
18 * Copyright (C) 2002,2004 Marc Maurer (uwog@uwog.net)
19 * Copyright (C) 2004-2006 Fridrich Strba (fridrich.strba@bluewin.ch)
20 * Copyright (C) 2006, 2007 Andrew Ziem
21 * Copyright (C) 2011, 2012 Alonso Laurent (alonso@loria.fr)
22 *
23 *
24 * All Rights Reserved.
25 *
26 * For minor contributions see the git repository.
27 *
28 * Alternatively, the contents of this file may be used under the terms of
29 * the GNU Lesser General Public License Version 2 or later (the "LGPLv2+"),
30 * in which case the provisions of the LGPLv2+ are applicable
31 * instead of those above.
32 */
33 
34 /*
35  * Structure to store and construct a table from an unstructured list
36  * of cell
37  *
38  */
39 
40 #ifndef MWAW_TABLE
41 # define MWAW_TABLE
42 
43 #include <iostream>
44 #include <vector>
45 
46 #include "libmwaw_internal.hxx"
47 
48 #include "MWAWCell.hxx"
49 
51 class MWAWTable
52 {
53 public:
55  enum DataSet {
57  };
61  enum Alignment {
63  };
65  explicit MWAWTable(uint32_t givenData=BoxBit) :
66  m_givenData(givenData), m_setData(givenData), m_mergeBorders(true), m_cellsList(),
68  m_posToCellId(), m_hasExtraLines(false) {}
69 
71  virtual ~MWAWTable();
72 
74  void add(shared_ptr<MWAWCell> cell)
75  {
76  if (!cell) {
77  MWAW_DEBUG_MSG(("MWAWTable::add: must be called with a cell\n"));
78  return;
79  }
80  m_cellsList.push_back(cell);
81  }
83  bool mergeBorders() const
84  {
85  return m_mergeBorders;
86  }
88  bool setMergeBorders(bool val)
89  {
90  return m_mergeBorders=val;
91  }
94  void setAlignment(Alignment align, float leftMargin=0, float rightMargin=0)
95  {
96  m_alignment = align;
97  m_leftMargin = leftMargin;
98  m_rightMargin = rightMargin;
99  }
101  int numCells() const
102  {
103  return int(m_cellsList.size());
104  }
106  std::vector<float> const &getRowsSize() const
107  {
108  return m_rowsSize;
109  }
111  void setRowsSize(std::vector<float> const &rSize)
112  {
113  m_rowsSize=rSize;
114  }
116  std::vector<float> const &getColsSize() const
117  {
118  return m_colsSize;
119  }
121  void setColsSize(std::vector<float> const &cSize)
122  {
123  m_colsSize=cSize;
124  }
125 
127  shared_ptr<MWAWCell> get(int id);
128 
130  bool updateTable();
133  {
134  if (!updateTable()) return false;
135  return m_hasExtraLines;
136  }
137 
142  bool sendTable(MWAWListenerPtr listener, bool inFrame=true);
143 
145  bool sendAsText(MWAWListenerPtr listener);
146 
147  // interface with the content listener
148 
150  void addTablePropertiesTo(librevenge::RVNGPropertyList &propList) const;
151 
152 protected:
154  int getCellIdPos(int col, int row) const
155  {
156  if (col<0||col>=int(m_numCols))
157  return -1;
158  if (row<0||row>=int(m_numRows))
159  return -1;
160  return col*int(m_numRows)+row;
161  }
163  bool buildStructures();
165  bool buildDims();
167  bool buildPosToCellId();
169  void sendExtraLines(MWAWListenerPtr listener) const;
170 
171 protected:
173  uint32_t m_givenData;
175  uint32_t m_setData;
179  std::vector<shared_ptr<MWAWCell> > m_cellsList;
181  size_t m_numRows;
183  size_t m_numCols;
185  std::vector<float> m_rowsSize;
187  std::vector<float> m_colsSize;
194 
196  std::vector<int> m_posToCellId;
199 };
200 
201 #endif
202 // vim: set filetype=cpp tabstop=2 shiftwidth=2 cindent autoindent smartindent noexpandtab:

Generated on Tue Mar 1 2016 23:42:51 for libmwaw by doxygen 1.8.4