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(QString dateTimeFormat READ dateTimeFormat WRITE setDateTimeFormat)
117 Q_PROPERTY(Qt::TimeSpec dateTimeSpec READ dateTimeSpec WRITE setDateTimeSpec)
118 Q_PROPERTY(QString numberFormat READ numberFormat WRITE setNumberFormat)
119 Q_PROPERTY(
int numberPrecision READ numberPrecision WRITE setNumberPrecision)
120 Q_PROPERTY(
double tickStep READ tickStep WRITE setTickStep)
121 Q_PROPERTY(QVector<double> tickVector READ tickVector WRITE setTickVector)
122 Q_PROPERTY(QVector<QString> tickVectorLabels READ tickVectorLabels WRITE setTickVectorLabels)
123 Q_PROPERTY(
int tickLengthIn READ tickLengthIn WRITE setTickLengthIn)
124 Q_PROPERTY(
int tickLengthOut READ tickLengthOut WRITE setTickLengthOut)
125 Q_PROPERTY(
int subTickCount READ subTickCount WRITE setSubTickCount)
126 Q_PROPERTY(
int subTickLengthIn READ subTickLengthIn WRITE setSubTickLengthIn)
127 Q_PROPERTY(
int subTickLengthOut READ subTickLengthOut WRITE setSubTickLengthOut)
128 Q_PROPERTY(QPen basePen READ basePen WRITE setBasePen)
129 Q_PROPERTY(QPen tickPen READ tickPen WRITE setTickPen)
130 Q_PROPERTY(QPen subTickPen READ subTickPen WRITE setSubTickPen)
131 Q_PROPERTY(QFont labelFont READ labelFont WRITE setLabelFont)
132 Q_PROPERTY(QColor labelColor READ labelColor WRITE setLabelColor)
133 Q_PROPERTY(QString label READ label WRITE setLabel)
134 Q_PROPERTY(
int labelPadding READ labelPadding WRITE setLabelPadding)
135 Q_PROPERTY(
int padding READ padding WRITE setPadding)
136 Q_PROPERTY(
int offset READ offset WRITE setOffset)
137 Q_PROPERTY(SelectableParts selectedParts READ selectedParts WRITE setSelectedParts NOTIFY selectionChanged)
138 Q_PROPERTY(SelectableParts selectableParts READ selectableParts WRITE setSelectableParts NOTIFY selectableChanged)
139 Q_PROPERTY(QFont selectedTickLabelFont READ selectedTickLabelFont WRITE setSelectedTickLabelFont)
140 Q_PROPERTY(QFont selectedLabelFont READ selectedLabelFont WRITE setSelectedLabelFont)
141 Q_PROPERTY(QColor selectedTickLabelColor READ selectedTickLabelColor WRITE setSelectedTickLabelColor)
142 Q_PROPERTY(QColor selectedLabelColor READ selectedLabelColor WRITE setSelectedLabelColor)
143 Q_PROPERTY(QPen selectedBasePen READ selectedBasePen WRITE setSelectedBasePen)
144 Q_PROPERTY(QPen selectedTickPen READ selectedTickPen WRITE setSelectedTickPen)
145 Q_PROPERTY(QPen selectedSubTickPen READ selectedSubTickPen WRITE setSelectedSubTickPen)
146 Q_PROPERTY(
QCPLineEnding lowerEnding READ lowerEnding WRITE setLowerEnding)
147 Q_PROPERTY(
QCPLineEnding upperEnding READ upperEnding WRITE setUpperEnding)
148 Q_PROPERTY(
QCPGrid* grid READ grid)
160 Q_FLAGS(AxisType AxisTypes)
161 Q_DECLARE_FLAGS(AxisTypes, AxisType)
186 ,spTickLabels = 0x002
189 Q_FLAGS(SelectablePart SelectableParts)
190 Q_DECLARE_FLAGS(SelectableParts, SelectablePart)
196 AxisType axisType()
const {
return mAxisType; }
197 QCPAxisRect *axisRect()
const {
return mAxisRect; }
198 ScaleType scaleType()
const {
return mScaleType; }
199 double scaleLogBase()
const {
return mScaleLogBase; }
200 const QCPRange range()
const {
return mRange; }
201 bool rangeReversed()
const {
return mRangeReversed; }
202 bool autoTicks()
const {
return mAutoTicks; }
203 int autoTickCount()
const {
return mAutoTickCount; }
204 bool autoTickLabels()
const {
return mAutoTickLabels; }
205 bool autoTickStep()
const {
return mAutoTickStep; }
206 bool autoSubTicks()
const {
return mAutoSubTicks; }
207 bool ticks()
const {
return mTicks; }
208 bool tickLabels()
const {
return mTickLabels; }
209 int tickLabelPadding()
const;
210 LabelType tickLabelType()
const {
return mTickLabelType; }
211 QFont tickLabelFont()
const {
return mTickLabelFont; }
212 QColor tickLabelColor()
const {
return mTickLabelColor; }
213 double tickLabelRotation()
const;
214 QString dateTimeFormat()
const {
return mDateTimeFormat; }
215 Qt::TimeSpec dateTimeSpec()
const {
return mDateTimeSpec; }
216 QString numberFormat()
const;
217 int numberPrecision()
const {
return mNumberPrecision; }
218 double tickStep()
const {
return mTickStep; }
219 QVector<double> tickVector()
const {
return mTickVector; }
220 QVector<QString> tickVectorLabels()
const {
return mTickVectorLabels; }
221 int tickLengthIn()
const;
222 int tickLengthOut()
const;
223 int subTickCount()
const {
return mSubTickCount; }
224 int subTickLengthIn()
const;
225 int subTickLengthOut()
const;
226 QPen basePen()
const {
return mBasePen; }
227 QPen tickPen()
const {
return mTickPen; }
228 QPen subTickPen()
const {
return mSubTickPen; }
229 QFont labelFont()
const {
return mLabelFont; }
230 QColor labelColor()
const {
return mLabelColor; }
231 QString label()
const {
return mLabel; }
232 int labelPadding()
const;
233 int padding()
const {
return mPadding; }
235 SelectableParts selectedParts()
const {
return mSelectedParts; }
236 SelectableParts selectableParts()
const {
return mSelectableParts; }
237 QFont selectedTickLabelFont()
const {
return mSelectedTickLabelFont; }
238 QFont selectedLabelFont()
const {
return mSelectedLabelFont; }
239 QColor selectedTickLabelColor()
const {
return mSelectedTickLabelColor; }
240 QColor selectedLabelColor()
const {
return mSelectedLabelColor; }
241 QPen selectedBasePen()
const {
return mSelectedBasePen; }
242 QPen selectedTickPen()
const {
return mSelectedTickPen; }
243 QPen selectedSubTickPen()
const {
return mSelectedSubTickPen; }
250 void setScaleLogBase(
double base);
251 Q_SLOT
void setRange(
const QCPRange &range);
252 void setRange(
double lower,
double upper);
253 void setRange(
double position,
double size, Qt::AlignmentFlag alignment);
254 void setRangeLower(
double lower);
255 void setRangeUpper(
double upper);
256 void setRangeReversed(
bool reversed);
257 void setAutoTicks(
bool on);
258 void setAutoTickCount(
int approximateCount);
259 void setAutoTickLabels(
bool on);
260 void setAutoTickStep(
bool on);
261 void setAutoSubTicks(
bool on);
262 void setTicks(
bool show);
263 void setTickLabels(
bool show);
264 void setTickLabelPadding(
int padding);
265 void setTickLabelType(LabelType type);
266 void setTickLabelFont(
const QFont &font);
267 void setTickLabelColor(
const QColor &color);
268 void setTickLabelRotation(
double degrees);
269 void setDateTimeFormat(
const QString &format);
270 void setDateTimeSpec(
const Qt::TimeSpec &timeSpec);
271 void setNumberFormat(
const QString &formatCode);
272 void setNumberPrecision(
int precision);
273 void setTickStep(
double step);
274 void setTickVector(
const QVector<double> &vec);
275 void setTickVectorLabels(
const QVector<QString> &vec);
276 void setTickLength(
int inside,
int outside=0);
277 void setTickLengthIn(
int inside);
278 void setTickLengthOut(
int outside);
279 void setSubTickCount(
int count);
280 void setSubTickLength(
int inside,
int outside=0);
281 void setSubTickLengthIn(
int inside);
282 void setSubTickLengthOut(
int outside);
283 void setBasePen(
const QPen &pen);
284 void setTickPen(
const QPen &pen);
285 void setSubTickPen(
const QPen &pen);
286 void setLabelFont(
const QFont &font);
287 void setLabelColor(
const QColor &color);
288 void setLabel(
const QString &str);
289 void setLabelPadding(
int padding);
290 void setPadding(
int padding);
291 void setOffset(
int offset);
292 void setSelectedTickLabelFont(
const QFont &font);
293 void setSelectedLabelFont(
const QFont &font);
294 void setSelectedTickLabelColor(
const QColor &color);
295 void setSelectedLabelColor(
const QColor &color);
296 void setSelectedBasePen(
const QPen &pen);
297 void setSelectedTickPen(
const QPen &pen);
298 void setSelectedSubTickPen(
const QPen &pen);
299 Q_SLOT
void setSelectableParts(
const QCPAxis::SelectableParts &selectableParts);
300 Q_SLOT
void setSelectedParts(
const QCPAxis::SelectableParts &selectedParts);
305 virtual double selectTest(
const QPointF &pos,
bool onlySelectable, QVariant *details=0)
const;
309 void moveRange(
double diff);
310 void scaleRange(
double factor,
double center);
311 void setScaleRatio(
const QCPAxis *otherAxis,
double ratio=1.0);
312 void rescale(
bool onlyVisiblePlottables=
false);
313 double pixelToCoord(
double value)
const;
314 double coordToPixel(
double value)
const;
315 SelectablePart getPartAt(
const QPointF &pos)
const;
316 QList<QCPAbstractPlottable*> plottables()
const;
317 QList<QCPGraph*> graphs()
const;
318 QList<QCPAbstractItem*> items()
const;
321 static Qt::Orientation
orientation(
AxisType type) {
return type==atBottom||type==atTop ? Qt::Horizontal : Qt::Vertical; }
322 static AxisType opposite(AxisType type);
326 void rangeChanged(
const QCPRange &newRange);
329 void selectionChanged(
const QCPAxis::SelectableParts &parts);
330 void selectableChanged(
const QCPAxis::SelectableParts &parts);
339 Qt::Orientation mOrientation;
340 SelectableParts mSelectableParts, mSelectedParts;
341 QPen mBasePen, mSelectedBasePen;
346 QFont mLabelFont, mSelectedLabelFont;
347 QColor mLabelColor, mSelectedLabelColor;
350 bool mTickLabels, mAutoTickLabels;
352 LabelType mTickLabelType;
353 QFont mTickLabelFont, mSelectedTickLabelFont;
354 QColor mTickLabelColor, mSelectedTickLabelColor;
355 QString mDateTimeFormat;
356 Qt::TimeSpec mDateTimeSpec;
357 int mNumberPrecision;
358 char mNumberFormatChar;
359 bool mNumberBeautifulPowers;
364 int mSubTickCount, mAutoTickCount;
365 bool mAutoTicks, mAutoTickStep, mAutoSubTicks;
367 QPen mTickPen, mSelectedTickPen;
368 QPen mSubTickPen, mSelectedSubTickPen;
372 ScaleType mScaleType;
373 double mScaleLogBase, mScaleLogBaseLogInv;
377 QCPAxisPainterPrivate *mAxisPainter;
378 int mLowestVisibleTick, mHighestVisibleTick;
379 QVector<double> mTickVector;
380 QVector<QString> mTickVectorLabels;
381 QVector<double> mSubTickVector;
382 bool mCachedMarginValid;
386 virtual void setupTickVectors();
387 virtual void generateAutoTicks();
388 virtual int calculateAutoSubTickCount(
double tickStep)
const;
389 virtual int calculateMargin();
396 virtual void selectEvent(QMouseEvent *event,
bool additive,
const QVariant &details,
bool *selectionStateChanged);
400 void visibleTickBounds(
int &lowIndex,
int &highIndex)
const;
401 double baseLog(
double value)
const;
402 double basePow(
double value)
const;
403 QPen getBasePen()
const;
404 QPen getTickPen()
const;
405 QPen getSubTickPen()
const;
406 QFont getTickLabelFont()
const;
407 QFont getLabelFont()
const;
408 QColor getTickLabelColor()
const;
409 QColor getLabelColor()
const;
418 Q_DECLARE_OPERATORS_FOR_FLAGS(
QCPAxis::SelectableParts)
419 Q_DECLARE_OPERATORS_FOR_FLAGS(
QCPAxis::AxisTypes)
420 Q_DECLARE_METATYPE(
QCPAxis::SelectablePart)
423 class QCPAxisPainterPrivate
426 explicit QCPAxisPainterPrivate(QCustomPlot *parentPlot);
427 virtual ~QCPAxisPainterPrivate();
430 virtual int size()
const;
433 QRect axisSelectionBox()
const {
return mAxisSelectionBox; }
434 QRect tickLabelsSelectionBox()
const {
return mTickLabelsSelectionBox; }
435 QRect labelSelectionBox()
const {
return mLabelSelectionBox; }
445 int tickLabelPadding;
446 double tickLabelRotation;
447 bool substituteExponent;
448 bool numberMultiplyCross;
449 int tickLengthIn, tickLengthOut, subTickLengthIn, subTickLengthOut;
450 QPen tickPen, subTickPen;
452 QColor tickLabelColor;
453 QRect alignmentRect, viewportRect;
455 bool abbreviateDecimalPowers;
456 bool reversedEndings;
458 QVector<double> subTickPositions;
459 QVector<double> tickPositions;
460 QVector<QString> tickLabels;
470 QString basePart, expPart;
471 QRect baseBounds, expBounds, totalBounds, rotatedTotalBounds;
472 QFont baseFont, expFont;
474 QCustomPlot *mParentPlot;
475 QByteArray mLabelParameterHash;
476 QCache<QString, CachedLabel> mLabelCache;
477 QRect mAxisSelectionBox, mTickLabelsSelectionBox, mLabelSelectionBox;
479 virtual QByteArray generateLabelParameterHash()
const;
481 virtual void placeTickLabel(
QCPPainter *painter,
double position,
int distanceToAxis,
const QString &text, QSize *tickLabelsSize);
482 virtual void drawTickLabel(
QCPPainter *painter,
double x,
double y,
const TickLabelData &labelData)
const;
483 virtual TickLabelData getTickLabelData(
const QFont &font,
const QString &text)
const;
484 virtual QPointF getTickLabelDrawOffset(
const TickLabelData &labelData)
const;
485 virtual void getMaxTickLabelSize(
const QFont &font,
const QString &text, QSize *tickLabelsSize)
const;