summaryrefslogtreecommitdiffstats
path: root/qt-ui/models.cpp
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2014-01-02 09:12:32 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2014-01-02 09:12:32 -0800
commit5511a0e14efdb96c7622adf11185ea741cdb5226 (patch)
treefd35dded09a1ffcf09d561e02d23b565ca01e5ff /qt-ui/models.cpp
parent2abd06e5fd61570e13c1b14eb0a4f6804743f6a1 (diff)
downloadsubsurface-5511a0e14efdb96c7622adf11185ea741cdb5226.tar.gz
Ignore units when entering values for equipment
Note that this is IMHO the wrong fix. Because we shouldn't just ignore the units, we should do correct conversions. Before this patch, if the user is in metric mode and then types in 4.5kg or 10lbs for a weight, Subsurface ignores the entry and throws it away. Very much not the expected behavior. With this patch Subsurface will take the value, but ignore the unit and assume that the user meant kg (since it's in metric mode). Still not really the expected behavior for 10lbs (which is now 10kg), but if the user typed 4.5kg (which admittedly is much more likely), then with this change Subsurface will do the right thing. Fixes #395 Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-ui/models.cpp')
-rw-r--r--qt-ui/models.cpp44
1 files changed, 22 insertions, 22 deletions
diff --git a/qt-ui/models.cpp b/qt-ui/models.cpp
index 1faa46fb1..2e73682dc 100644
--- a/qt-ui/models.cpp
+++ b/qt-ui/models.cpp
@@ -186,11 +186,12 @@ void CylindersModel::passInData(const QModelIndex& index, const QVariant& value)
}
#define CHANGED(_t,_u1,_u2) \
- value.toString().remove(_u1).remove(_u2)._t() != \
+ (vString = value.toString().remove(_u1).remove(_u2))._t() != \
data(index, role).toString().remove(_u1).remove(_u2)._t()
bool CylindersModel::setData(const QModelIndex& index, const QVariant& value, int role)
{
+ QString vString;
bool addDiveMode = DivePlannerPointsModel::instance()->currentMode() != DivePlannerPointsModel::NOTHING;
if (addDiveMode)
DivePlannerPointsModel::instance()->rememberTanks();
@@ -210,18 +211,18 @@ bool CylindersModel::setData(const QModelIndex& index, const QVariant& value, in
case SIZE:
if (CHANGED(toDouble, "cuft", "l")) {
// if units are CUFT then this value is meaningless until we have working pressure
- if (value.toDouble() != 0.0) {
+ if (vString.toDouble() != 0.0) {
TankInfoModel *tanks = TankInfoModel::instance();
QModelIndexList matches = tanks->match(tanks->index(0,0), Qt::DisplayRole, cyl->type.description);
int mbar = cyl->type.workingpressure.mbar;
int mliter;
if (mbar && prefs.units.volume == prefs.units.CUFT) {
- double liters = cuft_to_l(value.toDouble());
+ double liters = cuft_to_l(vString.toDouble());
liters /= bar_to_atm(mbar / 1000.0);
mliter = rint(liters * 1000);
} else {
- mliter = rint(value.toDouble() * 1000);
+ mliter = rint(vString.toDouble() * 1000);
}
if (cyl->type.size.mliter != mliter) {
mark_divelist_changed(TRUE);
@@ -235,8 +236,6 @@ bool CylindersModel::setData(const QModelIndex& index, const QVariant& value, in
break;
case WORKINGPRESS:
if (CHANGED(toDouble, "psi", "bar")) {
- QString vString = value.toString();
- vString.remove("psi").remove("bar");
if (vString.toDouble() != 0.0) {
TankInfoModel *tanks = TankInfoModel::instance();
QModelIndexList matches = tanks->match(tanks->index(0,0), Qt::DisplayRole, cyl->type.description);
@@ -252,29 +251,29 @@ bool CylindersModel::setData(const QModelIndex& index, const QVariant& value, in
break;
case START:
if (CHANGED(toDouble, "psi", "bar")) {
- if (value.toDouble() != 0.0) {
+ if (vString.toDouble() != 0.0) {
if (prefs.units.pressure == prefs.units.PSI)
- cyl->start.mbar = psi_to_mbar(value.toDouble());
+ cyl->start.mbar = psi_to_mbar(vString.toDouble());
else
- cyl->start.mbar = value.toDouble() * 1000;
+ cyl->start.mbar = vString.toDouble() * 1000;
changed = true;
}
}
break;
case END:
if (CHANGED(toDouble, "psi", "bar")) {
- if (value.toDouble() != 0.0) {
+ if (vString.toDouble() != 0.0) {
if (prefs.units.pressure == prefs.units.PSI)
- cyl->end.mbar = psi_to_mbar(value.toDouble());
+ cyl->end.mbar = psi_to_mbar(vString.toDouble());
else
- cyl->end.mbar = value.toDouble() * 1000;
+ cyl->end.mbar = vString.toDouble() * 1000;
changed = true;
}
}
break;
case O2:
if (CHANGED(toDouble, "%", "%")) {
- int o2 = value.toString().remove('%').toDouble() * 10 + 0.5;
+ int o2 = vString.toDouble() * 10 + 0.5;
if (cyl->gasmix.he.permille + o2 <= 1000) {
cyl->gasmix.o2.permille = o2;
changed = true;
@@ -283,7 +282,7 @@ bool CylindersModel::setData(const QModelIndex& index, const QVariant& value, in
break;
case HE:
if (CHANGED(toDouble, "%", "%")) {
- int he = value.toString().remove('%').toDouble() * 10 + 0.5;
+ int he = vString.toDouble() * 10 + 0.5;
if (cyl->gasmix.o2.permille + he <= 1000) {
cyl->gasmix.he.permille = he;
changed = true;
@@ -292,11 +291,11 @@ bool CylindersModel::setData(const QModelIndex& index, const QVariant& value, in
break;
case DEPTH:
if (CHANGED(toDouble, "ft", "m")) {
- if (value.toInt() != 0) {
+ if (vString.toInt() != 0) {
if (prefs.units.length == prefs.units.FEET)
- cyl->depth.mm = feet_to_mm(value.toString().remove("ft").remove("m").toInt());
+ cyl->depth.mm = feet_to_mm(vString.toInt());
else
- cyl->depth.mm = value.toString().remove("ft").remove("m").toInt() * 1000;
+ cyl->depth.mm = vString.toInt() * 1000;
}
}
}
@@ -470,21 +469,22 @@ void WeightModel::passInData(const QModelIndex& index, const QVariant& value)
bool WeightModel::setData(const QModelIndex& index, const QVariant& value, int role)
{
+ QString vString = value.toString();
weightsystem_t *ws = &current->weightsystem[index.row()];
switch(index.column()) {
case TYPE:
if (!value.isNull()) {
- if (!ws->description || gettextFromC::instance()->tr(ws->description) != value.toString()) {
+ if (!ws->description || gettextFromC::instance()->tr(ws->description) != vString) {
// loop over translations to see if one matches
int i = -1;
while(ws_info[++i].name) {
- if (gettextFromC::instance()->tr(ws_info[i].name) == value.toString()) {
+ if (gettextFromC::instance()->tr(ws_info[i].name) == vString) {
ws->description = ws_info[i].name;
break;
}
}
if (ws_info[i].name == NULL) // didn't find a match
- ws->description = strdup(value.toString().toUtf8().constData());
+ ws->description = strdup(vString.toUtf8().constData());
changed = true;
}
}
@@ -492,9 +492,9 @@ bool WeightModel::setData(const QModelIndex& index, const QVariant& value, int r
case WEIGHT:
if (CHANGED(toDouble, "kg", "lbs")) {
if (prefs.units.weight == prefs.units.LBS)
- ws->weight.grams = lbs_to_grams(value.toDouble());
+ ws->weight.grams = lbs_to_grams(vString.toDouble());
else
- ws->weight.grams = value.toDouble() * 1000.0 + 0.5;
+ ws->weight.grams = vString.toDouble() * 1000.0 + 0.5;
// now update the ws_info
changed = true;
WSInfoModel *wsim = WSInfoModel::instance();