summaryrefslogtreecommitdiffstats
path: root/qt-ui
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2013-09-19 23:02:50 -0500
committerGravatar Dirk Hohndel <dirk@hohndel.org>2013-09-19 23:05:17 -0500
commit46c23c53a12485e3e59e8d52bf9ba6943bdfc200 (patch)
tree4292ce1dcf5ad7f908572dd20138db558a465dba /qt-ui
parent169d9e9c015efa779ec67abdfb27ca6c462c3d63 (diff)
parent6881f527390ed7e386fee60176c9b8bba9bfb316 (diff)
downloadsubsurface-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.cpp41
-rw-r--r--qt-ui/diveplanner.h16
-rw-r--r--qt-ui/maintab.cpp29
-rw-r--r--qt-ui/maintab.h3
-rw-r--r--qt-ui/mainwindow.cpp29
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()