33 #include "lineending.h"
39 class QCPAxisPainterPrivate;
48 Q_PROPERTY(
bool subGridVisible READ subGridVisible WRITE setSubGridVisible)
49 Q_PROPERTY(
bool antialiasedSubGrid READ antialiasedSubGrid WRITE setAntialiasedSubGrid)
50 Q_PROPERTY(
bool antialiasedZeroLine READ antialiasedZeroLine WRITE setAntialiasedZeroLine)
51 Q_PROPERTY(QPen pen READ pen WRITE setPen)
52 Q_PROPERTY(QPen subGridPen READ subGridPen WRITE setSubGridPen)
53 Q_PROPERTY(QPen zeroLinePen READ zeroLinePen WRITE setZeroLinePen)
59 bool subGridVisible()
const {
return mSubGridVisible; }
60 bool antialiasedSubGrid()
const {
return mAntialiasedSubGrid; }
61 bool antialiasedZeroLine()
const {
return mAntialiasedZeroLine; }
62 QPen pen()
const {
return mPen; }
63 QPen subGridPen()
const {
return mSubGridPen; }
64 QPen zeroLinePen()
const {
return mZeroLinePen; }
67 void setSubGridVisible(
bool visible);
68 void setAntialiasedSubGrid(
bool enabled);
69 void setAntialiasedZeroLine(
bool enabled);
70 void setPen(
const QPen &pen);
71 void setSubGridPen(
const QPen &pen);
72 void setZeroLinePen(
const QPen &pen);
77 bool mAntialiasedSubGrid, mAntialiasedZeroLine;
78 QPen mPen, mSubGridPen, mZeroLinePen;
88 void drawSubGridLines(
QCPPainter *painter)
const;
98 Q_PROPERTY(
AxisType axisType READ axisType)
100 Q_PROPERTY(
ScaleType scaleType READ scaleType WRITE setScaleType NOTIFY scaleTypeChanged)
101 Q_PROPERTY(
double scaleLogBase READ scaleLogBase WRITE setScaleLogBase)
102 Q_PROPERTY(
QCPRange range READ range WRITE setRange NOTIFY rangeChanged)
103 Q_PROPERTY(
bool rangeReversed READ rangeReversed WRITE setRangeReversed)
104 Q_PROPERTY(
bool autoTicks READ autoTicks WRITE setAutoTicks)
105 Q_PROPERTY(
int autoTickCount READ autoTickCount WRITE setAutoTickCount)
106 Q_PROPERTY(
bool autoTickLabels READ autoTickLabels WRITE setAutoTickLabels)
107 Q_PROPERTY(
bool autoTickStep READ autoTickStep WRITE setAutoTickStep)
108 Q_PROPERTY(
bool autoSubTicks READ autoSubTicks WRITE setAutoSubTicks)
109 Q_PROPERTY(
bool ticks READ ticks WRITE setTicks)
110 Q_PROPERTY(
bool tickLabels READ tickLabels WRITE setTickLabels)
111 Q_PROPERTY(
int tickLabelPadding READ tickLabelPadding WRITE setTickLabelPadding)
112 Q_PROPERTY(
LabelType tickLabelType READ tickLabelType WRITE setTickLabelType)
113 Q_PROPERTY(QFont tickLabelFont READ tickLabelFont WRITE setTickLabelFont)
114 Q_PROPERTY(QColor tickLabelColor READ tickLabelColor WRITE setTickLabelColor)
115 Q_PROPERTY(
double tickLabelRotation READ tickLabelRotation WRITE setTickLabelRotation)
116 Q_PROPERTY(
LabelSide tickLabelSide READ tickLabelSide WRITE setTickLabelSide)
117 Q_PROPERTY(QString dateTimeFormat READ dateTimeFormat WRITE setDateTimeFormat)
118 Q_PROPERTY(Qt::TimeSpec dateTimeSpec READ dateTimeSpec WRITE setDateTimeSpec)
119 Q_PROPERTY(QString numberFormat READ numberFormat WRITE setNumberFormat)
120 Q_PROPERTY(
int numberPrecision READ numberPrecision WRITE setNumberPrecision)
121 Q_PROPERTY(
double tickStep READ tickStep WRITE setTickStep)
122 Q_PROPERTY(QVector<double> tickVector READ tickVector WRITE setTickVector)
123 Q_PROPERTY(QVector<QString> tickVectorLabels READ tickVectorLabels WRITE setTickVectorLabels)
124 Q_PROPERTY(
int tickLengthIn READ tickLengthIn WRITE setTickLengthIn)
125 Q_PROPERTY(
int tickLengthOut READ tickLengthOut WRITE setTickLengthOut)
126 Q_PROPERTY(
int subTickCount READ subTickCount WRITE setSubTickCount)
127 Q_PROPERTY(
int subTickLengthIn READ subTickLengthIn WRITE setSubTickLengthIn)
128 Q_PROPERTY(
int subTickLengthOut READ subTickLengthOut WRITE setSubTickLengthOut)
129 Q_PROPERTY(QPen basePen READ basePen WRITE setBasePen)
130 Q_PROPERTY(QPen tickPen READ tickPen WRITE setTickPen)
131 Q_PROPERTY(QPen subTickPen READ subTickPen WRITE setSubTickPen)
132 Q_PROPERTY(QFont labelFont READ labelFont WRITE setLabelFont)
133 Q_PROPERTY(QColor labelColor READ labelColor WRITE setLabelColor)
134 Q_PROPERTY(QString label READ label WRITE setLabel)
135 Q_PROPERTY(
int labelPadding READ labelPadding WRITE setLabelPadding)
136 Q_PROPERTY(
int padding READ padding WRITE setPadding)
137 Q_PROPERTY(
int offset READ offset WRITE setOffset)
138 Q_PROPERTY(SelectableParts selectedParts READ selectedParts WRITE setSelectedParts NOTIFY selectionChanged)
139 Q_PROPERTY(SelectableParts selectableParts READ selectableParts WRITE setSelectableParts NOTIFY selectableChanged)
140 Q_PROPERTY(QFont selectedTickLabelFont READ selectedTickLabelFont WRITE setSelectedTickLabelFont)
141 Q_PROPERTY(QFont selectedLabelFont READ selectedLabelFont WRITE setSelectedLabelFont)
142 Q_PROPERTY(QColor selectedTickLabelColor READ selectedTickLabelColor WRITE setSelectedTickLabelColor)
143 Q_PROPERTY(QColor selectedLabelColor READ selectedLabelColor WRITE setSelectedLabelColor)
144 Q_PROPERTY(QPen selectedBasePen READ selectedBasePen WRITE setSelectedBasePen)
145 Q_PROPERTY(QPen selectedTickPen READ selectedTickPen WRITE setSelectedTickPen)
146 Q_PROPERTY(QPen selectedSubTickPen READ selectedSubTickPen WRITE setSelectedSubTickPen)
147 Q_PROPERTY(
QCPLineEnding lowerEnding READ lowerEnding WRITE setLowerEnding)
148 Q_PROPERTY(
QCPLineEnding upperEnding READ upperEnding WRITE setUpperEnding)
149 Q_PROPERTY(
QCPGrid* grid READ grid)
161 Q_FLAGS(AxisType AxisTypes)
162 Q_DECLARE_FLAGS(AxisTypes, AxisType)
196 ,spTickLabels = 0x002
199 Q_FLAGS(SelectablePart SelectableParts)
200 Q_DECLARE_FLAGS(SelectableParts, SelectablePart)
206 AxisType axisType()
const {
return mAxisType; }
207 QCPAxisRect *axisRect()
const {
return mAxisRect; }
208 ScaleType scaleType()
const {
return mScaleType; }
209 double scaleLogBase()
const {
return mScaleLogBase; }
210 const QCPRange range()
const {
return mRange; }
211 bool rangeReversed()
const {
return mRangeReversed; }
212 bool autoTicks()
const {
return mAutoTicks; }
213 int autoTickCount()
const {
return mAutoTickCount; }
214 bool autoTickLabels()
const {
return mAutoTickLabels; }
215 bool autoTickStep()
const {
return mAutoTickStep; }
216 bool autoSubTicks()
const {
return mAutoSubTicks; }
217 bool ticks()
const {
return mTicks; }
218 bool tickLabels()
const {
return mTickLabels; }
219 int tickLabelPadding()
const;
220 LabelType tickLabelType()
const {
return mTickLabelType; }
221 QFont tickLabelFont()
const {
return mTickLabelFont; }
222 QColor tickLabelColor()
const {
return mTickLabelColor; }
223 double tickLabelRotation()
const;
224 LabelSide tickLabelSide()
const;
225 QString dateTimeFormat()
const {
return mDateTimeFormat; }
226 Qt::TimeSpec dateTimeSpec()
const {
return mDateTimeSpec; }
227 QString numberFormat()
const;
228 int numberPrecision()
const {
return mNumberPrecision; }
229 double tickStep()
const {
return mTickStep; }
230 QVector<double> tickVector()
const {
return mTickVector; }
231 QVector<QString> tickVectorLabels()
const {
return mTickVectorLabels; }
232 int tickLengthIn()
const;
233 int tickLengthOut()
const;
234 int subTickCount()
const {
return mSubTickCount; }
235 int subTickLengthIn()
const;
236 int subTickLengthOut()
const;
237 QPen basePen()
const {
return mBasePen; }
238 QPen tickPen()
const {
return mTickPen; }
239 QPen subTickPen()
const {
return mSubTickPen; }
240 QFont labelFont()
const {
return mLabelFont; }
241 QColor labelColor()
const {
return mLabelColor; }
242 QString label()
const {
return mLabel; }
243 int labelPadding()
const;
244 int padding()
const {
return mPadding; }
246 SelectableParts selectedParts()
const {
return mSelectedParts; }
247 SelectableParts selectableParts()
const {
return mSelectableParts; }
248 QFont selectedTickLabelFont()
const {
return mSelectedTickLabelFont; }
249 QFont selectedLabelFont()
const {
return mSelectedLabelFont; }
250 QColor selectedTickLabelColor()
const {
return mSelectedTickLabelColor; }
251 QColor selectedLabelColor()
const {
return mSelectedLabelColor; }
252 QPen selectedBasePen()
const {
return mSelectedBasePen; }
253 QPen selectedTickPen()
const {
return mSelectedTickPen; }
254 QPen selectedSubTickPen()
const {
return mSelectedSubTickPen; }
261 void setScaleLogBase(
double base);
262 Q_SLOT
void setRange(
const QCPRange &range);
263 void setRange(
double lower,
double upper);
264 void setRange(
double position,
double size, Qt::AlignmentFlag alignment);
265 void setRangeLower(
double lower);
266 void setRangeUpper(
double upper);
267 void setRangeReversed(
bool reversed);
268 void setAutoTicks(
bool on);
269 void setAutoTickCount(
int approximateCount);
270 void setAutoTickLabels(
bool on);
271 void setAutoTickStep(
bool on);
272 void setAutoSubTicks(
bool on);
273 void setTicks(
bool show);
274 void setTickLabels(
bool show);
275 void setTickLabelPadding(
int padding);
276 void setTickLabelType(LabelType type);
277 void setTickLabelFont(
const QFont &font);
278 void setTickLabelColor(
const QColor &color);
279 void setTickLabelRotation(
double degrees);
280 void setTickLabelSide(LabelSide side);
281 void setDateTimeFormat(
const QString &format);
282 void setDateTimeSpec(
const Qt::TimeSpec &timeSpec);
283 void setNumberFormat(
const QString &formatCode);
284 void setNumberPrecision(
int precision);
285 void setTickStep(
double step);
286 void setTickVector(
const QVector<double> &vec);
287 void setTickVectorLabels(
const QVector<QString> &vec);
288 void setTickLength(
int inside,
int outside=0);
289 void setTickLengthIn(
int inside);
290 void setTickLengthOut(
int outside);
291 void setSubTickCount(
int count);
292 void setSubTickLength(
int inside,
int outside=0);
293 void setSubTickLengthIn(
int inside);
294 void setSubTickLengthOut(
int outside);
295 void setBasePen(
const QPen &pen);
296 void setTickPen(
const QPen &pen);
297 void setSubTickPen(
const QPen &pen);
298 void setLabelFont(
const QFont &font);
299 void setLabelColor(
const QColor &color);
300 void setLabel(
const QString &str);
301 void setLabelPadding(
int padding);
302 void setPadding(
int padding);
303 void setOffset(
int offset);
304 void setSelectedTickLabelFont(
const QFont &font);
305 void setSelectedLabelFont(
const QFont &font);
306 void setSelectedTickLabelColor(
const QColor &color);
307 void setSelectedLabelColor(
const QColor &color);
308 void setSelectedBasePen(
const QPen &pen);
309 void setSelectedTickPen(
const QPen &pen);
310 void setSelectedSubTickPen(
const QPen &pen);
311 Q_SLOT
void setSelectableParts(
const QCPAxis::SelectableParts &selectableParts);
312 Q_SLOT
void setSelectedParts(
const QCPAxis::SelectableParts &selectedParts);
317 virtual double selectTest(
const QPointF &pos,
bool onlySelectable, QVariant *details=0)
const;
321 void moveRange(
double diff);
322 void scaleRange(
double factor,
double center);
323 void setScaleRatio(
const QCPAxis *otherAxis,
double ratio=1.0);
324 void rescale(
bool onlyVisiblePlottables=
false);
325 double pixelToCoord(
double value)
const;
326 double coordToPixel(
double value)
const;
327 SelectablePart getPartAt(
const QPointF &pos)
const;
328 QList<QCPAbstractPlottable*> plottables()
const;
329 QList<QCPGraph*> graphs()
const;
330 QList<QCPAbstractItem*> items()
const;
333 static Qt::Orientation
orientation(
AxisType type) {
return type==atBottom||type==atTop ? Qt::Horizontal : Qt::Vertical; }
334 static AxisType opposite(AxisType type);
338 void rangeChanged(
const QCPRange &newRange);
341 void selectionChanged(
const QCPAxis::SelectableParts &parts);
342 void selectableChanged(
const QCPAxis::SelectableParts &parts);
351 Qt::Orientation mOrientation;
352 SelectableParts mSelectableParts, mSelectedParts;
353 QPen mBasePen, mSelectedBasePen;
358 QFont mLabelFont, mSelectedLabelFont;
359 QColor mLabelColor, mSelectedLabelColor;
362 bool mTickLabels, mAutoTickLabels;
364 LabelType mTickLabelType;
365 QFont mTickLabelFont, mSelectedTickLabelFont;
366 QColor mTickLabelColor, mSelectedTickLabelColor;
367 QString mDateTimeFormat;
368 Qt::TimeSpec mDateTimeSpec;
369 int mNumberPrecision;
370 char mNumberFormatChar;
371 bool mNumberBeautifulPowers;
376 int mSubTickCount, mAutoTickCount;
377 bool mAutoTicks, mAutoTickStep, mAutoSubTicks;
379 QPen mTickPen, mSelectedTickPen;
380 QPen mSubTickPen, mSelectedSubTickPen;
384 ScaleType mScaleType;
385 double mScaleLogBase, mScaleLogBaseLogInv;
389 QCPAxisPainterPrivate *mAxisPainter;
390 int mLowestVisibleTick, mHighestVisibleTick;
391 QVector<double> mTickVector;
392 QVector<QString> mTickVectorLabels;
393 QVector<double> mSubTickVector;
394 bool mCachedMarginValid;
398 virtual void setupTickVectors();
399 virtual void generateAutoTicks();
400 virtual int calculateAutoSubTickCount(
double tickStep)
const;
401 virtual int calculateMargin();
408 virtual void selectEvent(QMouseEvent *event,
bool additive,
const QVariant &details,
bool *selectionStateChanged);
412 void visibleTickBounds(
int &lowIndex,
int &highIndex)
const;
413 double baseLog(
double value)
const;
414 double basePow(
double value)
const;
415 QPen getBasePen()
const;
416 QPen getTickPen()
const;
417 QPen getSubTickPen()
const;
418 QFont getTickLabelFont()
const;
419 QFont getLabelFont()
const;
420 QColor getTickLabelColor()
const;
421 QColor getLabelColor()
const;
430 Q_DECLARE_OPERATORS_FOR_FLAGS(
QCPAxis::SelectableParts)
431 Q_DECLARE_OPERATORS_FOR_FLAGS(
QCPAxis::AxisTypes)
432 Q_DECLARE_METATYPE(
QCPAxis::SelectablePart)
435 class QCPAxisPainterPrivate
438 explicit QCPAxisPainterPrivate(QCustomPlot *parentPlot);
439 virtual ~QCPAxisPainterPrivate();
442 virtual int size()
const;
445 QRect axisSelectionBox()
const {
return mAxisSelectionBox; }
446 QRect tickLabelsSelectionBox()
const {
return mTickLabelsSelectionBox; }
447 QRect labelSelectionBox()
const {
return mLabelSelectionBox; }
457 int tickLabelPadding;
458 double tickLabelRotation;
460 bool substituteExponent;
461 bool numberMultiplyCross;
462 int tickLengthIn, tickLengthOut, subTickLengthIn, subTickLengthOut;
463 QPen tickPen, subTickPen;
465 QColor tickLabelColor;
466 QRect axisRect, viewportRect;
468 bool abbreviateDecimalPowers;
469 bool reversedEndings;
471 QVector<double> subTickPositions;
472 QVector<double> tickPositions;
473 QVector<QString> tickLabels;
483 QString basePart, expPart;
484 QRect baseBounds, expBounds, totalBounds, rotatedTotalBounds;
485 QFont baseFont, expFont;
487 QCustomPlot *mParentPlot;
488 QByteArray mLabelParameterHash;
489 QCache<QString, CachedLabel> mLabelCache;
490 QRect mAxisSelectionBox, mTickLabelsSelectionBox, mLabelSelectionBox;
492 virtual QByteArray generateLabelParameterHash()
const;
494 virtual void placeTickLabel(
QCPPainter *painter,
double position,
int distanceToAxis,
const QString &text, QSize *tickLabelsSize);
495 virtual void drawTickLabel(
QCPPainter *painter,
double x,
double y,
const TickLabelData &labelData)
const;
496 virtual TickLabelData getTickLabelData(
const QFont &font,
const QString &text)
const;
497 virtual QPointF getTickLabelDrawOffset(
const TickLabelData &labelData)
const;
498 virtual void getMaxTickLabelSize(
const QFont &font,
const QString &text, QSize *tickLabelsSize)
const;