mirror of
https://github.com/subsurface/subsurface.git
synced 2025-02-19 22:16:15 +00:00
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>
This commit is contained in:
parent
793879b6fa
commit
9cb5ea45d8
4 changed files with 119 additions and 2 deletions
|
@ -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);
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue