diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2013-09-19 23:02:50 -0500 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2013-09-19 23:05:17 -0500 |
commit | 46c23c53a12485e3e59e8d52bf9ba6943bdfc200 (patch) | |
tree | 4292ce1dcf5ad7f908572dd20138db558a465dba /qt-ui | |
parent | 169d9e9c015efa779ec67abdfb27ca6c462c3d63 (diff) | |
parent | 6881f527390ed7e386fee60176c9b8bba9bfb316 (diff) | |
download | subsurface-46c23c53a12485e3e59e8d52bf9ba6943bdfc200.tar.gz |
Merge branch 'addDive'
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui')
-rw-r--r-- | qt-ui/diveplanner.cpp | 41 | ||||
-rw-r--r-- | qt-ui/diveplanner.h | 16 | ||||
-rw-r--r-- | qt-ui/maintab.cpp | 29 | ||||
-rw-r--r-- | qt-ui/maintab.h | 3 | ||||
-rw-r--r-- | qt-ui/mainwindow.cpp | 29 |
5 files changed, 86 insertions, 32 deletions
diff --git a/qt-ui/diveplanner.cpp b/qt-ui/diveplanner.cpp index 612c29dee..36cd7f144 100644 --- a/qt-ui/diveplanner.cpp +++ b/qt-ui/diveplanner.cpp @@ -4,6 +4,7 @@ #include "modeldelegates.h" #include "ui_diveplanner.h" #include "mainwindow.h" +#include "maintab.h" #include "tableview.h" #include "graphicsview-common.h" @@ -164,7 +165,7 @@ DivePlannerGraphics::DivePlannerGraphics(QWidget* parent): QGraphicsView(parent) gasListView->hide(); connect(gasListView, SIGNAL(activated(QModelIndex)), this, SLOT(selectGas(QModelIndex))); - connect(plannerModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(createDecoStops())); + connect(plannerModel, SIGNAL(dataChanged(QModelIndex,QModelIndex)), this, SLOT(drawProfile())); connect(plannerModel, SIGNAL(rowsInserted(const QModelIndex&,int,int)), this, SLOT(pointInserted(const QModelIndex&, int, int))); @@ -185,7 +186,7 @@ void DivePlannerGraphics::pointInserted(const QModelIndex& parent, int start , i connect(gasChooseBtn, SIGNAL(clicked()), this, SLOT(prepareSelectGas())); gases << gasChooseBtn; - createDecoStops(); + drawProfile(); } void DivePlannerGraphics::keyDownAction() @@ -219,7 +220,7 @@ void DivePlannerGraphics::keyUpAction() plannerModel->editStop(row, dp); } } - createDecoStops(); + drawProfile(); } void DivePlannerGraphics::keyLeftAction() @@ -303,7 +304,7 @@ void DivePlannerGraphics::pointsRemoved(const QModelIndex& , int start, int end) gases.pop_back(); } scene()->clearSelection(); - createDecoStops(); + drawProfile(); } bool intLessThan(int a, int b){ @@ -343,7 +344,7 @@ void DivePlannerGraphics::increaseDepth() return; depthLine->setMaximum( depthLine->maximum() + 10); depthLine->updateTicks(); - createDecoStops(); + drawProfile(); } void DivePlannerGraphics::increaseTime() @@ -351,7 +352,7 @@ void DivePlannerGraphics::increaseTime() minMinutes += 10; timeLine->setMaximum( minMinutes ); timeLine->updateTicks(); - createDecoStops(); + drawProfile(); } void DivePlannerGraphics::decreaseDepth() @@ -370,7 +371,7 @@ void DivePlannerGraphics::decreaseDepth() } depthLine->setMaximum(depthLine->maximum() - 10); depthLine->updateTicks(); - createDecoStops(); + drawProfile(); } void DivePlannerGraphics::decreaseTime() @@ -385,7 +386,7 @@ void DivePlannerGraphics::decreaseTime() minMinutes -= 10; timeLine->setMaximum(timeLine->maximum() -10); timeLine->updateTicks(); - createDecoStops(); + drawProfile(); } void DivePlannerGraphics::mouseDoubleClickEvent(QMouseEvent* event) @@ -415,7 +416,7 @@ void DivePlannerGraphics::selectGas(const QModelIndex& index) gasListView->hide(); } -void DivePlannerGraphics::createDecoStops() +void DivePlannerGraphics::drawProfile() { qDeleteAll(lines); lines.clear(); @@ -552,7 +553,7 @@ void DivePlannerGraphics::moveActiveHandler(const QPointF& mappedPos, const int qDeleteAll(lines); lines.clear(); - createDecoStops(); + drawProfile(); } @@ -620,7 +621,7 @@ void DivePlannerGraphics::mouseReleaseEvent(QMouseEvent* event) activeDraggedHandler->setPos(QPointF(xpos, ypos)); activeDraggedHandler = 0; - createDecoStops(); + drawProfile(); } } @@ -908,6 +909,16 @@ void DivePlannerWidget::lastStopChanged(bool checked) plannerModel->setLastStop6m(checked); } +void DivePlannerPointsModel::setPlanMode(bool isPlan) +{ + mode = isPlan ? PLAN : ADD; +} + +bool DivePlannerPointsModel::isPlanner() +{ + return mode == PLAN; +} + int DivePlannerPointsModel::columnCount(const QModelIndex& parent) const { return COLUMNS; @@ -1116,7 +1127,7 @@ struct diveplan DivePlannerPointsModel::getDiveplan() void DivePlannerPointsModel::cancelPlan() { - if(rowCount()){ + if(mode == PLAN && rowCount()){ if (QMessageBox::warning(mainWindow(), tr("Save the Plan?"), tr("You have a working plan, \n are you sure that you wanna cancel it?"), QMessageBox::Ok | QMessageBox::Cancel) != QMessageBox::Ok){ @@ -1152,7 +1163,9 @@ void DivePlannerPointsModel::createTemporaryPlan() char *cache = NULL; tempDive = NULL; char *errorString = NULL; - plan(&diveplan, &cache, &tempDive, &errorString); + plan(&diveplan, &cache, &tempDive, isPlanner(), &errorString); + if (mode == ADD) + copy_samples(tempDive, current_dive); #if DEBUG_PLAN dump_plan(&diveplan); #endif @@ -1185,7 +1198,7 @@ void DivePlannerPointsModel::createPlan() char *errorString = NULL; createTemporaryPlan(); - plan(&diveplan, &cache, &tempDive, &errorString); + plan(&diveplan, &cache, &tempDive, isPlanner(), &errorString); mark_divelist_changed(TRUE); // Remove and clean the diveplan, so we don't delete diff --git a/qt-ui/diveplanner.h b/qt-ui/diveplanner.h index 7f32290cb..12b01cdeb 100644 --- a/qt-ui/diveplanner.h +++ b/qt-ui/diveplanner.h @@ -29,9 +29,12 @@ public: virtual QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const; virtual int rowCount(const QModelIndex& parent = QModelIndex()) const; virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; - virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); - virtual Qt::ItemFlags flags(const QModelIndex& index) const; + virtual bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole); + virtual Qt::ItemFlags flags(const QModelIndex& index) const; void removeSelectedPoints(const QVector<int>& rows); + enum Modes { PLAN, ADD }; + void setPlanMode(bool); + bool isPlanner(); /** * @return the row number. @@ -50,9 +53,9 @@ public slots: void setLastStop6m(bool value); void createPlan(); void remove(const QModelIndex& index); - void cancelPlan(); - void createTemporaryPlan(); - void deleteTemporaryPlan(); + void cancelPlan(); + void createTemporaryPlan(); + void deleteTemporaryPlan(); signals: void planCreated(); @@ -61,6 +64,7 @@ signals: private: explicit DivePlannerPointsModel(QObject* parent = 0); struct diveplan diveplan; + Modes mode; QVector<divedatapoint> divepoints; struct dive *tempDive; void deleteTemporaryPlan(struct divedatapoint *dp); @@ -143,7 +147,7 @@ private slots: void increaseDepth(); void decreaseTime(); void decreaseDepth();; - void createDecoStops(); + void drawProfile(); void prepareSelectGas(); void selectGas(const QModelIndex& index); void pointInserted(const QModelIndex&, int start, int end); diff --git a/qt-ui/maintab.cpp b/qt-ui/maintab.cpp index 7c933931d..d35fefcf9 100644 --- a/qt-ui/maintab.cpp +++ b/qt-ui/maintab.cpp @@ -14,6 +14,7 @@ #include "modeldelegates.h" #include "globe.h" #include "completionmodels.h" +#include "diveplanner.h" #include <QLabel> #include <QCompleter> @@ -90,9 +91,15 @@ MainTab::MainTab(QWidget *parent) : QTabWidget(parent), ui->suit->setCompleter(completers.suit); } +void MainTab::addDiveStarted() +{ + enableEdition(); + editMode = ADD; +} + void MainTab::enableEdition() { - if (!selected_dive) + if (selected_dive < 0 || editMode != NONE) return; mainWindow()->dive_list()->setEnabled(false); @@ -306,6 +313,7 @@ void MainTab::updateDiveInfo(int dive) } else { /* clear the fields */ ui->rating->setCurrentStars(0); + ui->coordinates->clear(); ui->sacText->clear(); ui->otuText->clear(); ui->oxygenHeliumText->clear(); @@ -387,6 +395,13 @@ void MainTab::acceptChanges() mainWindow()->globe()->centerOn(current_dive); } } + if (editMode == ADD) { + // clean up the dive data (get duration, depth information from samples) + fixup_dive(current_dive); + DivePlannerPointsModel::instance()->cancelPlan(); + mainWindow()->showProfile(); + mainWindow()->refreshDisplay(); + } editMode = NONE; QPalette p; @@ -462,6 +477,14 @@ void MainTab::rejectChanges() ui->coordinates->setPalette(p); ui->divemaster->setPalette(p); ui->suit->setPalette(p); + if (editMode == ADD) { + // clean up + delete_single_dive(selected_dive); + selected_dive = -1; + DivePlannerPointsModel::instance()->cancelPlan(); + mainWindow()->showProfile(); + mainWindow()->refreshDisplay(); + } editMode = NONE; } #undef EDIT_TEXT2 @@ -507,7 +530,7 @@ void MainTab::on_location_textChanged(const QString& text) // we are editing a trip dive_trip_t *currentTrip = *mainWindow()->dive_list()->selectedTrips.begin(); EDIT_TEXT(currentTrip->location, text); - } else if (editMode == DIVE){ + } else if (editMode == DIVE || editMode == ADD){ if (!ui->coordinates->isModified() || ui->coordinates->text().trimmed().isEmpty()) { struct dive* dive; @@ -547,7 +570,7 @@ void MainTab::on_notes_textChanged() // we are editing a trip dive_trip_t *currentTrip = *mainWindow()->dive_list()->selectedTrips.begin(); EDIT_TEXT(currentTrip->notes, ui->notes->toPlainText()); - } else if (editMode == DIVE) { + } else if (editMode == DIVE || editMode == ADD) { EDIT_SELECTED_DIVES( EDIT_TEXT(mydive->notes, ui->notes->toPlainText()) ); } markChangedWidget(ui->notes); diff --git a/qt-ui/maintab.h b/qt-ui/maintab.h index 25fe67743..041611b26 100644 --- a/qt-ui/maintab.h +++ b/qt-ui/maintab.h @@ -68,13 +68,14 @@ public slots: void on_visibility_valueChanged(int value); void editCylinderWidget(const QModelIndex& index); void editWeigthWidget(const QModelIndex& index); + void addDiveStarted(); private: Ui::MainTab *ui; WeightModel *weightModel; CylindersModel *cylindersModel; QMap<dive*, NotesBackup> notesBackup; - enum { NONE, DIVE, TRIP } editMode; + enum { NONE, DIVE, TRIP, ADD } editMode; Completers completers; void enableEdition(); }; diff --git a/qt-ui/mainwindow.cpp b/qt-ui/mainwindow.cpp index 8d6315d86..c544dd812 100644 --- a/qt-ui/mainwindow.cpp +++ b/qt-ui/mainwindow.cpp @@ -36,6 +36,8 @@ #include "about.h" #include "printdialog.h" +#include "glib/gi18n.h" + static MainWindow* instance = 0; MainWindow* mainWindow() @@ -209,6 +211,7 @@ void MainWindow::enableDcShortcuts() void MainWindow::on_actionDivePlanner_triggered() { disableDcShortcuts(); + DivePlannerPointsModel::instance()->setPlanMode(true); ui->stackedWidget->setCurrentIndex(1); ui->infoPane->setCurrentIndex(1); } @@ -254,15 +257,25 @@ void MainWindow::on_actionEditDeviceNames_triggered() void MainWindow::on_actionAddDive_triggered() { - struct dive *dive; - dive = alloc_dive(); + // clear the selection + for (int i = 0; i < dive_table.nr; i++) { + struct dive *d = get_dive(i); + if (d && d->selected) + deselect_dive(i); + } + disableDcShortcuts(); + DivePlannerPointsModel::instance()->setPlanMode(false); + // now cheat - create one dive that we use to store the info tab data in + struct dive *dive = alloc_dive(); + dive->when = QDateTime::currentMSecsSinceEpoch() / 1000L; + dive->dc.model = _("manually added dive"); record_dive(dive); - process_dives(FALSE, FALSE); - - ui->InfoWidget->reload(); - ui->globe->reload(); - ui->ListWidget->reload(DiveTripModel::TREE); - ui->ListWidget->setFocus(); + select_dive(get_divenr(dive)); + ui->InfoWidget->updateDiveInfo(selected_dive); + ui->stackedWidget->setCurrentIndex(1); + ui->infoPane->setCurrentIndex(0); + refreshDisplay(); + ui->InfoWidget->addDiveStarted(); } void MainWindow::on_actionRenumber_triggered() |