KD Chart API Documentation  3.1
KDChartPosition.h
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 #ifndef KDCHARTPOSITION_H
12 #define KDCHARTPOSITION_H
13 
14 #include "KDChartEnums.h"
15 #include "KDChartGlobal.h"
16 #include <QCoreApplication>
17 #include <QDebug>
18 #include <QMetaType>
19 #include <Qt>
20 #include <QtContainerFwd>
21 
22 QT_BEGIN_NAMESPACE
23 class QByteArray;
24 QT_END_NAMESPACE
25 
26 namespace KDChart {
27 
62 class KDCHART_EXPORT Position
63 {
64  Q_DECLARE_TR_FUNCTIONS(Position)
65  Position(int value);
66 
67 public:
68  Position();
69  Position(KDChartEnums::PositionValue value); // intentionally non-explicit
70 
71  KDChartEnums::PositionValue value() const;
72 
73  const char *name() const;
74  QString printableName() const;
75 
76  bool isUnknown() const;
77 
78  bool isWestSide() const;
79  bool isNorthSide() const;
80  bool isEastSide() const;
81  bool isSouthSide() const;
82 
83  bool isCorner() const;
84  bool isPole() const;
85 
86  bool isFloating() const;
87 
88  static const Position &Unknown;
89  static const Position &Center;
90  static const Position &NorthWest;
91  static const Position &North;
92  static const Position &NorthEast;
93  static const Position &East;
94  static const Position &SouthEast;
95  static const Position &South;
96  static const Position &SouthWest;
97  static const Position &West;
98 
99  static const Position &Floating;
100 
101  // boolean flags: 1, 2, 4, 8, ...
102  enum Option
103  {
104  IncludeCenter = 0x1,
105  IncludeFloating = 0x2
106  };
107  Q_DECLARE_FLAGS(Options, Option)
108 
109  // Unfortunately the following typecast from int to Options is needed
110  // as the | operator is not defined yet, this will be done by
111  // the macro Q_DECLARE_OPERATORS_FOR_FLAGS( KDChart::Position::Options )
112  // at the bottom of this file.
113  static QList<QByteArray> names(Options options = Options(IncludeCenter | IncludeFloating));
114  static QStringList printableNames(Options options = Options(IncludeCenter | IncludeFloating));
115 
116  static Position fromName(const char *name);
117  static Position fromName(const QByteArray &name);
118 
119  bool operator==(const Position &) const;
120  bool operator==(int) const;
121  bool operator!=(const Position &) const;
122  bool operator!=(int) const;
123 
124 private:
125  int m_value = KDChartEnums::PositionUnknown;
126 }; // End of class Position
127 
128 inline bool Position::operator!=(const Position &other) const
129 {
130  return !operator==(other);
131 }
132 inline bool Position::operator!=(int other) const
133 {
134  return !operator==(other);
135 }
136 
141 class KDCHART_EXPORT PositionPoints
142 {
143 public:
145  {
146  } // all points get initialized with the default automatically
147 
149  QPointF center,
150  QPointF northWest,
151  QPointF north,
152  QPointF northEast,
153  QPointF east,
154  QPointF southEast,
155  QPointF south,
156  QPointF southWest,
157  QPointF west)
158  : mPositionCenter(center)
159  , mPositionNorthWest(northWest)
160  , mPositionNorth(north)
161  , mPositionNorthEast(northEast)
162  , mPositionEast(east)
163  , mPositionSouthEast(southEast)
164  , mPositionSouth(south)
165  , mPositionSouthWest(southWest)
166  , mPositionWest(west)
167  {
168  }
170  const QPointF &onePointForAllPositions)
171  : mPositionCenter(onePointForAllPositions)
172  , mPositionNorthWest(onePointForAllPositions)
173  , mPositionNorth(onePointForAllPositions)
174  , mPositionNorthEast(onePointForAllPositions)
175  , mPositionEast(onePointForAllPositions)
176  , mPositionSouthEast(onePointForAllPositions)
177  , mPositionSouth(onePointForAllPositions)
178  , mPositionSouthWest(onePointForAllPositions)
179  , mPositionWest(onePointForAllPositions)
180  {
181  }
183  const QRectF &rect)
184  {
185  const QRectF r(rect.normalized());
186  mPositionCenter = r.center();
187  mPositionNorthWest = r.topLeft();
188  mPositionNorth = QPointF(r.center().x(), r.top());
189  mPositionNorthEast = r.topRight();
190  mPositionEast = QPointF(r.right(), r.center().y());
191  mPositionSouthEast = r.bottomRight();
192  mPositionSouth = QPointF(r.center().x(), r.bottom());
193  mPositionSouthWest = r.bottomLeft();
194  mPositionWest = QPointF(r.left(), r.center().y());
195  }
197  QPointF northWest,
198  QPointF northEast,
199  QPointF southEast,
200  QPointF southWest)
201  : mPositionCenter((northWest + southEast) / 2.0)
202  , mPositionNorthWest(northWest)
203  , mPositionNorth((northWest + northEast) / 2.0)
204  , mPositionNorthEast(northEast)
205  , mPositionEast((northEast + southEast) / 2.0)
206  , mPositionSouthEast(southEast)
207  , mPositionSouth((southWest + southEast) / 2.0)
208  , mPositionSouthWest(southWest)
209  , mPositionWest((northWest + southWest) / 2.0)
210  {
211  }
212 
213  void setDegrees(KDChartEnums::PositionValue pos, qreal degrees)
214  {
215  mapOfDegrees[pos] = degrees;
216  }
217 
218 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) && defined(Q_COMPILER_MANGLES_RETURN_TYPE)
219  const qreal degrees(KDChartEnums::PositionValue pos) const
220 #else
222 #endif
223  {
224  if (mapOfDegrees.contains(pos))
225  return mapOfDegrees[pos];
226  return 0.0;
227  }
228 
229 #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) && defined(Q_COMPILER_MANGLES_RETURN_TYPE)
230  const QPointF point(Position position) const
231 #else
232  QPointF point(Position position) const
233 #endif
234  {
235  // qDebug() << "point( " << position.name() << " )";
236  if (position == Position::Center)
237  return mPositionCenter;
238  if (position == Position::NorthWest)
239  return mPositionNorthWest;
240  if (position == Position::North)
241  return mPositionNorth;
242  if (position == Position::NorthEast)
243  return mPositionNorthEast;
244  if (position == Position::East)
245  return mPositionEast;
246  if (position == Position::SouthEast)
247  return mPositionSouthEast;
248  if (position == Position::South)
249  return mPositionSouth;
250  if (position == Position::SouthWest)
251  return mPositionSouthWest;
252  if (position == Position::West)
253  return mPositionWest;
254  return mPositionUnknown;
255  }
256 
257  bool isNull() const
258  {
259  return mPositionUnknown.isNull() && mPositionCenter.isNull() && mPositionNorthWest.isNull() && mPositionNorth.isNull() && mPositionNorthEast.isNull() && mPositionEast.isNull() && mPositionSouthEast.isNull() && mPositionSouth.isNull() && mPositionSouthWest.isNull() && mPositionWest.isNull();
260  }
261 
265  QPointF mPositionNorth;
267  QPointF mPositionEast;
269  QPointF mPositionSouth;
271  QPointF mPositionWest;
273 
274 }; // End of class PositionPoints
275 }
276 
277 #if !defined(QT_NO_DEBUG_STREAM)
278 KDCHART_EXPORT QDebug operator<<(QDebug, const KDChart::Position &);
279 #endif /* QT_NO_DEBUG_STREAM */
280 
281 QT_BEGIN_NAMESPACE
283 Q_DECLARE_OPERATORS_FOR_FLAGS(KDChart::Position::Options)
284 QT_END_NAMESPACE
285 
286 Q_DECLARE_METATYPE(KDChart::Position)
287 
288 #endif // KDCHARTPOSITION_H
Definition of global enums.
Contains KDChart macros.
QT_BEGIN_NAMESPACE Q_DECLARE_TYPEINFO(KDChart::Position, Q_MOVABLE_TYPE)
KDCHART_EXPORT QDebug operator<<(QDebug, const KDChart::Position &)
Stores the absolute target points of a Position.
PositionPoints(const QRectF &rect)
PositionPoints(const QPointF &onePointForAllPositions)
void setDegrees(KDChartEnums::PositionValue pos, qreal degrees)
PositionPoints(QPointF center, QPointF northWest, QPointF north, QPointF northEast, QPointF east, QPointF southEast, QPointF south, QPointF southWest, QPointF west)
qreal degrees(KDChartEnums::PositionValue pos) const
QMap< KDChartEnums::PositionValue, qreal > mapOfDegrees
QPointF point(Position position) const
PositionPoints(QPointF northWest, QPointF northEast, QPointF southEast, QPointF southWest)
Defines a position, using compass terminology.
bool operator!=(const Position &) const
static const Position & West
static const Position & South
bool operator==(const Position &) const
static const Position & Floating
static const Position & North
static const Position & SouthWest
static const Position & NorthEast
static const Position & NorthWest
static const Position & SouthEast
static const Position & East
static const Position & Center
static const Position & Unknown
bool operator==(const TickInfo &, const TickInfo &)
bool operator!=(const Span &s1, const Span &s2)

© 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