summaryrefslogtreecommitdiffstats
path: root/qt-ui
diff options
context:
space:
mode:
Diffstat (limited to 'qt-ui')
-rw-r--r--qt-ui/diveplanner.cpp26
-rw-r--r--qt-ui/diveplanner.h5
-rw-r--r--qt-ui/mainwindow.cpp3
-rw-r--r--qt-ui/profile/profilewidget2.cpp57
-rw-r--r--qt-ui/profile/profilewidget2.h1
5 files changed, 58 insertions, 34 deletions
diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp
index f4f3d5036..6e11f84aa 100644
--- a/qt-ui/diveplanner.cpp
+++ b/qt-ui/diveplanner.cpp
@@ -150,13 +150,6 @@ DivePlannerGraphics::DivePlannerGraphics(QWidget *parent) : QGraphicsView(parent
ADD_ACTION(Qt::Key_Right, keyRightAction());
#undef ADD_ACTION
- connect(plannerModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, SLOT(drawProfile()));
- connect(plannerModel, SIGNAL(cylinderModelEdited()), this, SLOT(drawProfile()));
-
- connect(plannerModel, SIGNAL(rowsInserted(const QModelIndex &, int, int)),
- this, SLOT(pointInserted(const QModelIndex &, int, int)));
- connect(plannerModel, SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
- this, SLOT(pointsRemoved(const QModelIndex &, int, int)));
setRenderHint(QPainter::Antialiasing);
}
@@ -504,23 +497,6 @@ void DivePlannerGraphics::drawProfile()
depthLine->updateTicks();
}
- // Re-position the user generated dive handlers
- int last = 0;
- for (int i = 0; i < plannerModel->rowCount(); i++) {
- struct divedatapoint datapoint = plannerModel->at(i);
- if (datapoint.time == 0) // those are the magic entries for tanks
- continue;
- DiveHandler *h = handles.at(i);
- h->setPos(timeLine->posAtValue(datapoint.time / 60), depthLine->posAtValue(datapoint.depth));
- QPointF p1 = (last == i) ? QPointF(timeLine->posAtValue(0), depthLine->posAtValue(0)) : handles[last]->pos();
- QPointF p2 = handles[i]->pos();
- QLineF line(p1, p2);
- QPointF pos = line.pointAt(0.5);
- gases[i]->setPos(pos);
- gases[i]->setText(dpGasToStr(plannerModel->at(i)));
- last = i;
- }
-
// (re-) create the profile with different colors for segments that were
// entered vs. segments that were calculated
double lastx = timeLine->posAtValue(0);
@@ -1379,7 +1355,7 @@ void DivePlannerPointsModel::remove(const QModelIndex &index)
endRemoveRows();
}
-struct diveplan DivePlannerPointsModel::getDiveplan()
+struct diveplan& DivePlannerPointsModel::getDiveplan()
{
return diveplan;
}
diff --git a/qt-ui/diveplanner.h b/qt-ui/diveplanner.h
index 94fcdeb53..a61f9520d 100644
--- a/qt-ui/diveplanner.h
+++ b/qt-ui/diveplanner.h
@@ -55,7 +55,7 @@ public:
void editStop(int row, divedatapoint newData);
divedatapoint at(int row);
int size();
- struct diveplan getDiveplan();
+ struct diveplan& getDiveplan();
QStringList &getGasList();
QVector<QPair<int, int> > collectGases(dive *d);
int lastEnteredPoint();
@@ -276,4 +276,7 @@ private:
Ui::DivePlanner ui;
};
+QString gasToStr(const int o2Permille, const int hePermille);
+QString dpGasToStr(const divedatapoint &p);
+
#endif // DIVEPLANNER_H
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 33946f34f..9b00db2f1 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -410,10 +410,11 @@ void MainWindow::on_actionAddDive_triggered()
ui.InfoWidget->updateDiveInfo(selected_dive);
ui.InfoWidget->addDiveStarted();
ui.infoPane->setCurrentIndex(MAINTAB);
+
+ ui.newProfile->setAddState();
DivePlannerPointsModel::instance()->clear();
DivePlannerPointsModel::instance()->createSimpleDive();
ui.ListWidget->reload(DiveTripModel::CURRENT);
- ui.newProfile->setAddState();
}
void MainWindow::on_actionRenumber_triggered()
diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp
index 2ece177a7..6e565e77e 100644
--- a/qt-ui/profile/profilewidget2.cpp
+++ b/qt-ui/profile/profilewidget2.cpp
@@ -138,7 +138,7 @@ void ProfileWidget2::addItemsToScene()
scene()->addItem(rulerItem);
scene()->addItem(rulerItem->sourceNode());
scene()->addItem(rulerItem->destNode());
- Q_FOREACH(DiveCalculatedTissue * tissue, allTissues) {
+ Q_FOREACH (DiveCalculatedTissue * tissue, allTissues) {
scene()->addItem(tissue);
}
}
@@ -343,6 +343,19 @@ void ProfileWidget2::plotDives(QList<dive *> dives)
if (!d)
return;
+ //TODO: This is a temporary hack to help me understand the Planner.
+ // It seems that each time the 'createTemporaryPlan' runs, a new
+ // dive is created, and thus, we can plot that. hm...
+ if (currentState == ADD) {
+ DivePlannerPointsModel *plannerModel = DivePlannerPointsModel::instance();
+ plannerModel->createTemporaryPlan();
+ if (!plannerModel->getDiveplan().dp) {
+ plannerModel->deleteTemporaryPlan();
+ return;
+ }
+ }
+ //END
+
int animSpeedBackup = -1;
if (firstCall && MainWindow::instance()->filesFromCommandLine()) {
animSpeedBackup = prefs.animation;
@@ -478,6 +491,12 @@ void ProfileWidget2::plotDives(QList<dive *> dives)
if (MainWindow::instance()->filesFromCommandLine() && animSpeedBackup != -1) {
prefs.animation = animSpeedBackup;
}
+
+ if (currentState == ADD) { // TODO: figure a way to move this from here.
+ repositionDiveHandlers();
+ DivePlannerPointsModel *model = DivePlannerPointsModel::instance();
+ model->deleteTemporaryPlan();
+ }
}
void ProfileWidget2::settingsChanged()
@@ -644,11 +663,6 @@ void ProfileWidget2::setProfileState()
if (currentState == PROFILE)
return;
- if (dive_table.nr == 0) { // oops, called to plot something with zero dives. bail out.
- setEmptyState();
- return;
- }
-
disconnectTemporaryConnections();
currentState = PROFILE;
MainWindow::instance()->setToolButtonsEnabled(true);
@@ -709,7 +723,15 @@ void ProfileWidget2::setAddState()
if (currentState == ADD)
return;
+ setProfileState();
disconnectTemporaryConnections();
+ DivePlannerPointsModel *plannerModel = DivePlannerPointsModel::instance();
+ connect(plannerModel, SIGNAL(dataChanged(QModelIndex, QModelIndex)), this, SLOT(replot()));
+ connect(plannerModel, SIGNAL(cylinderModelEdited()), this, SLOT(replot()));
+ connect(plannerModel, SIGNAL(rowsInserted(const QModelIndex &, int, int)),
+ this, SLOT(pointInserted(const QModelIndex &, int, int)));
+ connect(plannerModel, SIGNAL(rowsRemoved(const QModelIndex &, int, int)),
+ this, SLOT(pointsRemoved(const QModelIndex &, int, int)));
/* show the same stuff that the profile shows. */
currentState = ADD; /* enable the add state. */
setBackgroundBrush(QColor(Qt::blue).light());
@@ -719,7 +741,7 @@ void ProfileWidget2::setPlanState()
{
if (currentState == PLAN)
return;
-
+ setProfileState();
disconnectTemporaryConnections();
/* show the same stuff that the profile shows. */
currentState = PLAN; /* enable the add state. */
@@ -964,3 +986,24 @@ void ProfileWidget2::pointsRemoved(const QModelIndex &, int start, int end)
scene()->clearSelection();
replot();
}
+
+void ProfileWidget2::repositionDiveHandlers()
+{
+ DivePlannerPointsModel *plannerModel = DivePlannerPointsModel::instance();
+ // Re-position the user generated dive handlers
+ int last = 0;
+ for (int i = 0; i < plannerModel->rowCount(); i++) {
+ struct divedatapoint datapoint = plannerModel->at(i);
+ if (datapoint.time == 0) // those are the magic entries for tanks
+ continue;
+ DiveHandler *h = handles.at(i);
+ h->setPos(timeAxis->posAtValue(datapoint.time), profileYAxis->posAtValue(datapoint.depth));
+ QPointF p1 = (last == i) ? QPointF(timeAxis->posAtValue(0), profileYAxis->posAtValue(0)) : handles[last]->pos();
+ QPointF p2 = handles[i]->pos();
+ QLineF line(p1, p2);
+ QPointF pos = line.pointAt(0.5);
+ gases[i]->setPos(pos);
+ gases[i]->setText(dpGasToStr(plannerModel->at(i)));
+ last = i;
+ }
+}
diff --git a/qt-ui/profile/profilewidget2.h b/qt-ui/profile/profilewidget2.h
index 2ba1cd01a..9b9802ed0 100644
--- a/qt-ui/profile/profilewidget2.h
+++ b/qt-ui/profile/profilewidget2.h
@@ -145,6 +145,7 @@ private:
//specifics for ADD and PLAN
QList<DiveHandler *> handles;
QList<QGraphicsSimpleTextItem *> gases;
+ void repositionDiveHandlers();
};
#endif // PROFILEWIDGET2_H