diff options
-rw-r--r-- | core/plannernotes.c | 9 | ||||
-rw-r--r-- | core/pref.h | 1 | ||||
-rw-r--r-- | core/subsurface-qt/SettingsObjectWrapper.cpp | 19 | ||||
-rw-r--r-- | core/subsurface-qt/SettingsObjectWrapper.h | 4 | ||||
-rw-r--r-- | core/subsurfacestartup.c | 1 | ||||
-rw-r--r-- | desktop-widgets/diveplanner.cpp | 2 | ||||
-rw-r--r-- | desktop-widgets/plannerSettings.ui | 35 | ||||
-rw-r--r-- | desktop-widgets/templatelayout.cpp | 24 | ||||
-rw-r--r-- | qt-models/diveplannermodel.cpp | 88 | ||||
-rw-r--r-- | qt-models/diveplannermodel.h | 1 |
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(); |