summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--qt-ui/profile/divecartesianaxis.cpp65
-rw-r--r--qt-ui/profile/divecartesianaxis.h5
-rw-r--r--qt-ui/profile/profilewidget2.cpp8
3 files changed, 53 insertions, 25 deletions
diff --git a/qt-ui/profile/divecartesianaxis.cpp b/qt-ui/profile/divecartesianaxis.cpp
index a7721561c..214171d69 100644
--- a/qt-ui/profile/divecartesianaxis.cpp
+++ b/qt-ui/profile/divecartesianaxis.cpp
@@ -27,7 +27,7 @@ void DiveCartesianAxis::setTextColor(const QColor& color)
textColor = color;
}
-DiveCartesianAxis::DiveCartesianAxis() : orientation(Qt::Horizontal)
+DiveCartesianAxis::DiveCartesianAxis() : orientation(LeftToRight)
{
}
@@ -37,12 +37,9 @@ DiveCartesianAxis::~DiveCartesianAxis()
}
-void DiveCartesianAxis::setOrientation(Qt::Orientation o)
+void DiveCartesianAxis::setOrientation(Orientation o)
{
orientation = o;
- // position the elements on the screen.
- setMinimum(minimum());
- setMaximum(maximum());
}
void DiveCartesianAxis::updateTicks()
@@ -65,15 +62,32 @@ void DiveCartesianAxis::updateTicks()
// Move the remaining Ticks / Text to it's corerct position
// Regartind the possibly new values for the Axis
- qreal begin = orientation == Qt::Horizontal ? m.x1() : m.y1();
- // unused so far:
- // qreal end = orientation == Qt::Horizontal ? m.x2() : m.y2();
- double stepSize = orientation == Qt::Horizontal ? (m.x2() - m.x1()) : (m.y2() - m.y1());
+ qreal begin, stepSize;
+ if (orientation == TopToBottom) {
+ begin = m.y1();
+ stepSize = (m.y2() - m.y1());
+ } else if (orientation == BottomToTop) {
+ begin = m.y2();
+ stepSize = (m.y2() - m.y1());
+ } else if (orientation == LeftToRight ) {
+ begin = m.x1();
+ stepSize = (m.x2() - m.x1());
+ } else if (orientation == RightToLeft) {
+ begin = m.x2();
+ stepSize = (m.x2() - m.x1());
+ }
stepSize = stepSize / steps;
+
+
for (int i = 0, count = ticks.size(); i < count; i++, currValue += interval) {
- qreal childPos = begin + i * stepSize;
+ qreal childPos;
+ if (orientation == TopToBottom || orientation == LeftToRight) {
+ childPos = begin + i * stepSize;
+ } else {
+ childPos = begin - i * stepSize;
+ }
labels[i]->setText(textForValue(currValue));
- if ( orientation == Qt::Horizontal ) {
+ if ( orientation == LeftToRight || orientation == RightToLeft) {
ticks[i]->animateMoveTo(childPos, m.y1() + tickSize);
labels[i]->animateMoveTo(childPos, m.y1() + tickSize);
} else {
@@ -84,7 +98,12 @@ void DiveCartesianAxis::updateTicks()
// Add's the rest of the needed Ticks / Text.
for (int i = ticks.size(); i < steps; i++, currValue += interval) {
- qreal childPos = begin + i * stepSize;
+ qreal childPos;
+ if (orientation == TopToBottom || orientation == LeftToRight) {
+ childPos = begin + i * stepSize;
+ } else {
+ childPos = begin - i * stepSize;
+ }
DiveLineItem *item = new DiveLineItem(this);
item->setPen(pen());
ticks.push_back(item);
@@ -94,7 +113,7 @@ void DiveCartesianAxis::updateTicks()
label->setBrush(QBrush(textColor));
labels.push_back(label);
- if (orientation == Qt::Horizontal) {
+ if (orientation == RightToLeft || orientation == LeftToRight) {
item->setLine(0, 0, 0, tickSize);
item->setPos(scene()->sceneRect().width() + 10, m.y1() + tickSize); // position it outside of the scene
item->animateMoveTo(childPos, m.y1() + tickSize); // anim it to scene.
@@ -110,7 +129,6 @@ void DiveCartesianAxis::updateTicks()
label->animateMoveTo(m.x1() - tickSize, childPos);
}
}
-
}
QString DiveCartesianAxis::textForValue(double value)
@@ -131,7 +149,7 @@ void DiveCartesianAxis::setTickInterval(double i)
qreal DiveCartesianAxis::valueAt(const QPointF& p)
{
QLineF m = line();
- double retValue = orientation == Qt::Horizontal ?
+ double retValue = orientation == LeftToRight || RightToLeft?
max * (p.x() - m.x1()) / (m.x2() - m.x1()) :
max * (p.y() - m.y1()) / (m.y2() - m.y1());
return retValue;
@@ -145,13 +163,22 @@ qreal DiveCartesianAxis::posAtValue(qreal value)
double size = max - min;
double distanceFromOrigin = value - min;
double percent = (value - min) / size;
- double realSize = orientation == Qt::Horizontal ?
+
+ double realSize = orientation == LeftToRight || orientation == RightToLeft?
m.x2() - m.x1() :
m.y2() - m.y1();
+
+ // Inverted axis, just invert the percentage.
+ if(orientation == RightToLeft || orientation == BottomToTop){
+ percent = 1 - percent;
+ }
+
double retValue = realSize * percent;
- double adjusted = (orientation == Qt::Horizontal) ?
- retValue + m.x1() + p.x() :
- retValue + m.y1() + p.y();
+ double adjusted =
+ orientation == LeftToRight ? retValue + m.x1() + p.x() :
+ orientation == RightToLeft ? retValue + m.x1() + p.x() :
+ orientation == TopToBottom ? retValue + m.y1() + p.y() :
+ /* entation == BottomToTop */ retValue + m.y1() + p.y() ;
return adjusted;
}
diff --git a/qt-ui/profile/divecartesianaxis.h b/qt-ui/profile/divecartesianaxis.h
index 6add27548..3975de7e2 100644
--- a/qt-ui/profile/divecartesianaxis.h
+++ b/qt-ui/profile/divecartesianaxis.h
@@ -13,12 +13,13 @@ class DiveCartesianAxis : public QObject, public QGraphicsLineItem{
Q_PROPERTY(qreal x WRITE setX READ x)
Q_PROPERTY(qreal y WRITE setY READ y)
public:
+ enum Orientation{TopToBottom, BottomToTop, LeftToRight, RightToLeft};
DiveCartesianAxis();
virtual ~DiveCartesianAxis();
void setMinimum(double minimum);
void setMaximum(double maximum);
void setTickInterval(double interval);
- void setOrientation(Qt::Orientation orientation);
+ void setOrientation(Orientation orientation);
void setTickSize(qreal size);
void updateTicks();
double minimum() const;
@@ -34,7 +35,7 @@ signals:
protected:
virtual QString textForValue(double value);
- Qt::Orientation orientation;
+ Orientation orientation;
QList<DiveLineItem*> ticks;
QList<DiveTextItem*> labels;
double min;
diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp
index 2276c1aa8..a7e41ac18 100644
--- a/qt-ui/profile/profilewidget2.cpp
+++ b/qt-ui/profile/profilewidget2.cpp
@@ -46,9 +46,9 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) :
// Creating the needed items.
// ORDER: {BACKGROUND, PROFILE_Y_AXIS, GAS_Y_AXIS, TIME_AXIS, DEPTH_CONTROLLER, TIME_CONTROLLER, COLUMNS};
- profileYAxis->setOrientation(Qt::Vertical);
- gasYAxis->setOrientation(Qt::Vertical);
- timeAxis->setOrientation(Qt::Horizontal);
+ profileYAxis->setOrientation(DiveCartesianAxis::TopToBottom);
+ gasYAxis->setOrientation(DiveCartesianAxis::TopToBottom);
+ timeAxis->setOrientation(DiveCartesianAxis::LeftToRight);
// Defaults of the Axis Coordinates:
profileYAxis->setMinimum(0);
@@ -62,7 +62,7 @@ ProfileWidget2::ProfileWidget2(QWidget *parent) :
profileYAxis->setTickSize(1);
gasYAxis->setLine(0, 0, 0, 20);
- temperatureAxis->setOrientation(Qt::Vertical);
+ temperatureAxis->setOrientation(DiveCartesianAxis::BottomToTop);
temperatureAxis->setLine(0, 60, 0, 90);
temperatureAxis->setX(3);
temperatureAxis->setTickSize(2);