summaryrefslogtreecommitdiffstats
path: root/src/datavisualization/engine/axisrendercache_p.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/datavisualization/engine/axisrendercache_p.h')
-rw-r--r--src/datavisualization/engine/axisrendercache_p.h81
1 files changed, 64 insertions, 17 deletions
diff --git a/src/datavisualization/engine/axisrendercache_p.h b/src/datavisualization/engine/axisrendercache_p.h
index e1c51e7c..90321740 100644
--- a/src/datavisualization/engine/axisrendercache_p.h
+++ b/src/datavisualization/engine/axisrendercache_p.h
@@ -30,9 +30,8 @@
#define AXISRENDERCACHE_P_H
#include "datavisualizationglobal_p.h"
-#include "labelitem_p.h"
-#include "qabstract3daxis_p.h"
#include "drawer_p.h"
+#include <QtCore/QPointer>
QT_BEGIN_NAMESPACE_DATAVISUALIZATION
@@ -48,31 +47,70 @@ public:
void setType(QAbstract3DAxis::AxisType type);
inline QAbstract3DAxis::AxisType type() const { return m_type; }
void setTitle(const QString &title);
- inline const QString &title() { return m_title; }
+ inline const QString &title() const { return m_title; }
void setLabels(const QStringList &labels);
- inline const QStringList &labels() { return m_labels; }
- void setMin(float min);
- inline float min() { return m_min; }
- void setMax(float max);
- inline float max() { return m_max; }
- void setSegmentCount(int count);
+ inline const QStringList &labels() const { return m_labels; }
+ inline void setMin(float min) { m_min = min; }
+ inline float min() const { return m_min; }
+ inline void setMax(float max) { m_max = max; }
+ inline float max() const { return m_max; }
+ inline void setSegmentCount(int count) { m_segmentCount = count; m_positionsDirty = true; }
inline int segmentCount() const { return m_segmentCount; }
- void setSubSegmentCount(int count);
+ inline void setSubSegmentCount(int count) { m_subSegmentCount = count; m_positionsDirty = true; }
inline int subSegmentCount() const { return m_subSegmentCount; }
inline void setLabelFormat(const QString &format) { m_labelFormat = format; }
- inline const QString &labelFormat() { return m_labelFormat; }
+ inline const QString &labelFormat() const { return m_labelFormat; }
+ inline void setReversed(bool enable) { m_reversed = enable; m_positionsDirty = true; }
+ inline bool reversed() const { return m_reversed; }
+ inline void setFormatter(QValue3DAxisFormatter *formatter)
+ {
+ m_formatter = formatter; m_positionsDirty = true;
+ }
+ inline QValue3DAxisFormatter *formatter() const { return m_formatter; }
+ inline void setCtrlFormatter(QValue3DAxisFormatter *formatter)
+ {
+ m_ctrlFormatter = formatter;
+ }
+ inline QValue3DAxisFormatter *ctrlFormatter() const { return m_ctrlFormatter; }
inline LabelItem &titleItem() { return m_titleItem; }
inline QList<LabelItem *> &labelItems() { return m_labelItems; }
- inline GLfloat segmentStep() const { return m_segmentStep; }
- inline GLfloat subSegmentStep() const { return m_subSegmentStep; }
+ inline float gridLinePosition(int index) { return m_adjustedGridLinePositions.at(index); }
+ inline int gridLineCount() { return m_adjustedGridLinePositions.size(); }
+ inline float labelPosition(int index) { return m_adjustedLabelPositions.at(index); }
+ inline int labelCount() {
+ // Some value axis formatters may opt to not show all labels,
+ // so use positions array for determining count in that case.
+ if (m_type == QAbstract3DAxis::AxisTypeValue)
+ return m_adjustedLabelPositions.size();
+ else
+ return m_labels.size();
+ }
+ void updateAllPositions();
+ inline bool positionsDirty() const { return m_positionsDirty; }
+ inline void markPositionsDirty() { m_positionsDirty = true; }
+ inline void setTranslate(float translate) { m_translate = translate; m_positionsDirty = true; }
+ inline float translate() { return m_translate; }
+ inline void setScale(float scale) { m_scale = scale; m_positionsDirty = true; }
+ inline float scale() { return m_scale; }
+ inline float positionAt(float value)
+ {
+ if (m_reversed)
+ return (1.0f - m_formatter->positionAt(value)) * m_scale + m_translate;
+ else
+ return m_formatter->positionAt(value) * m_scale + m_translate;
+ }
+ inline float labelAutoRotation() const { return m_labelAutoRotation; }
+ inline void setLabelAutoRotation(float angle) { m_labelAutoRotation = angle; }
+ inline bool isTitleVisible() const { return m_titleVisible; }
+ inline void setTitleVisible(bool visible) { m_titleVisible = visible; }
+ inline bool isTitleFixed() const { return m_titleFixed; }
+ inline void setTitleFixed(bool fixed) { m_titleFixed = fixed; }
public slots:
void updateTextures();
private:
- void updateSegmentStep();
- void updateSubSegmentStep();
int maxLabelWidth(const QStringList &labels) const;
// Cached axis values
@@ -84,14 +122,23 @@ private:
int m_segmentCount;
int m_subSegmentCount;
QString m_labelFormat;
+ bool m_reversed;
QFont m_font;
+ QValue3DAxisFormatter *m_formatter;
+ QPointer<QValue3DAxisFormatter> m_ctrlFormatter;
// Renderer items
Drawer *m_drawer; // Not owned
LabelItem m_titleItem;
QList<LabelItem *> m_labelItems;
- GLfloat m_segmentStep;
- GLfloat m_subSegmentStep;
+ QVector<float> m_adjustedGridLinePositions;
+ QVector<float> m_adjustedLabelPositions;
+ bool m_positionsDirty;
+ float m_translate;
+ float m_scale;
+ float m_labelAutoRotation;
+ bool m_titleVisible;
+ bool m_titleFixed;
Q_DISABLE_COPY(AxisRenderCache)
};