diff options
-rw-r--r-- | qt-ui/diveplanner.cpp | 41 | ||||
-rw-r--r-- | qt-ui/diveplanner.h | 2 | ||||
-rw-r--r-- | qt-ui/profile/profilewidget2.cpp | 24 | ||||
-rw-r--r-- | qt-ui/profile/profilewidget2.h | 3 |
4 files changed, 34 insertions, 36 deletions
diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp index b7a3f0153..6ea88e1e3 100644 --- a/qt-ui/diveplanner.cpp +++ b/qt-ui/diveplanner.cpp @@ -480,36 +480,6 @@ void DivePlannerGraphics::mouseMoveEvent(QMouseEvent *event) #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) - mintime = plannerModel->at(pos - 1).time; - if (pos < plannerModel->size() - 1) - maxtime = plannerModel->at(pos + 1).time; - - int minutes = rint(timeLine->valueAt(mappedPos)); - if (minutes * 60 <= mintime || minutes * 60 >= maxtime) - return; - - int milimeters = rint(depthLine->valueAt(mappedPos) / M_OR_FT(1, 1)) * M_OR_FT(1, 1); - double xpos = timeLine->posAtValue(minutes); - double ypos = depthLine->posAtValue(milimeters); - - data.depth = milimeters; - data.time = rint(timeLine->valueAt(mappedPos)) * 60; - - plannerModel->editStop(pos, data); - - activeDraggedHandler->setPos(QPointF(xpos, ypos)); - qDeleteAll(lines); - lines.clear(); - drawProfile(); -#endif -} - void DivePlannerGraphics::mousePressEvent(QMouseEvent *event) { if (event->modifiers()) { @@ -586,12 +556,13 @@ void DiveHandler::changeGas() plannerModel->setData(index, action->text()); } -QVariant DiveHandler::itemChange(QGraphicsItem::GraphicsItemChange change, const QVariant &value) +void DiveHandler::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { - if (change == ItemPositionHasChanged && scene()) { - emit moved(); - } - return QGraphicsItem::itemChange(change, value); + ProfileWidget2 *view = qobject_cast<ProfileWidget2*>(scene()->views().first()); + if(view->isPointOutOfBoundaries(event->scenePos())) + return; + QGraphicsEllipseItem::mouseMoveEvent(event); + emit moved(); } Button::Button(QObject *parent, QGraphicsItem *itemParent) : QObject(parent), diff --git a/qt-ui/diveplanner.h b/qt-ui/diveplanner.h index b68605537..a56d403fc 100644 --- a/qt-ui/diveplanner.h +++ b/qt-ui/diveplanner.h @@ -140,7 +140,7 @@ public: protected: void contextMenuEvent(QGraphicsSceneContextMenuEvent *event); - virtual QVariant itemChange(GraphicsItemChange change, const QVariant &value); + void mouseMoveEvent(QGraphicsSceneMouseEvent *event); signals: void moved(); private: diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp index 81ed98619..dd4ecca85 100644 --- a/qt-ui/profile/profilewidget2.cpp +++ b/qt-ui/profile/profilewidget2.cpp @@ -964,6 +964,7 @@ void ProfileWidget2::pointInserted(const QModelIndex &parent, int start, int end scene()->addItem(item); handles << item; + connect(item, SIGNAL(moved()), this, SLOT(recreatePlannedDive())); QGraphicsSimpleTextItem *gasChooseBtn = new QGraphicsSimpleTextItem(); scene()->addItem(gasChooseBtn); gasChooseBtn->setZValue(10); @@ -1007,3 +1008,26 @@ void ProfileWidget2::repositionDiveHandlers() last = i; } } + +void ProfileWidget2::recreatePlannedDive() +{ + DiveHandler *activeHandler = qobject_cast<DiveHandler*>(sender()); + DivePlannerPointsModel *plannerModel = DivePlannerPointsModel::instance(); + int index = handles.indexOf(activeHandler); + + int mintime = 0, maxtime = (timeAxis->maximum() + 10) * 60; + if (index > 0) + mintime = plannerModel->at(index - 1).time; + if (index < plannerModel->size() - 1) + maxtime = plannerModel->at(index + 1).time; + + int minutes = rint(timeAxis->valueAt(activeHandler->pos()) / 60); + if (minutes * 60 <= mintime || minutes * 60 >= maxtime) + return; + + divedatapoint data = plannerModel->at(index); + data.depth = rint(profileYAxis->valueAt(activeHandler->pos()) / M_OR_FT(1, 1)) * M_OR_FT(1, 1);; + data.time = rint(timeAxis->valueAt(activeHandler->pos())); + + plannerModel->editStop(index, data); +} diff --git a/qt-ui/profile/profilewidget2.h b/qt-ui/profile/profilewidget2.h index 895b82c78..1c1258de5 100644 --- a/qt-ui/profile/profilewidget2.h +++ b/qt-ui/profile/profilewidget2.h @@ -91,6 +91,9 @@ slots: // Necessary to call from QAction's signals. void pointsRemoved(const QModelIndex &, int start, int end); void replot(); + /* this is called for every move on the handlers. maybe we can speed up this a bit? */ + void recreatePlannedDive(); + protected: virtual void resizeEvent(QResizeEvent *event); virtual void wheelEvent(QWheelEvent *event); |