aboutsummaryrefslogtreecommitdiffstats
path: root/qt-ui
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2014-05-26 13:28:18 -0700
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-05-26 13:28:18 -0700
commit9cc8e39d425b7f64c4c5c2a4226ba581550076f6 (patch)
treec759a26f54e50d46de25f3fa8a6e57c593dede8d /qt-ui
parenta61c04bb584311fd7ebe397f5e5f5bd159b18b27 (diff)
parentcf3701bbac2f593c6efe046ba15be55bc1360f5b (diff)
downloadsubsurface-9cc8e39d425b7f64c4c5c2a4226ba581550076f6.tar.gz
Merge branch 'Planner'
Diffstat (limited to 'qt-ui')
-rw-r--r--qt-ui/diveplanner.cpp12
-rw-r--r--qt-ui/diveplanner.h2
-rw-r--r--qt-ui/maintab.cpp2
-rw-r--r--qt-ui/mainwindow.cpp86
-rw-r--r--qt-ui/mainwindow.h3
-rw-r--r--qt-ui/models.cpp6
-rw-r--r--qt-ui/models.h2
-rw-r--r--qt-ui/profile/profilewidget2.cpp21
8 files changed, 82 insertions, 52 deletions
diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp
index 312a5ffff..c26aa9569 100644
--- a/qt-ui/diveplanner.cpp
+++ b/qt-ui/diveplanner.cpp
@@ -59,13 +59,15 @@ void DivePlannerPointsModel::removeSelectedPoints(const QVector<int> &rows)
endRemoveRows();
}
-void DivePlannerPointsModel::createSimpleDive()
+void DivePlannerPointsModel::createSimpleDive(bool planner)
{
// plannerModel->addStop(0, 0, O2_IN_AIR, 0, 0);
plannerModel->addStop(M_OR_FT(15, 45), 1 * 60, O2_IN_AIR, 0, 0, true);
plannerModel->addStop(M_OR_FT(15, 45), 40 * 60, O2_IN_AIR, 0, 0, true);
- plannerModel->addStop(M_OR_FT(5, 15), 42 * 60, O2_IN_AIR, 0, 0, true);
- plannerModel->addStop(M_OR_FT(5, 15), 45 * 60, O2_IN_AIR, 0, 0, true);
+ if (!planner) {
+ plannerModel->addStop(M_OR_FT(5, 15), 42 * 60, O2_IN_AIR, 0, 0, true);
+ plannerModel->addStop(M_OR_FT(5, 15), 45 * 60, O2_IN_AIR, 0, 0, true);
+ }
}
void DivePlannerPointsModel::loadFromDive(dive *d)
@@ -215,9 +217,7 @@ DivePlannerWidget::DivePlannerWidget(QWidget *parent, Qt::WindowFlags f) : QWidg
QTableView *view = ui.cylinderTableWidget->view();
view->setColumnHidden(CylindersModel::START, true);
view->setColumnHidden(CylindersModel::END, true);
-#ifdef ENABLE_PLANNER
view->setColumnHidden(CylindersModel::DEPTH, false);
-#endif
view->setItemDelegateForColumn(CylindersModel::TYPE, new TankInfoDelegate(this));
connect(ui.cylinderTableWidget, SIGNAL(addButtonClicked()), DivePlannerPointsModel::instance(), SLOT(addCylinder_clicked()));
connect(ui.tableWidget, SIGNAL(addButtonClicked()), DivePlannerPointsModel::instance(), SLOT(addStop()));
@@ -783,7 +783,7 @@ void DivePlannerPointsModel::createTemporaryPlan()
#endif
if (plannerModel->recalcQ())
plan(&diveplan, &cache, &tempDive, isPlanner());
- if (mode == ADD) {
+ if (mode == ADD || mode == PLAN) {
// copy the samples and events, but don't overwrite the cylinders
copy_samples(tempDive, current_dive);
copy_events(tempDive, current_dive);
diff --git a/qt-ui/diveplanner.h b/qt-ui/diveplanner.h
index 4aa5f0094..781d7c741 100644
--- a/qt-ui/diveplanner.h
+++ b/qt-ui/diveplanner.h
@@ -39,7 +39,7 @@ public:
void removeSelectedPoints(const QVector<int> &rows);
void setPlanMode(Mode mode);
bool isPlanner();
- void createSimpleDive();
+ void createSimpleDive(bool planner = false);
void clear();
Mode currentMode() const;
bool setRecalc(bool recalc);
diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp
index 2bb261448..34be53a90 100644
--- a/qt-ui/maintab.cpp
+++ b/qt-ui/maintab.cpp
@@ -88,9 +88,7 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent),
ui.cylinders->view()->setItemDelegateForColumn(CylindersModel::TYPE, new TankInfoDelegate(this));
ui.weights->view()->setItemDelegateForColumn(WeightModel::TYPE, new WSInfoDelegate(this));
-#ifdef ENABLE_PLANNER
ui.cylinders->view()->setColumnHidden(CylindersModel::DEPTH, true);
-#endif
completers.buddy = new QCompleter(&buddyModel, ui.buddy);
completers.divemaster = new QCompleter(&diveMasterModel, ui.divemaster);
completers.location = new QCompleter(&locationModel, ui.location);
diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp
index 19a16a886..63abd1d30 100644
--- a/qt-ui/mainwindow.cpp
+++ b/qt-ui/mainwindow.cpp
@@ -20,6 +20,7 @@
#include <QStringList>
#include <QSettings>
#include <QShortcut>
+#include <fcntl.h>
#include "divelistview.h"
#include "starwidget.h"
@@ -87,9 +88,6 @@ MainWindow::MainWindow() : QMainWindow(),
ui.ListWidget->scrollTo(ui.ListWidget->model()->index(0, 0), QAbstractItemView::PositionAtCenter);
ui.divePlannerWidget->settingsChanged();
-#ifndef ENABLE_PLANNER
- ui.menuLog->removeAction(ui.actionDivePlanner);
-#endif
#ifdef NO_MARBLE
ui.layoutWidget->hide();
ui.menuView->removeAction(ui.actionViewGlobe);
@@ -298,29 +296,6 @@ void MainWindow::enableDcShortcuts()
ui.actionNextDC->setShortcut(Qt::Key_Right);
}
-void MainWindow::on_actionDivePlanner_triggered()
-{
- int i;
- struct dive *dive;
- if (DivePlannerPointsModel::instance()->currentMode() != DivePlannerPointsModel::NOTHING ||
- ui.InfoWidget->isEditing()) {
- QMessageBox::warning(this, tr("Warning"), tr("Please save or cancel the current dive edit before trying to plan a dive."));
- return;
- }
- disableDcShortcuts();
- DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::PLAN);
- DivePlannerPointsModel::instance()->clear();
- CylindersModel::instance()->clear();
- for_each_dive (i, dive) {
- if (dive->selected) {
- DivePlannerPointsModel::instance()->copyCylindersFrom(dive);
- CylindersModel::instance()->copyFromDive(dive);
- break;
- }
- }
- ui.infoPane->setCurrentIndex(PLANNERWIDGET);
-}
-
void MainWindow::showProfile()
{
enableDcShortcuts();
@@ -381,18 +356,18 @@ void MainWindow::on_actionEditDeviceNames_triggered()
DiveComputerManagementDialog::instance()->show();
}
-void MainWindow::on_actionAddDive_triggered()
+bool MainWindow::plannerStateClean()
{
if (DivePlannerPointsModel::instance()->currentMode() != DivePlannerPointsModel::NOTHING ||
ui.InfoWidget->isEditing()) {
QMessageBox::warning(this, tr("Warning"), tr("Please save or cancel the current dive edit before trying to add a dive."));
- return;
+ return false;
}
- dive_list()->rememberSelection();
- dive_list()->unselectDives();
- disableDcShortcuts();
- DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::ADD);
+ return true;
+}
+void MainWindow::createFakeDiveForAddAndPlan()
+{
// now cheat - create one dive that we use to store the info tab data in
//TODO: C-function create_temporary_dive ?
struct dive *dive = alloc_dive();
@@ -405,8 +380,53 @@ void MainWindow::on_actionAddDive_triggered()
// this isn't in the UI yet, so let's call the C helper function - we'll fix this up when
// accepting the dive
select_dive(get_divenr(dive));
- ui.InfoWidget->setCurrentIndex(0);
ui.InfoWidget->updateDiveInfo(selected_dive);
+}
+
+void MainWindow::on_actionDivePlanner_triggered()
+{
+ if(!plannerStateClean())
+ return;
+
+ dive_list()->rememberSelection();
+ dive_list()->unselectDives();
+
+ DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::ADD);
+ DivePlannerPointsModel::instance()->clear();
+ CylindersModel::instance()->clear();
+ int i;
+ struct dive *dive;
+ for_each_dive (i, dive) {
+ if (dive->selected) {
+ DivePlannerPointsModel::instance()->copyCylindersFrom(dive);
+ CylindersModel::instance()->copyFromDive(dive);
+ break;
+ }
+ }
+ createFakeDiveForAddAndPlan();
+
+ ui.InfoWidget->setCurrentIndex(0);
+ ui.infoPane->setCurrentIndex(MAINTAB);
+
+ ui.newProfile->setPlanState();
+ ui.infoPane->setCurrentIndex(PLANNERWIDGET);
+ DivePlannerPointsModel::instance()->clear();
+ DivePlannerPointsModel::instance()->createSimpleDive(true);
+ ui.ListWidget->reload(DiveTripModel::CURRENT);
+}
+
+void MainWindow::on_actionAddDive_triggered()
+{
+ if(!plannerStateClean())
+ return;
+
+ dive_list()->rememberSelection();
+ dive_list()->unselectDives();
+ DivePlannerPointsModel::instance()->setPlanMode(DivePlannerPointsModel::ADD);
+
+ createFakeDiveForAddAndPlan();
+
+ ui.InfoWidget->setCurrentIndex(0);
ui.InfoWidget->addDiveStarted();
ui.infoPane->setCurrentIndex(MAINTAB);
diff --git a/qt-ui/mainwindow.h b/qt-ui/mainwindow.h
index a658fe3cc..8bb62b933 100644
--- a/qt-ui/mainwindow.h
+++ b/qt-ui/mainwindow.h
@@ -172,6 +172,9 @@ private:
void updateLastUsedDir(const QString &s);
bool filesAsArguments;
UpdateManager *updateManager;
+
+ bool plannerStateClean();
+ void createFakeDiveForAddAndPlan();
};
#endif // MAINWINDOW_H
diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp
index 2bc690eb9..4d9e19190 100644
--- a/qt-ui/models.cpp
+++ b/qt-ui/models.cpp
@@ -67,9 +67,7 @@ CylindersModel::CylindersModel(QObject *parent) : current(0), rows(0)
{
// enum {REMOVE, TYPE, SIZE, WORKINGPRESS, START, END, O2, HE, DEPTH};
setHeaderDataStrings(QStringList() << "" << tr("Type") << tr("Size") << tr("WorkPress") << tr("StartPress") << tr("EndPress") << trUtf8("O" UTF8_SUBSCRIPT_2 "%") << tr("He%")
-#ifdef ENABLE_PLANNER
<< tr("Switch at")
-#endif
);
}
@@ -145,11 +143,9 @@ QVariant CylindersModel::data(const QModelIndex &index, int role) const
case HE:
ret = percent_string(cyl->gasmix.he);
break;
-#ifdef ENABLE_PLANNER
case DEPTH:
ret = get_depth_string(cyl->depth, true);
break;
-#endif
}
break;
case Qt::DecorationRole:
@@ -265,13 +261,11 @@ bool CylindersModel::setData(const QModelIndex &index, const QVariant &value, in
changed = true;
}
break;
-#ifdef ENABLE_PLANNER
case DEPTH:
if (CHANGED()) {
cyl->depth = string_to_depth(vString.toUtf8().data());
changed = true;
}
-#endif
}
dataChanged(index, index);
if (addDiveMode)
diff --git a/qt-ui/models.h b/qt-ui/models.h
index 34d7d4827..17be8cbc9 100644
--- a/qt-ui/models.h
+++ b/qt-ui/models.h
@@ -102,9 +102,7 @@ public:
END,
O2,
HE,
-#ifdef ENABLE_PLANNER
DEPTH,
-#endif
COLUMNS
};
diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp
index 2de64e71f..28a07404f 100644
--- a/qt-ui/profile/profilewidget2.cpp
+++ b/qt-ui/profile/profilewidget2.cpp
@@ -363,7 +363,7 @@ void ProfileWidget2::plotDives(QList<dive *> dives)
//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) {
+ if (currentState == ADD || currentState == PLAN) {
DivePlannerPointsModel *plannerModel = DivePlannerPointsModel::instance();
plannerModel->createTemporaryPlan();
if (!plannerModel->getDiveplan().dp) {
@@ -509,7 +509,7 @@ void ProfileWidget2::plotDives(QList<dive *> dives)
prefs.animation = animSpeedBackup;
}
- if (currentState == ADD) { // TODO: figure a way to move this from here.
+ if (currentState == ADD || currentState == PLAN) { // TODO: figure a way to move this from here.
repositionDiveHandlers();
DivePlannerPointsModel *model = DivePlannerPointsModel::instance();
model->deleteTemporaryPlan();
@@ -770,8 +770,25 @@ void ProfileWidget2::setPlanState()
{
if (currentState == PLAN)
return;
+
setProfileState();
disconnectTemporaryConnections();
+ //TODO: Move this method to another place, shouldn't be on mainwindow.
+ MainWindow::instance()->disableDcShortcuts();
+ actionsForKeys[Qt::Key_Left]->setShortcut(Qt::Key_Left);
+ actionsForKeys[Qt::Key_Right]->setShortcut(Qt::Key_Right);
+ actionsForKeys[Qt::Key_Up]->setShortcut(Qt::Key_Up);
+ actionsForKeys[Qt::Key_Down]->setShortcut(Qt::Key_Down);
+ actionsForKeys[Qt::Key_Escape]->setShortcut(Qt::Key_Escape);
+ actionsForKeys[Qt::Key_Delete]->setShortcut(Qt::Key_Delete);
+
+ 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 = PLAN; /* enable the add state. */
setBackgroundBrush(QColor(Qt::green).light());