KD Chart API Documentation  3.1
KDChartRulerAttributes.cpp
Go to the documentation of this file.
1 /****************************************************************************
2 **
3 ** This file is part of the KD Chart library.
4 **
5 ** SPDX-FileCopyrightText: 2001 Klarälvdalens Datakonsult AB, a KDAB Group company <info@kdab.com>
6 **
7 ** SPDX-License-Identifier: MIT
8 **
9 ****************************************************************************/
10 
11 #include "KDChartRulerAttributes.h"
12 
13 #include <limits>
14 
15 #include <QDebug>
16 #include <QPen>
17 
18 #include <KDABLibFakes>
19 
20 #define d d_func()
21 
22 using namespace KDChart;
23 
24 class RulerAttributes::Private
25 {
26  friend class RulerAttributes;
27 
28 public:
29  Private();
30 
31 private:
32  QPen tickMarkPen;
33  QPen majorTickMarkPen;
34  QPen minorTickMarkPen;
35 
36  bool majorTickMarkPenIsSet : 1;
37  bool minorTickMarkPenIsSet : 1;
38 
39  bool showMajorTickMarks : 1;
40  bool showMinorTickMarks : 1;
41 
42  bool showRulerLine : 1;
43 
44  bool majorTickLengthIsSet : 1;
45  bool minorTickLengthIsSet : 1;
46 
47  bool showFirstTick : 1;
48 
49  int labelMargin = -1;
50  int majorTickLength = 3;
51  int minorTickLength = 2;
52 
53  RulerAttributes::TickMarkerPensMap customTickMarkPens;
54 };
55 
56 RulerAttributes::Private::Private()
57  : tickMarkPen(Qt::black)
58  , majorTickMarkPen(Qt::black)
59  , minorTickMarkPen(Qt::black)
60  , majorTickMarkPenIsSet(false)
61  , minorTickMarkPenIsSet(false)
62  , showMajorTickMarks(true)
63  , showMinorTickMarks(true)
64  , showRulerLine(false)
65  , majorTickLengthIsSet(false)
66  , minorTickLengthIsSet(false)
67  , showFirstTick(true)
68 {
69  tickMarkPen.setCapStyle(Qt::FlatCap);
70  majorTickMarkPen.setCapStyle(Qt::FlatCap);
71  minorTickMarkPen.setCapStyle(Qt::FlatCap);
72 }
73 
74 RulerAttributes::RulerAttributes()
75  : _d(new Private())
76 {
77  // this block left empty intentionally
78 }
79 
81  : _d(new Private(*r.d))
82 {
83 }
84 
85 void RulerAttributes::setTickMarkPen(const QPen &pen)
86 {
87  d->tickMarkPen = pen;
88 }
89 
91 {
92  return d->tickMarkPen;
93 }
94 
96 {
97  d->majorTickMarkPen = pen;
98  d->majorTickMarkPenIsSet = true;
99 }
100 
102 {
103  return d->majorTickMarkPenIsSet;
104 }
105 
107 {
108  return d->majorTickMarkPenIsSet ? d->majorTickMarkPen : d->tickMarkPen;
109 }
110 
112 {
113  d->minorTickMarkPen = pen;
114  d->minorTickMarkPenIsSet = true;
115 }
116 
118 {
119  return d->minorTickMarkPenIsSet;
120 }
121 
123 {
124  return d->minorTickMarkPenIsSet ? d->minorTickMarkPen : d->tickMarkPen;
125 }
126 
127 void RulerAttributes::setTickMarkPen(qreal value, const QPen &pen)
128 {
129  if (!d->customTickMarkPens.contains(value))
130  d->customTickMarkPens.insert(value, pen);
131 }
132 
133 QPen RulerAttributes::tickMarkPen(qreal value) const
134 {
135  QMapIterator<qreal, QPen> it(d->customTickMarkPens);
136  while (it.hasNext()) {
137  it.next();
138  if (qAbs(value - it.key()) < std::numeric_limits<float>::epsilon())
139  return it.value();
140  }
141  return d->tickMarkPen;
142 }
143 
145 {
146  return d->customTickMarkPens;
147 }
148 
149 bool RulerAttributes::hasTickMarkPenAt(qreal value) const
150 {
151  QMapIterator<qreal, QPen> it(d->customTickMarkPens);
152  while (it.hasNext()) {
153  it.next();
154  if (qAbs(value - it.key()) < std::numeric_limits<float>::epsilon())
155  return true;
156  }
157  return false;
158 }
159 
160 void RulerAttributes::setTickMarkColor(const QColor &color)
161 {
162  d->tickMarkPen.setColor(color);
163 }
164 
166 {
167  return d->tickMarkPen.color();
168 }
169 
171 {
172  d->showMajorTickMarks = show;
173 }
174 
176 {
177  return d->showMajorTickMarks;
178 }
179 
181 {
182  d->showMinorTickMarks = show;
183 }
184 
186 {
187  return d->showMinorTickMarks;
188 }
189 
191 {
192  d->labelMargin = margin;
193 }
194 
196 {
197  return d->labelMargin;
198 }
199 
201 {
202  d->majorTickLength = length;
203  d->majorTickLengthIsSet = true;
204 }
205 
207 {
208  return d->majorTickLength;
209 }
210 
212 {
213  return d->majorTickLengthIsSet;
214 }
215 
217 {
218  d->minorTickLength = length;
219  d->minorTickLengthIsSet = true;
220 }
221 
223 {
224  return d->minorTickLength;
225 }
226 
228 {
229  return d->minorTickLengthIsSet;
230 }
231 
233 {
234  d->showFirstTick = show;
235 }
236 
238 {
239  return d->showFirstTick;
240 }
241 
243 {
244  if (this == &r)
245  return *this;
246 
247  *d = *r.d;
248 
249  return *this;
250 }
251 
253 {
254  delete _d;
255  _d = nullptr;
256 }
257 
259 {
261  if (!isEqual) {
262  return false;
263  }
264  QMap<qreal, QPen>::ConstIterator it = d->customTickMarkPens.constBegin();
265  QMap<qreal, QPen>::ConstIterator it2 = r.d->customTickMarkPens.constBegin();
266  for (; it != d->customTickMarkPens.constEnd(); ++it, ++it2) {
267  if (it.key() != it2.key() || it.value() != it2.value()) {
268  return false;
269  }
270  }
271  return true;
272 }
273 
275 {
276  d->showRulerLine = show;
277 }
278 
280 {
281  return d->showRulerLine;
282 }
283 
284 #if !defined(QT_NO_DEBUG_STREAM)
285 QDebug operator<<(QDebug dbg, const KDChart::RulerAttributes &a)
286 {
287  dbg << "KDChart::RulerAttributes("
288  << "tickMarkPen=" << a.tickMarkPen()
289  << "majorTickMarkPen=" << a.majorTickMarkPen()
290  << "minorTickMarkPen=" << a.minorTickMarkPen();
292  QMapIterator<qreal, QPen> it(pens);
293  while (it.hasNext()) {
294  it.next();
295  dbg << "customTickMarkPen=(" << it.value() << " : " << it.key() << ")";
296  }
297  dbg << ")";
298  return dbg;
299 }
300 #endif /* QT_NO_DEBUG_STREAM */
#define d
A set of attributes controlling the appearance of axis rulers.
void setTickMarkColor(const QColor &color)
TickMarkerPensMap tickMarkPens() const
bool hasTickMarkPenAt(qreal value) const
bool operator==(const RulerAttributes &) const
void setMajorTickMarkPen(const QPen &pen)
void setMinorTickMarkPen(const QPen &pen)
void setTickMarkPen(const QPen &pen)
RulerAttributes & operator=(const RulerAttributes &)
QDebug operator<<(QDebug stream, const DataDimension &r)

© 2001 Klarälvdalens Datakonsult AB (KDAB)
"The Qt, C++ and OpenGL Experts"
https://www.kdab.com/
https://www.kdab.com/development-resources/qt-tools/kd-chart/
Generated by doxygen 1.9.1