diff options
Diffstat (limited to 'qt-ui/diveplanner.cpp')
-rw-r--r-- | qt-ui/diveplanner.cpp | 341 |
1 files changed, 27 insertions, 314 deletions
diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp index 6e11f84aa..c2d74173c 100644 --- a/qt-ui/diveplanner.cpp +++ b/qt-ui/diveplanner.cpp @@ -48,7 +48,6 @@ DivePlannerGraphics::DivePlannerGraphics(QWidget *parent) : QGraphicsView(parent horizontalLine(new QGraphicsLineItem(fromPercent(0, Qt::Horizontal), fromPercent(0, Qt::Vertical), fromPercent(100, Qt::Horizontal), fromPercent(0, Qt::Vertical))), activeDraggedHandler(0), diveBg(new QGraphicsPolygonItem()), - timeLine(new Ruler()), timeString(new QGraphicsSimpleTextItem()), depthString(new QGraphicsSimpleTextItem()), depthHandler(new ExpanderGraphics()), @@ -68,36 +67,6 @@ DivePlannerGraphics::DivePlannerGraphics(QWidget *parent) : QGraphicsView(parent horizontalLine->setPen(QPen(Qt::DotLine)); scene()->addItem(horizontalLine); - timeLine->setMinimum(0); - timeLine->setMaximum(TIME_INITIAL_MAX); - timeLine->setTickInterval(10); - timeLine->setColor(getColor(TIME_GRID)); - timeLine->setLine(fromPercent(10, Qt::Horizontal), - fromPercent(85, Qt::Vertical), - fromPercent(90, Qt::Horizontal), - fromPercent(85, Qt::Vertical)); - timeLine->setOrientation(Qt::Horizontal); - timeLine->setTickSize(fromPercent(1, Qt::Vertical)); - timeLine->setTextColor(getColor(TIME_TEXT)); - timeLine->updateTicks(); - scene()->addItem(timeLine); - - depthLine = new Ruler(); - depthLine->setMinimum(0); - depthLine->setMaximum(M_OR_FT(40, 120)); - depthLine->setTickInterval(M_OR_FT(10, 30)); - depthLine->setLine(fromPercent(10, Qt::Horizontal), - fromPercent(10, Qt::Vertical), - fromPercent(10, Qt::Horizontal), - fromPercent(85, Qt::Vertical)); - depthLine->setOrientation(Qt::Vertical); - depthLine->setTickSize(fromPercent(1, Qt::Horizontal)); - depthLine->setColor(getColor(DEPTH_GRID)); - depthLine->setTextColor(getColor(SAMPLE_DEEP)); - depthLine->updateTicks(); - depthLine->unitSystem = prefs.units.length; - scene()->addItem(depthLine); - timeString->setFlag(QGraphicsItem::ItemIgnoresTransformations); timeString->setBrush(profile_color[TIME_TEXT].at(0)); scene()->addItem(timeString); @@ -155,31 +124,11 @@ DivePlannerGraphics::DivePlannerGraphics(QWidget *parent) : QGraphicsView(parent void DivePlannerGraphics::settingsChanged() { - if (depthLine->unitSystem == prefs.units.length) - return; - - depthLine->setTickInterval(M_OR_FT(10, 30)); - depthLine->updateTicks(); - depthLine->unitSystem = prefs.units.length; -} - -void DivePlannerGraphics::pointInserted(const QModelIndex &parent, int start, int end) -{ - DiveHandler *item = new DiveHandler(); - scene()->addItem(item); - handles << item; - - QGraphicsSimpleTextItem *gasChooseBtn = new QGraphicsSimpleTextItem(); - scene()->addItem(gasChooseBtn); - gasChooseBtn->setZValue(10); - gasChooseBtn->setFlag(QGraphicsItem::ItemIgnoresTransformations); - gases << gasChooseBtn; - if (plannerModel->recalcQ()) - drawProfile(); } void DivePlannerGraphics::keyDownAction() { +#if 0 Q_FOREACH(QGraphicsItem * i, scene()->selectedItems()) { if (DiveHandler *handler = qgraphicsitem_cast<DiveHandler *>(i)) { int row = handles.indexOf(handler); @@ -191,10 +140,12 @@ void DivePlannerGraphics::keyDownAction() plannerModel->editStop(row, dp); } } +#endif } void DivePlannerGraphics::keyUpAction() { +#if 0 Q_FOREACH(QGraphicsItem * i, scene()->selectedItems()) { if (DiveHandler *handler = qgraphicsitem_cast<DiveHandler *>(i)) { int row = handles.indexOf(handler); @@ -208,10 +159,12 @@ void DivePlannerGraphics::keyUpAction() } } drawProfile(); +#endif } void DivePlannerGraphics::keyLeftAction() { +#if 0 Q_FOREACH(QGraphicsItem * i, scene()->selectedItems()) { if (DiveHandler *handler = qgraphicsitem_cast<DiveHandler *>(i)) { int row = handles.indexOf(handler); @@ -237,10 +190,12 @@ void DivePlannerGraphics::keyLeftAction() plannerModel->editStop(row, dp); } } +#endif } void DivePlannerGraphics::keyRightAction() { +#if 0 Q_FOREACH(QGraphicsItem * i, scene()->selectedItems()) { if (DiveHandler *handler = qgraphicsitem_cast<DiveHandler *>(i)) { int row = handles.indexOf(handler); @@ -265,10 +220,12 @@ void DivePlannerGraphics::keyRightAction() plannerModel->editStop(row, dp); } } +#endif } void DivePlannerGraphics::keyDeleteAction() { +#if 0 int selCount = scene()->selectedItems().count(); if (selCount) { QVector<int> selectedIndexes; @@ -279,20 +236,9 @@ void DivePlannerGraphics::keyDeleteAction() } plannerModel->removeSelectedPoints(selectedIndexes); } +#endif } -void DivePlannerGraphics::pointsRemoved(const QModelIndex &, int start, int end) -{ // start and end are inclusive. - int num = (end - start) + 1; - for (int i = num; i != 0; i--) { - delete handles.back(); - handles.pop_back(); - delete gases.back(); - gases.pop_back(); - } - scene()->clearSelection(); - drawProfile(); -} bool intLessThan(int a, int b) { @@ -329,24 +275,29 @@ qreal DivePlannerGraphics::fromPercent(qreal percent, Qt::Orientation orientatio void DivePlannerGraphics::increaseDepth() { +#if 0 if (depthLine->maximum() + M_OR_FT(10, 30) > MAX_DEPTH) return; minDepth += M_OR_FT(10, 30); depthLine->setMaximum(minDepth); depthLine->updateTicks(); drawProfile(); +#endif } void DivePlannerGraphics::increaseTime() { +#if 0 minMinutes += 10; timeLine->setMaximum(minMinutes); timeLine->updateTicks(); drawProfile(); +#endif } void DivePlannerGraphics::decreaseDepth() { +#if 0 if (depthLine->maximum() - M_OR_FT(10, 30) < MIN_DEPTH) return; @@ -363,10 +314,12 @@ void DivePlannerGraphics::decreaseDepth() depthLine->setMaximum(minDepth); depthLine->updateTicks(); drawProfile(); +#endif } void DivePlannerGraphics::decreaseTime() { +#if 0 if (timeLine->maximum() - 10 < TIME_INITIAL_MAX || timeLine->maximum() - 10 < dpMaxTime) return; @@ -374,17 +327,7 @@ void DivePlannerGraphics::decreaseTime() timeLine->setMaximum(timeLine->maximum() - 10); timeLine->updateTicks(); drawProfile(); -} - -void DivePlannerGraphics::mouseDoubleClickEvent(QMouseEvent *event) -{ - QPointF mappedPos = mapToScene(event->pos()); - if (isPointOutOfBoundaries(mappedPos)) - return; - - int minutes = rint(timeLine->valueAt(mappedPos)); - int milimeters = rint(depthLine->valueAt(mappedPos) / M_OR_FT(1, 1)) * M_OR_FT(1, 1); - plannerModel->addStop(milimeters, minutes * 60, -1, 0, 0, true); +#endif } void DivePlannerPointsModel::createSimpleDive() @@ -465,85 +408,13 @@ void DivePlannerPointsModel::removeDeco() void DivePlannerGraphics::drawProfile() { - if (!plannerModel->recalcQ()) - return; - qDeleteAll(lines); - lines.clear(); - - plannerModel->createTemporaryPlan(); - struct diveplan diveplan = plannerModel->getDiveplan(); - struct divedatapoint *dp = diveplan.dp; - unsigned int max_depth = 0; - - if (!dp) { - plannerModel->deleteTemporaryPlan(); - return; - } - //TODO: divedatapoint_list_get_max_depth on C - code? - while (dp->next) { - if (dp->time && dp->depth > max_depth) - max_depth = dp->depth; - dp = dp->next; - } - - if (!activeDraggedHandler && (timeLine->maximum() < dp->time / 60.0 + 5 || dp->time / 60.0 + 15 < timeLine->maximum())) { - minMinutes = fmax(dp->time / 60.0 + 5, minMinutes); - timeLine->setMaximum(minMinutes); - timeLine->updateTicks(); - } - if (!activeDraggedHandler && (depthLine->maximum() < max_depth + M_OR_FT(10, 30) || max_depth + M_OR_FT(10, 30) < depthLine->maximum())) { - minDepth = fmax(max_depth + M_OR_FT(10, 30), minDepth); - depthLine->setMaximum(minDepth); - depthLine->updateTicks(); - } - - // (re-) create the profile with different colors for segments that were - // entered vs. segments that were calculated - double lastx = timeLine->posAtValue(0); - double lasty = depthLine->posAtValue(0); - - QPolygonF poly; - poly.append(QPointF(lastx, lasty)); - + // Code ported to the new profile is deleted. This part that I left here + // is because I didn't fully understood the reason of the magic with + // the plannerModel. bool oldRecalc = plannerModel->setRecalc(false); plannerModel->removeDeco(); - - unsigned int lastdepth = 0; - for (dp = diveplan.dp; dp != NULL; dp = dp->next) { - if (dp->time == 0) // magic entry for available tank - continue; - double xpos = timeLine->posAtValue(dp->time / 60.0); - double ypos = depthLine->posAtValue(dp->depth); - if (!dp->entered) { - QGraphicsLineItem *item = new QGraphicsLineItem(lastx, lasty, xpos, ypos); - item->setPen(QPen(QBrush(Qt::red), 0)); - - scene()->addItem(item); - lines << item; - if (dp->depth) { - if (dp->depth == lastdepth || dp->o2 != dp->next->o2 || dp->he != dp->next->he) - plannerModel->addStop(dp->depth, dp->time, dp->next->o2, dp->next->he, 0, false); - lastdepth = dp->depth; - } - } - lastx = xpos; - lasty = ypos; - poly.append(QPointF(lastx, lasty)); - } + // Here we plotted the old planner profile. why there's the magic with the plannerModel here? plannerModel->setRecalc(oldRecalc); - - diveBg->setPolygon(poly); - QRectF b = poly.boundingRect(); - QLinearGradient pat( - b.x(), - b.y(), - b.x(), - b.height() + b.y()); - - pat.setColorAt(1, profile_color[DEPTH_BOTTOM].first()); - pat.setColorAt(0, profile_color[DEPTH_TOP].first()); - diveBg->setBrush(pat); - plannerModel->deleteTemporaryPlan(); } @@ -559,11 +430,12 @@ void DivePlannerGraphics::showEvent(QShowEvent *event) fitInView(sceneRect(), Qt::IgnoreAspectRatio); } + void DivePlannerGraphics::mouseMoveEvent(QMouseEvent *event) { QPointF mappedPos = mapToScene(event->pos()); - +#if 0 double xpos = timeLine->valueAt(mappedPos); double ypos = depthLine->valueAt(mappedPos); @@ -605,10 +477,12 @@ void DivePlannerGraphics::mouseMoveEvent(QMouseEvent *event) verticalLine->setPen(QPen(Qt::DotLine)); horizontalLine->setPen(QPen(Qt::DotLine)); } +#endif } void DivePlannerGraphics::moveActiveHandler(const QPointF &mappedPos, const int pos) { +#if 0 divedatapoint data = plannerModel->at(pos); int mintime = 0, maxtime = (timeLine->maximum() + 10) * 60; if (pos > 0) @@ -633,20 +507,7 @@ void DivePlannerGraphics::moveActiveHandler(const QPointF &mappedPos, const int qDeleteAll(lines); lines.clear(); drawProfile(); -} - -bool DivePlannerGraphics::isPointOutOfBoundaries(const QPointF &point) -{ - double xpos = timeLine->valueAt(point); - double ypos = depthLine->valueAt(point); - - if (xpos > timeLine->maximum() || - xpos < timeLine->minimum() || - ypos > depthLine->maximum() || - ypos < depthLine->minimum()) { - return true; - } - return false; +#endif } void DivePlannerGraphics::mousePressEvent(QMouseEvent *event) @@ -743,154 +604,6 @@ void DiveHandler::mousePressEvent(QGraphicsSceneMouseEvent *event) ungrabKeyboard(); } -void Ruler::setMaximum(double maximum) -{ - max = maximum; -} - -void Ruler::setMinimum(double minimum) -{ - min = minimum; -} - -void Ruler::setTextColor(const QColor &color) -{ - textColor = color; -} - -void Ruler::eraseAll() -{ - qDeleteAll(ticks); - ticks.clear(); - qDeleteAll(labels); - labels.clear(); -} - -Ruler::Ruler() : unitSystem(0), - orientation(Qt::Horizontal), - min(0), - max(0), - interval(0), - tickSize(0) -{ -} - -Ruler::~Ruler() -{ - eraseAll(); -} - -void Ruler::setOrientation(Qt::Orientation o) -{ - orientation = o; - // position the elements on the screen. - setMinimum(minimum()); - setMaximum(maximum()); -} - -void Ruler::updateTicks() -{ - eraseAll(); - - QLineF m = line(); - QGraphicsLineItem *item = NULL; - QGraphicsSimpleTextItem *label = NULL; - - double steps = (max - min) / interval; - qreal pos; - double currValue = min; - - if (orientation == Qt::Horizontal) { - double stepSize = (m.x2() - m.x1()) / steps; - for (pos = m.x1(); pos <= m.x2(); pos += stepSize, currValue += interval) { - item = new QGraphicsLineItem(pos, m.y1(), pos, m.y1() + tickSize, this); - item->setPen(pen()); - ticks.push_back(item); - - label = new QGraphicsSimpleTextItem(QString::number(currValue), this); - label->setBrush(QBrush(textColor)); - label->setFlag(ItemIgnoresTransformations); - label->setPos(pos - label->boundingRect().width() / 2, m.y1() + tickSize + 5); - labels.push_back(label); - } - } else { - double stepSize = (m.y2() - m.y1()) / steps; - for (pos = m.y1(); pos <= m.y2(); pos += stepSize, currValue += interval) { - item = new QGraphicsLineItem(m.x1(), pos, m.x1() - tickSize, pos, this); - item->setPen(pen()); - ticks.push_back(item); - - label = new QGraphicsSimpleTextItem(get_depth_string(currValue, false, false), this); - label->setBrush(QBrush(textColor)); - label->setFlag(ItemIgnoresTransformations); - label->setPos(m.x2() - 80, pos); - labels.push_back(label); - } - } -} - -void Ruler::setTickSize(qreal size) -{ - tickSize = size; -} - -void Ruler::setTickInterval(double i) -{ - interval = i; -} - -qreal Ruler::valueAt(const QPointF &p) -{ - QLineF m = line(); - double retValue = orientation == Qt::Horizontal ? - max * (p.x() - m.x1()) / (m.x2() - m.x1()) : - max * (p.y() - m.y1()) / (m.y2() - m.y1()); - return retValue; -} - -qreal Ruler::posAtValue(qreal value) -{ - QLineF m = line(); - double size = max - min; - double percent = value / size; - double realSize = orientation == Qt::Horizontal ? - m.x2() - m.x1() : - m.y2() - m.y1(); - double retValue = realSize * percent; - retValue = (orientation == Qt::Horizontal) ? - retValue + m.x1() : - retValue + m.y1(); - return retValue; -} - -qreal Ruler::percentAt(const QPointF &p) -{ - qreal value = valueAt(p); - double size = max - min; - double percent = value / size; - return percent; -} - -double Ruler::maximum() const -{ - return max; -} - -double Ruler::minimum() const -{ - return min; -} - -void Ruler::setColor(const QColor &color) -{ - QPen defaultPen(color); - defaultPen.setJoinStyle(Qt::RoundJoin); - defaultPen.setCapStyle(Qt::RoundCap); - defaultPen.setWidth(2); - defaultPen.setCosmetic(true); - setPen(defaultPen); -} - Button::Button(QObject *parent, QGraphicsItem *itemParent) : QObject(parent), QGraphicsRectItem(itemParent), icon(new QGraphicsPixmapItem(this)), |