mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 05:00:20 +00:00
Add a checkbox to turn off plan variations
... as those come with a performance penalty Signed-off-by: Robert C. Helling <helling@atdotde.de>
This commit is contained in:
parent
5e9bdce195
commit
a6f186279f
10 changed files with 117 additions and 59 deletions
|
@ -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>",
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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()));
|
||||
|
|
|
@ -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">
|
||||
<item row="4" column="0">
|
||||
<widget class="QCheckBox" name="display_variations">
|
||||
<property name="enabled">
|
||||
<bool>true</bool>
|
||||
</property>
|
||||
<property name="toolTip">
|
||||
<string>In diveplan, list transitions or treat them as implicit</string>
|
||||
<string>Compute variations of plan (performance cost)</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Display transitions in deco</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>
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
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, 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->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);
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Reference in a new issue