diff options
-rw-r--r-- | profile-widget/profilewidget2.cpp | 45 | ||||
-rw-r--r-- | profile-widget/profilewidget2.h | 4 |
2 files changed, 43 insertions, 6 deletions
diff --git a/profile-widget/profilewidget2.cpp b/profile-widget/profilewidget2.cpp index 5a32c30d8..10e9a7501 100644 --- a/profile-widget/profilewidget2.cpp +++ b/profile-widget/profilewidget2.cpp @@ -1286,6 +1286,7 @@ void ProfileWidget2::setAddState() DivePlannerPointsModel *plannerModel = DivePlannerPointsModel::instance(); connect(plannerModel, &DivePlannerPointsModel::dataChanged, this, &ProfileWidget2::replot); connect(plannerModel, &DivePlannerPointsModel::cylinderModelEdited, this, &ProfileWidget2::replot); + connect(plannerModel, &DivePlannerPointsModel::modelReset, this, &ProfileWidget2::pointsReset); connect(plannerModel, &DivePlannerPointsModel::rowsInserted, this, &ProfileWidget2::pointInserted); connect(plannerModel, &DivePlannerPointsModel::rowsRemoved, this, &ProfileWidget2::pointsRemoved); /* show the same stuff that the profile shows. */ @@ -1317,6 +1318,7 @@ void ProfileWidget2::setPlanState() DivePlannerPointsModel *plannerModel = DivePlannerPointsModel::instance(); connect(plannerModel, &DivePlannerPointsModel::dataChanged, this, &ProfileWidget2::replot); connect(plannerModel, &DivePlannerPointsModel::cylinderModelEdited, this, &ProfileWidget2::replot); + connect(plannerModel, &DivePlannerPointsModel::modelReset, this, &ProfileWidget2::pointsReset); connect(plannerModel, &DivePlannerPointsModel::rowsInserted, this, &ProfileWidget2::pointInserted); connect(plannerModel, &DivePlannerPointsModel::rowsRemoved, this, &ProfileWidget2::pointsRemoved); /* show the same stuff that the profile shows. */ @@ -1684,8 +1686,10 @@ void ProfileWidget2::disconnectTemporaryConnections() disconnect(plannerModel, &DivePlannerPointsModel::dataChanged, this, &ProfileWidget2::replot); disconnect(plannerModel, &DivePlannerPointsModel::cylinderModelEdited, this, &ProfileWidget2::replot); + disconnect(plannerModel, &DivePlannerPointsModel::modelReset, this, &ProfileWidget2::pointsReset); disconnect(plannerModel, &DivePlannerPointsModel::rowsInserted, this, &ProfileWidget2::pointInserted); disconnect(plannerModel, &DivePlannerPointsModel::rowsRemoved, this, &ProfileWidget2::pointsRemoved); + disconnect(plannerModel, &DivePlannerPointsModel::rowsMoved, this, &ProfileWidget2::pointsMoved); #endif Q_FOREACH (QAction *action, actionsForKeys.values()) { action->setShortcut(QKeySequence()); @@ -1702,22 +1706,45 @@ int ProfileWidget2::handleIndex(const DiveHandler *h) const } #ifndef SUBSURFACE_MOBILE -void ProfileWidget2::pointInserted(const QModelIndex&, int, int) + +DiveHandler *ProfileWidget2::createHandle() { DiveHandler *item = new DiveHandler(&displayed_dive); scene()->addItem(item); - handles.emplace_back(item); - connect(item, &DiveHandler::moved, this, &ProfileWidget2::recreatePlannedDive); connect(item, &DiveHandler::clicked, this, &ProfileWidget2::divePlannerHandlerClicked); connect(item, &DiveHandler::released, this, &ProfileWidget2::divePlannerHandlerReleased); + return item; +} + +QGraphicsSimpleTextItem *ProfileWidget2::createGas() +{ QGraphicsSimpleTextItem *gasChooseBtn = new QGraphicsSimpleTextItem(); scene()->addItem(gasChooseBtn); gasChooseBtn->setZValue(10); gasChooseBtn->setFlag(QGraphicsItem::ItemIgnoresTransformations); - gases.emplace_back(gasChooseBtn); - DivePlannerPointsModel *plannerModel = DivePlannerPointsModel::instance(); - if (plannerModel->recalcQ()) + return gasChooseBtn; +} + +void ProfileWidget2::pointsReset() +{ + handles.clear(); + gases.clear(); + int count = DivePlannerPointsModel::instance()->rowCount(); + for (int i = 0; i < count; ++i) { + handles.emplace_back(createHandle()); + gases.emplace_back(createGas()); + } +} + +void ProfileWidget2::pointInserted(const QModelIndex &, int from, int to) +{ + for (int i = from; i <= to; ++i) { + handles.emplace(handles.begin() + i, createHandle()); + gases.emplace(gases.begin() + i, createGas()); + } + + if (DivePlannerPointsModel::instance()->recalcQ()) replot(); } @@ -1730,6 +1757,12 @@ void ProfileWidget2::pointsRemoved(const QModelIndex &, int start, int end) replot(); } +void ProfileWidget2::pointsMoved(const QModelIndex &, int start, int end, const QModelIndex &, int row) +{ + moveInVector(handles, start, end + 1, row); + moveInVector(gases, start, end + 1, row); +} + void ProfileWidget2::repositionDiveHandlers() { DivePlannerPointsModel *plannerModel = DivePlannerPointsModel::instance(); diff --git a/profile-widget/profilewidget2.h b/profile-widget/profilewidget2.h index 395832d40..51cf2f28c 100644 --- a/profile-widget/profilewidget2.h +++ b/profile-widget/profilewidget2.h @@ -112,8 +112,10 @@ slots: // Necessary to call from QAction's signals. void picturesAdded(dive *d, QVector<PictureObj> pics); void setPlanState(); void setAddState(); + void pointsReset(); void pointInserted(const QModelIndex &parent, int start, int end); void pointsRemoved(const QModelIndex &, int start, int end); + void pointsMoved(const QModelIndex &, int start, int end, const QModelIndex &destination, int row); void updateThumbnail(QString filename, QImage thumbnail, duration_t duration); void profileChanged(dive *d); void pictureOffsetChanged(dive *d, QString filename, offset_t offset); @@ -256,6 +258,8 @@ private: #ifndef SUBSURFACE_MOBILE void repositionDiveHandlers(); int fixHandlerIndex(DiveHandler *activeHandler); + DiveHandler *createHandle(); + QGraphicsSimpleTextItem *createGas(); #endif friend class DiveHandler; QHash<Qt::Key, QAction *> actionsForKeys; |