diff options
author | Robert C. Helling <helling@atdotde.de> | 2014-11-26 14:22:41 +0100 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2014-12-01 14:23:45 -0800 |
commit | fb265c292994d9afa252b5236a805f84cb0d4554 (patch) | |
tree | cb03a4d7f76cfa057948db6386fcb8f96780d350 | |
parent | 96a94f1a19d22fa0432e10495315ce3e98b35c4f (diff) | |
download | subsurface-fb265c292994d9afa252b5236a805f84cb0d4554.tar.gz |
Context menu entry to change setpoint
This patch adds a context menu entry to add a setpoint change
event. In particular, this can be used to turn a logged dive into
a CCR dive.
Signed-off-by: Robert C. Helling <helling@atdotde.de>
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r-- | profile.c | 34 | ||||
-rw-r--r-- | qt-ui/profile/profilewidget2.cpp | 10 | ||||
-rw-r--r-- | qt-ui/profile/profilewidget2.h | 1 | ||||
-rw-r--r-- | qt-ui/simplewidgets.cpp | 7 |
4 files changed, 51 insertions, 1 deletions
@@ -373,6 +373,18 @@ static int set_cylinder_index(struct plot_info *pi, int i, int cylinderindex, un return i; } +static int set_setpoint(struct plot_info *pi, int i, int setpoint, unsigned int end) +{ + while (i < pi->nr) { + struct plot_data *entry = pi->entry + i; + if (entry->sec > end) + break; + entry->o2pressure.mbar = setpoint; + i++; + } + return i; +} + /* normally the first cylinder has index 0... if not, we need to fix this up here */ static int set_first_cylinder_index(struct plot_info *pi, int i, int cylinderindex, unsigned int end) { @@ -407,6 +419,27 @@ static void check_gas_change_events(struct dive *dive, struct divecomputer *dc, set_cylinder_index(pi, i, cylinderindex, ~0u); } +static void check_setpoint_events(struct dive *dive, struct divecomputer *dc, struct plot_info *pi) +{ + int i = 0; + pressure_t setpoint; + + setpoint.mbar = 0; + struct event *ev = get_next_event(dc->events, "SP change"); + + if (!ev) + return; + + do { + i = set_setpoint(pi, i, setpoint.mbar, ev->time.seconds); + setpoint.mbar = ev->value; + if(setpoint.mbar) + dc->dctype = CCR; + ev = get_next_event(ev->next, "SP change"); + } while (ev); + set_setpoint(pi, i, setpoint.mbar, ~0u); +} + struct plot_info calculate_max_limits_new(struct dive *dive, struct divecomputer *dc) { @@ -1014,6 +1047,7 @@ void create_plot_info_new(struct dive *dive, struct divecomputer *dc, struct plo last_pi_entry_new = populate_plot_entries(dive, dc, pi); check_gas_change_events(dive, dc, pi); /* Populate the gas index from the gas change events */ + check_setpoint_events(dive, dc, pi); /* Populate setpoints */ setup_gas_sensor_pressure(dive, dc, pi); /* Try to populate our gas pressure knowledge */ populate_pressure_information(dive, dc, pi, false); /* .. calculate missing pressure entries for all gasses except o2 */ if (dc->dctype == CCR) /* For CCR dives.. */ diff --git a/qt-ui/profile/profilewidget2.cpp b/qt-ui/profile/profilewidget2.cpp index e1892b2fa..347cc1bf8 100644 --- a/qt-ui/profile/profilewidget2.cpp +++ b/qt-ui/profile/profilewidget2.cpp @@ -1128,6 +1128,8 @@ void ProfileWidget2::contextMenuEvent(QContextMenuEvent *event) gasChange->addAction(action); } } + QAction *setpointAction = m.addAction(tr("Add set-point change"), this, SLOT(addSetpointChange())); + setpointAction->setData(event->globalPos()); QAction *action = m.addAction(tr("Add bookmark"), this, SLOT(addBookmark())); action->setData(event->globalPos()); if (DiveEventItem *item = dynamic_cast<DiveEventItem *>(sceneItem)) { @@ -1282,6 +1284,14 @@ void ProfileWidget2::addBookmark() replot(); } +void ProfileWidget2::addSetpointChange() +{ + QAction *action = qobject_cast<QAction *>(sender()); + QPointF scenePos = mapToScene(mapFromGlobal(action->data().toPoint())); + SetpointDialog::instance()->setpointData(current_dc, timeAxis->valueAt(scenePos)); + SetpointDialog::instance()->show(); +} + void ProfileWidget2::changeGas() { QAction *action = qobject_cast<QAction *>(sender()); diff --git a/qt-ui/profile/profilewidget2.h b/qt-ui/profile/profilewidget2.h index 4c7951533..a1f216e48 100644 --- a/qt-ui/profile/profilewidget2.h +++ b/qt-ui/profile/profilewidget2.h @@ -92,6 +92,7 @@ slots: // Necessary to call from QAction's signals. void setPlanState(); void setAddState(); void changeGas(); + void addSetpointChange(); void addBookmark(); void hideEvents(); void unhideEvents(); diff --git a/qt-ui/simplewidgets.cpp b/qt-ui/simplewidgets.cpp index 6ab4566fd..91d003dc9 100644 --- a/qt-ui/simplewidgets.cpp +++ b/qt-ui/simplewidgets.cpp @@ -172,13 +172,18 @@ void SetpointDialog::setpointData(struct divecomputer *divecomputer, int second) { dc = divecomputer; time = second; + qDebug() << second << time; } void SetpointDialog::buttonClicked(QAbstractButton *button) { if (ui.buttonBox->buttonRole(button) == QDialogButtonBox::AcceptRole) { - add_event(dc, time, SAMPLE_EVENT_PO2, 0, ui.spinbox->value(), "SP change"); + qDebug() << time << (int)(1000.0 * ui.spinbox->value()); + add_event(dc, time, SAMPLE_EVENT_PO2, 0, (int)(1000.0 * ui.spinbox->value()), "SP change"); } + mark_divelist_changed(true); + MainWindow::instance()->graphics()->replot(); + } SetpointDialog::SetpointDialog(QWidget *parent) : QDialog(parent) |