summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Robert C. Helling <helling@atdotde.de>2017-09-18 16:10:47 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2017-09-20 08:54:41 -0700
commita6f186279fcce9631623b94bfdc00fa3fd071b4c (patch)
tree22e907959336c94887f210da14f7fc5c54496b6d
parent5e9bdce195c1ec3ca077ce75cf2c0a221d6029de (diff)
downloadsubsurface-a6f186279fcce9631623b94bfdc00fa3fd071b4c.tar.gz
Add a checkbox to turn off plan variations
... as those come with a performance penalty Signed-off-by: Robert C. Helling <helling@atdotde.de>
-rw-r--r--core/plannernotes.c9
-rw-r--r--core/pref.h1
-rw-r--r--core/subsurface-qt/SettingsObjectWrapper.cpp19
-rw-r--r--core/subsurface-qt/SettingsObjectWrapper.h4
-rw-r--r--core/subsurfacestartup.c1
-rw-r--r--desktop-widgets/diveplanner.cpp2
-rw-r--r--desktop-widgets/plannerSettings.ui35
-rw-r--r--desktop-widgets/templatelayout.cpp24
-rw-r--r--qt-models/diveplannermodel.cpp88
-rw-r--r--qt-models/diveplannermodel.h1
10 files changed, 121 insertions, 63 deletions
diff --git a/core/plannernotes.c b/core/plannernotes.c
index 414236a1e..68c9bae25 100644
--- a/core/plannernotes.c
+++ b/core/plannernotes.c
@@ -101,8 +101,13 @@ void add_plan_to_notes(struct diveplan *diveplan, struct dive *dive, bool show_d
get_current_date());
}
- len += snprintf(buffer + len, sz_buffer - len, translate("gettextFromC", "Runtime: %dmin VARIATIONS<br></div>"),
- diveplan_duration(diveplan));
+ if (prefs.display_variations)
+ len += snprintf(buffer + len, sz_buffer - len, translate("gettextFromC", "Runtime: %dmin VARIATIONS<br></div>"),
+ diveplan_duration(diveplan));
+ else
+ len += snprintf(buffer + len, sz_buffer - len, translate("gettextFromC", "Runtime: %dmin<br></div>"),
+ diveplan_duration(diveplan));
+
if (!plan_verbatim) {
len += snprintf(buffer + len, sz_buffer - len, "<table><thead><tr><th></th><th>%s</th>",
diff --git a/core/pref.h b/core/pref.h
index f22999981..515225dd4 100644
--- a/core/pref.h
+++ b/core/pref.h
@@ -126,6 +126,7 @@ struct preferences {
bool display_runtime;
bool display_duration;
bool display_transitions;
+ bool display_variations;
bool safetystop;
bool switch_at_req_stop;
int reserve_gas;
diff --git a/core/subsurface-qt/SettingsObjectWrapper.cpp b/core/subsurface-qt/SettingsObjectWrapper.cpp
index 25161a904..720a887d6 100644
--- a/core/subsurface-qt/SettingsObjectWrapper.cpp
+++ b/core/subsurface-qt/SettingsObjectWrapper.cpp
@@ -1214,6 +1214,11 @@ bool DivePlannerSettings::displayTransitions() const
return prefs.display_transitions;
}
+bool DivePlannerSettings::displayVariations() const
+{
+ return prefs.display_variations;
+}
+
bool DivePlannerSettings::doo2breaks() const
{
return prefs.doo2breaks;
@@ -1368,6 +1373,18 @@ void DivePlannerSettings::setDisplayTransitions(bool value)
emit displayTransitionsChanged(value);
}
+void DivePlannerSettings::setDisplayVariations(bool value)
+{
+ if (value == prefs.display_variations)
+ return;
+
+ QSettings s;
+ s.beginGroup(group);
+ s.setValue("display_variations", value);
+ prefs.display_variations = value;
+ emit displayVariationsChanged(value);
+}
+
void DivePlannerSettings::setDoo2breaks(bool value)
{
if (value == prefs.doo2breaks)
@@ -2339,6 +2356,7 @@ void SettingsObjectWrapper::load()
GET_BOOL("display_duration", display_duration);
GET_BOOL("display_runtime", display_runtime);
GET_BOOL("display_transitions", display_transitions);
+ GET_BOOL("display_variations", display_variations);
GET_BOOL("safetystop", safetystop);
GET_BOOL("doo2breaks", doo2breaks);
GET_BOOL("switch_at_req_stop",switch_at_req_stop);
@@ -2397,6 +2415,7 @@ void SettingsObjectWrapper::sync()
s.setValue("display_duration", prefs.display_duration);
s.setValue("display_runtime", prefs.display_runtime);
s.setValue("display_transitions", prefs.display_transitions);
+ s.setValue("display_variations", prefs.display_variations);
s.setValue("safetystop", prefs.safetystop);
s.setValue("reserve_gas", prefs.reserve_gas);
s.setValue("ascrate75", prefs.ascrate75);
diff --git a/core/subsurface-qt/SettingsObjectWrapper.h b/core/subsurface-qt/SettingsObjectWrapper.h
index 7116e682e..824d1023d 100644
--- a/core/subsurface-qt/SettingsObjectWrapper.h
+++ b/core/subsurface-qt/SettingsObjectWrapper.h
@@ -398,6 +398,7 @@ class DivePlannerSettings : public QObject {
Q_PROPERTY(bool display_runtime READ displayRuntime WRITE setDisplayRuntime NOTIFY displayRuntimeChanged)
Q_PROPERTY(bool display_duration READ displayDuration WRITE setDisplayDuration NOTIFY displayDurationChanged)
Q_PROPERTY(bool display_transitions READ displayTransitions WRITE setDisplayTransitions NOTIFY displayTransitionsChanged)
+ Q_PROPERTY(bool display_variations READ displayVariations WRITE setDisplayVariations NOTIFY displayVariationsChanged)
Q_PROPERTY(bool doo2breaks READ doo2breaks WRITE setDoo2breaks NOTIFY doo2breaksChanged)
Q_PROPERTY(bool drop_stone_mode READ dropStoneMode WRITE setDropStoneMode NOTIFY dropStoneModeChanged)
Q_PROPERTY(bool safetystop READ safetyStop WRITE setSafetyStop NOTIFY safetyStopChanged)
@@ -425,6 +426,7 @@ public:
bool displayRuntime() const;
bool displayDuration() const;
bool displayTransitions() const;
+ bool displayVariations() const;
bool doo2breaks() const;
bool dropStoneMode() const;
bool safetyStop() const;
@@ -451,6 +453,7 @@ public slots:
void setDisplayRuntime(bool value);
void setDisplayDuration(bool value);
void setDisplayTransitions(bool value);
+ void setDisplayVariations(bool value);
void setDoo2breaks(bool value);
void setDropStoneMode(bool value);
void setSafetyStop(bool value);
@@ -477,6 +480,7 @@ signals:
void displayRuntimeChanged(bool value);
void displayDurationChanged(bool value);
void displayTransitionsChanged(bool value);
+ void displayVariationsChanged(bool value);
void doo2breaksChanged(bool value);
void dropStoneModeChanged(bool value);
void safetyStopChanged(bool value);
diff --git a/core/subsurfacestartup.c b/core/subsurfacestartup.c
index b0d621b20..7bb3c2784 100644
--- a/core/subsurfacestartup.c
+++ b/core/subsurfacestartup.c
@@ -66,6 +66,7 @@ struct preferences default_prefs = {
.display_runtime = true,
.display_duration = true,
.display_transitions = true,
+ .display_variations = false,
.safetystop = true,
.bottomsac = 20000,
.decosac = 17000,
diff --git a/desktop-widgets/diveplanner.cpp b/desktop-widgets/diveplanner.cpp
index dd91e88c7..b90772f39 100644
--- a/desktop-widgets/diveplanner.cpp
+++ b/desktop-widgets/diveplanner.cpp
@@ -322,6 +322,7 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f)
ui.display_duration->setChecked(prefs.display_duration);
ui.display_runtime->setChecked(prefs.display_runtime);
ui.display_transitions->setChecked(prefs.display_transitions);
+ ui.display_variations->setChecked(prefs.display_variations);
ui.safetystop->setChecked(prefs.safetystop);
ui.sacfactor->setValue(prefs.sacfactor / 100.0);
ui.problemsolvingtime->setValue(prefs.problemsolvingtime);
@@ -355,6 +356,7 @@ PlannerSettingsWidget::PlannerSettingsWidget(QWidget *parent, Qt::WindowFlags f)
connect(ui.display_duration, SIGNAL(toggled(bool)), plannerModel, SLOT(setDisplayDuration(bool)));
connect(ui.display_runtime, SIGNAL(toggled(bool)), plannerModel, SLOT(setDisplayRuntime(bool)));
connect(ui.display_transitions, SIGNAL(toggled(bool)), plannerModel, SLOT(setDisplayTransitions(bool)));
+ connect(ui.display_variations, SIGNAL(toggled(bool)), plannerModel, SLOT(setDisplayVariations(bool)));
connect(ui.safetystop, SIGNAL(toggled(bool)), plannerModel, SLOT(setSafetyStop(bool)));
connect(ui.reserve_gas, SIGNAL(valueChanged(int)), plannerModel, SLOT(setReserveGas(int)));
connect(ui.ascRate75, SIGNAL(valueChanged(int)), plannerModel, SLOT(emitDataChanged()));
diff --git a/desktop-widgets/plannerSettings.ui b/desktop-widgets/plannerSettings.ui
index 22dcda86a..44cc45e27 100644
--- a/desktop-widgets/plannerSettings.ui
+++ b/desktop-widgets/plannerSettings.ui
@@ -685,6 +685,23 @@
<property name="spacing">
<number>2</number>
</property>
+ <item row="3" column="0">
+ <widget class="QCheckBox" name="verbatim_plan">
+ <property name="text">
+ <string>Verbatim dive plan</string>
+ </property>
+ </widget>
+ </item>
+ <item row="2" column="0">
+ <widget class="QCheckBox" name="display_transitions">
+ <property name="toolTip">
+ <string>In diveplan, list transitions or treat them as implicit</string>
+ </property>
+ <property name="text">
+ <string>Display transitions in deco</string>
+ </property>
+ </widget>
+ </item>
<item row="0" column="0">
<widget class="QCheckBox" name="display_runtime">
<property name="toolTip">
@@ -708,20 +725,16 @@
</property>
</widget>
</item>
- <item row="2" column="0">
- <widget class="QCheckBox" name="display_transitions">
- <property name="toolTip">
- <string>In diveplan, list transitions or treat them as implicit</string>
+ <item row="4" column="0">
+ <widget class="QCheckBox" name="display_variations">
+ <property name="enabled">
+ <bool>true</bool>
</property>
- <property name="text">
- <string>Display transitions in deco</string>
+ <property name="toolTip">
+ <string>Compute variations of plan (performance cost)</string>
</property>
- </widget>
- </item>
- <item row="3" column="0">
- <widget class="QCheckBox" name="verbatim_plan">
<property name="text">
- <string>Verbatim dive plan</string>
+ <string>Display plan variations</string>
</property>
</widget>
</item>
diff --git a/desktop-widgets/templatelayout.cpp b/desktop-widgets/templatelayout.cpp
index a059a2dad..9f933e91c 100644
--- a/desktop-widgets/templatelayout.cpp
+++ b/desktop-widgets/templatelayout.cpp
@@ -12,7 +12,7 @@ int getTotalWork(print_options *printOptions)
if (printOptions->print_selected) {
// return the correct number depending on all/selected dives
// but don't return 0 as we might divide by this number
- return amount_selected ? amount_selected : 1;
+ return amount_selected && !in_planner() ? amount_selected : 1;
}
return dive_table.nr;
}
@@ -98,15 +98,21 @@ QString TemplateLayout::generate()
QVariantList diveList;
struct dive *dive;
- int i;
- for_each_dive (i, dive) {
- //TODO check for exporting selected dives only
- if (!dive->selected && PrintOptions->print_selected)
- continue;
- DiveObjectHelper *d = new DiveObjectHelper(dive);
+ if (in_planner()) {
+ DiveObjectHelper *d = new DiveObjectHelper(&displayed_dive);
diveList.append(QVariant::fromValue(d));
- progress++;
- emit progressUpdated(lrint(progress * 100.0 / totalWork));
+ emit progressUpdated(100.0);
+ } else {
+ int i;
+ for_each_dive (i, dive) {
+ //TODO check for exporting selected dives only
+ if (!dive->selected && PrintOptions->print_selected)
+ continue;
+ DiveObjectHelper *d = new DiveObjectHelper(dive);
+ diveList.append(QVariant::fromValue(d));
+ progress++;
+ emit progressUpdated(lrint(progress * 100.0 / totalWork));
+ }
}
Grantlee::Context c;
c.insert("dives", diveList);
diff --git a/qt-models/diveplannermodel.cpp b/qt-models/diveplannermodel.cpp
index 6ff446a09..e65bb01eb 100644
--- a/qt-models/diveplannermodel.cpp
+++ b/qt-models/diveplannermodel.cpp
@@ -522,6 +522,13 @@ void DivePlannerPointsModel::setDisplayTransitions(bool value)
emitDataChanged();
}
+void DivePlannerPointsModel::setDisplayVariations(bool value)
+{
+ auto planner = SettingsObjectWrapper::instance()->planner_settings;
+ planner->setDisplayVariations(value);
+ emitDataChanged();
+}
+
void DivePlannerPointsModel::setDecoMode(int mode)
{
auto planner = SettingsObjectWrapper::instance()->planner_settings;
@@ -934,52 +941,51 @@ void DivePlannerPointsModel::computeVariations()
struct diveplan plan_copy;
struct divedatapoint *last_segment;
- if(!in_planner())
- return;
- cache_deco_state(&save);
- cloneDiveplan(&plan_copy);
- plan(&plan_copy, dive, 1, original, &cache, true, false);
- free_dps(&plan_copy);
- restore_deco_state(save, false);
-
- last_segment = cloneDiveplan(&plan_copy);
- last_segment->depth.mm += 1000;
- last_segment->next->depth.mm += 1000;
- plan(&plan_copy, dive, 1, deeper, &cache, true, false);
- free_dps(&plan_copy);
- restore_deco_state(save, false);
-
- last_segment = cloneDiveplan(&plan_copy);
- last_segment->depth.mm -= 1000;
- last_segment->next->depth.mm -= 1000;
- plan(&plan_copy, dive, 1, shallower, &cache, true, false);
- free_dps(&plan_copy);
- restore_deco_state(save, false);
-
- last_segment = cloneDiveplan(&plan_copy);
- last_segment->next->time += 60;
- plan(&plan_copy, dive, 1, longer, &cache, true, false);
- free_dps(&plan_copy);
- restore_deco_state(save, false);
-
- last_segment = cloneDiveplan(&plan_copy);
- last_segment->next->time -= 60;
- plan(&plan_copy, dive, 1, shorter, &cache, true, false);
- free_dps(&plan_copy);
- restore_deco_state(save, false);
-
+ if(in_planner() && prefs.display_variations) {
+ cache_deco_state(&save);
+ cloneDiveplan(&plan_copy);
+ plan(&plan_copy, dive, 1, original, &cache, true, false);
+ free_dps(&plan_copy);
+ restore_deco_state(save, false);
+
+ last_segment = cloneDiveplan(&plan_copy);
+ last_segment->depth.mm += 1000;
+ last_segment->next->depth.mm += 1000;
+ plan(&plan_copy, dive, 1, deeper, &cache, true, false);
+ free_dps(&plan_copy);
+ restore_deco_state(save, false);
+
+ last_segment = cloneDiveplan(&plan_copy);
+ last_segment->depth.mm -= 1000;
+ last_segment->next->depth.mm -= 1000;
+ plan(&plan_copy, dive, 1, shallower, &cache, true, false);
+ free_dps(&plan_copy);
+ restore_deco_state(save, false);
+
+ last_segment = cloneDiveplan(&plan_copy);
+ last_segment->next->time += 60;
+ plan(&plan_copy, dive, 1, longer, &cache, true, false);
+ free_dps(&plan_copy);
+ restore_deco_state(save, false);
+
+ last_segment = cloneDiveplan(&plan_copy);
+ last_segment->next->time -= 60;
+ plan(&plan_copy, dive, 1, shorter, &cache, true, false);
+ free_dps(&plan_copy);
+ restore_deco_state(save, false);
#ifdef SHOWSTOPVARIATIONS
- printf("\n\n");
+ printf("\n\n");
#endif
- QString notes(displayed_dive.notes);
- free(displayed_dive.notes);
+ QString notes(displayed_dive.notes);
+ free(displayed_dive.notes);
- char buf[200];
- sprintf(buf, "+ %d:%02d /m + %d:%02d /min", FRACTION(analyzeVariations(shallower, original, deeper, "m"),60),
- FRACTION(analyzeVariations(shorter, original, longer, "min"), 60));
+ char buf[200];
+ sprintf(buf, "+ %d:%02d /m + %d:%02d /min", FRACTION(analyzeVariations(shallower, original, deeper, "m"),60),
+ FRACTION(analyzeVariations(shorter, original, longer, "min"), 60));
- displayed_dive.notes = strdup(notes.replace("VARIATIONS", QString(buf)).toUtf8().data());
+ displayed_dive.notes = strdup(notes.replace("VARIATIONS", QString(buf)).toUtf8().data());
+ }
setRecalc(oldRecalc);
}
diff --git a/qt-models/diveplannermodel.h b/qt-models/diveplannermodel.h
index 7a4ef9885..aebeef766 100644
--- a/qt-models/diveplannermodel.h
+++ b/qt-models/diveplannermodel.h
@@ -78,6 +78,7 @@ slots:
void setDisplayRuntime(bool value);
void setDisplayDuration(bool value);
void setDisplayTransitions(bool value);
+ void setDisplayVariations(bool value);
void setDecoMode(int mode);
void setSafetyStop(bool value);
void savePlan();