summaryrefslogtreecommitdiffstats
path: root/qt-ui/profile/divecartesianaxis.cpp
diff options
context:
space:
mode:
authorGravatar Tomaz Canabrava <tcanabrava@kde.org>2014-01-16 12:32:45 -0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-01-17 06:16:47 +0700
commit9cb5ea45d886c15b26b196bc292b7a4bbf359b20 (patch)
tree6b04a501325e065fad9364eb0be86ed7533f0874 /qt-ui/profile/divecartesianaxis.cpp
parent793879b6fab658c19bce92bebe0e193a900a2cc5 (diff)
downloadsubsurface-9cb5ea45d886c15b26b196bc292b7a4bbf359b20.tar.gz
Started the code for a grid that knows how to handle itself.
The code for this item is a bit too big to be just the grid of the dives and I know that, don't bully me. :) The main idea of this grid is that it knows when it should be updated. this is a bit different than the old code where all the painting happened on the same method. This is bad because it's more code, but it's better because if I break the grid, only the grid will be broken, and it's easyer to spot the breakage. in the old code if I did the wrong thing with the graphics context, the whole graph gots messed out. Signed-off-by: Tomaz Canabrava <tcanabrava@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui/profile/divecartesianaxis.cpp')
-rw-r--r--qt-ui/profile/divecartesianaxis.cpp83
1 files changed, 83 insertions, 0 deletions
diff --git a/qt-ui/profile/divecartesianaxis.cpp b/qt-ui/profile/divecartesianaxis.cpp
index 6022c576f..08138408e 100644
--- a/qt-ui/profile/divecartesianaxis.cpp
+++ b/qt-ui/profile/divecartesianaxis.cpp
@@ -13,11 +13,13 @@
void DiveCartesianAxis::setMaximum(double maximum)
{
max = maximum;
+ emit sizeChanged();
}
void DiveCartesianAxis::setMinimum(double minimum)
{
min = minimum;
+ emit sizeChanged();
}
void DiveCartesianAxis::setTextColor(const QColor& color)
@@ -189,3 +191,84 @@ QString TimeAxis::textForValue(double value)
{
return QString::number(value / 60);
}
+
+void DiveCartesianPlane::setLeftAxis(DiveCartesianAxis* axis)
+{
+ leftAxis = axis;
+ connect(leftAxis, SIGNAL(sizeChanged()), this, SLOT(setup()));
+ if (bottomAxis)
+ setup();
+}
+
+void DiveCartesianPlane::setBottomAxis(DiveCartesianAxis* axis)
+{
+ bottomAxis = axis;
+ connect(bottomAxis, SIGNAL(sizeChanged()), this, SLOT(setup()));
+ if (leftAxis)
+ setup();
+}
+
+QLineF DiveCartesianPlane::horizontalLine() const
+{
+ return (bottomAxis) ? bottomAxis->line() : QLineF() ;
+}
+
+void DiveCartesianPlane::setHorizontalLine(QLineF line)
+{
+ if ( horizontalSize == line.length())
+ return;
+ horizontalSize = line.length();
+ setup();
+}
+
+void DiveCartesianPlane::setVerticalLine(QLineF line)
+{
+ if (verticalSize == line.length())
+ return;
+ verticalSize = line.length();
+ setup();
+}
+
+QLineF DiveCartesianPlane::verticalLine() const
+{
+ return (leftAxis) ? leftAxis->line() : QLineF() ;
+}
+
+void DiveCartesianPlane::setup()
+{
+ if (!leftAxis || !bottomAxis || !scene())
+ return;
+
+ // This creates a Grid around the axis, creating the cartesian plane.
+ const int top = leftAxis->posAtValue(leftAxis->minimum());
+ const int bottom = leftAxis->posAtValue(leftAxis->maximum());
+ const int left = bottomAxis->posAtValue(bottomAxis->minimum());
+ const int right = bottomAxis->posAtValue(bottomAxis->maximum());
+
+ setRect(0, 0, horizontalSize, verticalSize);
+ setPos(left, top);
+
+ qDeleteAll(horizontalLines);
+ qDeleteAll(verticalLines);
+ horizontalLines.clear();
+ verticalLines.clear();
+
+ // DEPTH is M_OR_FEET(10,30), Minutes are 600, per line.
+ for (int i = leftAxis->minimum(), max = leftAxis->maximum(); i < max; i += M_OR_FT(10,30)) {
+ DiveLineItem *line = new DiveLineItem();
+ line->setLine(0, 0, horizontalSize, 0);
+ line->setPos(left,leftAxis->posAtValue(i));
+ line->setZValue(-1);
+ horizontalLines.push_back(line);
+ scene()->addItem(line);
+ }
+
+ for (int i = bottomAxis->minimum(), max = bottomAxis->maximum(); i < max; i += 600) { // increments by 10 minutes.
+ DiveLineItem *line = new DiveLineItem();
+ line->setLine(0, 0, 0, verticalSize);
+ line->setPos(bottomAxis->posAtValue(i), top);
+ line->setZValue(-1);
+ verticalLines.push_back(line);
+ scene()->addItem(line);
+ }
+} \ No newline at end of file