KReport

KReportSection.cpp
1 /* This file is part of the KDE project
2  * Copyright (C) 2001-2007 by OpenMFG, LLC ([email protected])
3  * Copyright (C) 2007-2008 by Adam Pigg ([email protected])
4  * Copyright (C) 2010-2015 JarosÅ‚aw Staniek <[email protected]>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #include "KReportSection.h"
21 #include "KReportDesign_p.h"
22 #include "KReportDocument.h"
23 #include "KReportPluginInterface.h"
24 #include "KReportPluginManager.h"
25 #include "KReportItemLine.h"
26 #include "kreport_debug.h"
27 
28 #if 0 // needed by lupdate to avoid "Qualifying with unknown namespace/class"
29 class KReportSection { Q_DECLARE_TR_FUNCTIONS(KReportSection) };
30 #endif
31 
32 #if 0
33 KReportSection::KReportSection(const QDomElement & elemSource, KReportReportData* report)
34  : QObject(report)
35 {
36  setObjectName(elemSource.tagName());
37 
38  if (objectName() != QLatin1String("report:section")) {
39  m_valid = false;
40  return;
41  }
42 
43  m_type = sectionTypeFromString(KReportUtils::readSectionTypeNameAttribute(elemSource));
44  if (m_type == KReportSection::None) {
45  m_valid = false;
46  return;
47  }
48  createProperties(elemSource);
49 
50  m_backgroundColor->setValue(QColor(elemSource.attribute(QLatin1String("fo:background-color"))));
51 
52  KReportPluginManager* manager = KReportPluginManager::self();
53 
54  QDomNodeList section = elemSource.childNodes();
55  for (int nodeCounter = 0; nodeCounter < section.count(); nodeCounter++) {
56  QDomElement elemThis = section.item(nodeCounter).toElement();
57  QString n = elemThis.tagName();
58  if (n.startsWith(QLatin1String("report:"))) {
59  QString reportItemName = n.mid(qstrlen("report:"));
60  if (reportItemName == QLatin1String("line")) {
61  KReportItemLine * line = new KReportItemLine(elemThis);
62  m_objects.append(line);
63  continue;
64  }
65  KReportPluginInterface *plugin = manager->plugin(reportItemName);
66  if (plugin) {
67  QObject *obj = plugin->createRendererInstance(elemThis);
68  if (obj) {
69  KReportItemBase *krobj = dynamic_cast<KReportItemBase*>(obj);
70  if (krobj) {
71  m_objects.append(krobj);
72  }
73  continue;
74  }
75  }
76  }
77  kreportWarning() << "While parsing section encountered an unknown element: " << n;
78  }
79  std::sort(m_objects.begin(), m_objects.end(), zLessThan);
80  m_valid = true;
81 }
82 bool KReportSection::zLessThan(KReportItemBase* s1, KReportItemBase* s2)
83 {
84  return s1->Z < s2->Z;
85 }
86 
87 bool KReportSection::xLessThan(KReportItemBase* s1, KReportItemBase* s2)
88 {
89  return s1->position().toPoint().x() < s2->position().toPoint().x();
90 }
91 
92 #endif
93 
94 KReportSection::~KReportSection()
95 {
96 }
97 
98 qreal KReportSection::height() const
99 {
100  return d->height >= 0.0 ? d->height : KReportSection::defaultHeight();
101 }
102 
104 {
105  return d->backgroundColor.isValid() ? d->backgroundColor : KReportSection::defaultBackgroundColor();
106 }
107 
109 {
110  return d->elements;
111 }
112 
114 {
115  if (d->elementsSet.contains(element)) {
116  kreportWarning() << "Section already contains element" << element;
117  return false;
118  }
119  d->elements.append(element);
120  d->elementsSet.insert(element);
121  return true;
122 }
123 
125 {
126  if (i < 0 || i > d->elements.count()) {
127  kreportWarning() << "Could not insert element" << element << "at index" << i << "into section";
128  return false;
129  }
130  if (d->elementsSet.contains(element)) {
131  kreportWarning() << "Section already contains element" << element;
132  return false;
133  }
134  d->elements.insert(i, element);
135  d->elementsSet.insert(element);
136  return true;
137 }
138 
140 {
141  if (!d->elementsSet.remove(element)) {
142  kreportWarning() << "Could not find element" << element << "in section";
143  return false;
144  }
145  if (!d->elements.removeOne(element)) {
146  kreportCritical() << "Could not find element" << element << "in section's list but found in section's set";
147  return false;
148  }
149  return true;
150 }
151 
153 {
154  if (i < 0 || i > (d->elements.count() - 1)) {
155  kreportWarning() << "Could not find element at index" << i << "in section";
156  return false;
157  }
158  KReportElement e = d->elements.takeAt(i);
159  if (!d->elementsSet.remove(e)) {
160  kreportWarning() << "Could not find element" << e << "in section";
161  return false;
162  }
163  return true;
164 }
165 
166 KReportSection::Data* KReportSection::Data::clone() const
167 {
168  Data *data = new Data(*this);
169  data->elements.clear();
170  KReportElement eClone;
171  foreach(const KReportElement &el, elements) {
172  eClone = el.clone();
173  data->elements.append(eClone);
174  data->elementsSet.insert(eClone);
175  }
176  return data;
177 }
178 
179 //static
181 {
182  return KReportDesignGlobal::self()->defaultSectionHeight;
183 }
184 
185 //static
187 {
188  KReportDesignGlobal::self()->defaultSectionHeight = ptHeight;
189 }
190 
191 //static
193 {
194  return KReportDesignGlobal::self()->defaultSectionBackgroundColor;
195 }
196 
197 //static
199 {
200  KReportDesignGlobal::self()->defaultSectionBackgroundColor = color;
201 }
bool removeElementAt(int i)
Removes element from index position i from this section.
QList< KReportElement > elements
Base class for items that are drawn syncronously.
int count() const const
static void setDefaultBackgroundColor(const QColor &color)
Sets default background color for report sections.
The KReportSection class represents a section of a report design.
QDomElement toElement() const const
bool removeElement(const KReportElement &element)
Removes element element from this section.
QString tagName() const const
static QColor defaultBackgroundColor()
int x() const const
Manager class for finding and loading available plugins.
QDomNode item(int index) const const
static qreal defaultHeight()
QPointF position() const
Return the position in points.
QDomNodeList childNodes() const const
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const const
bool addElement(const KReportElement &element)
Adds element element to this section.
void setObjectName(const QString &name)
static void setDefaultHeight(qreal height)
Sets default height for report sections in points.
QPoint toPoint() const const
bool insertElement(int i, const KReportElement &element)
Adds element element to this section at index position i.
virtual QObject * createRendererInstance(const QDomNode &element)=0
bool isValid() const const
The KReportElement class represents a functional visual element of a report design.
QString attribute(const QString &name, const QString &defValue) const const
QString mid(int position, int n) const const
An interface for plugins delivering KReport elements.
This file is part of the KDE documentation.
Documentation copyright © 1996-2023 The KDE developers.
Generated on Tue Feb 7 2023 04:17:37 by doxygen 1.8.17 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.