bool WeightModel::setData(const QModelIndex& index, const QVariant& value, int role) { weightsystem_t *ws = ¤t->weightsystem[index.row()]; switch(index.column()) { case TYPE: if (!value.isNull()) { QByteArray ba = value.toString().toUtf8(); const char *text = ba.constData(); if (!ws->description || strcmp(ws->description, text)) { ws->description = strdup(text); changed = true; } } break; case WEIGHT: if (CHANGED(toDouble, "kg", "lbs")) { if (prefs.units.weight == prefs.units.LBS) ws->weight.grams = lbs_to_grams(value.toDouble()); else ws->weight.grams = value.toDouble() * 1000.0 + 0.5; // now update the ws_info changed = true; WSInfoModel *wsim = WSInfoModel::instance(); QModelIndexList matches = wsim->match(wsim->index(0,0), Qt::DisplayRole, ws->description); if (!matches.isEmpty()) wsim->setData(wsim->index(matches.first().row(), WSInfoModel::GR), ws->weight.grams); } break; } dataChanged(index, index); return true; }
/* still unclear if it ever reports lbs */ static void uemis_get_weight(char *buffer, weightsystem_t *weight, int diveid) { weight->weight.grams = uemis_get_weight_unit(diveid) ? lbs_to_grams(ascii_strtod(buffer, NULL)) : ascii_strtod(buffer, NULL) * 1000; weight->description = strdup(translate("gettextFromC", "unknown")); }
void TestUnitConversion::testUnitConversions() { QCOMPARE(IS_FP_SAME(grams_to_lbs(1000), 2.204586), true); QCOMPARE(lbs_to_grams(1), 454); QCOMPARE(IS_FP_SAME(ml_to_cuft(1000), 0.0353147), true); QCOMPARE(IS_FP_SAME(cuft_to_l(1), 28.316847), true); QCOMPARE(IS_FP_SAME(mm_to_feet(1000), 3.280840), true); QCOMPARE(feet_to_mm(1), (long unsigned int) 305); QCOMPARE(to_feet((depth_t){ 1000 }), 3); QCOMPARE(IS_FP_SAME(mkelvin_to_C(647000), 373.85), true); QCOMPARE(IS_FP_SAME(mkelvin_to_F(647000), 704.93), true); QCOMPARE(F_to_mkelvin(704.93), (unsigned long)647000); QCOMPARE(C_to_mkelvin(373.85), (unsigned long)647000); QCOMPARE(IS_FP_SAME(psi_to_bar(14.6959488), 1.01325), true); QCOMPARE(psi_to_mbar(14.6959488), (long)1013); QCOMPARE(to_PSI((pressure_t){ 1013 }), (int)15); QCOMPARE(IS_FP_SAME(bar_to_atm(1.013), 1.0), true); QCOMPARE(IS_FP_SAME(mbar_to_atm(1013), 1.0), true); QCOMPARE(mbar_to_PSI(1013), (int)15); get_units(); }
static void record_weightsystem_changes(weightsystem_t *ws, struct ws_widget *weightsystem_widget) { const gchar *desc; GtkComboBox *box; int grams; double value; /* Ignore uninitialized cylinder widgets */ box = weightsystem_widget->description; if (!box) return; desc = gtk_combo_box_get_active_text(box); value = gtk_spin_button_get_value(weightsystem_widget->weight); if (output_units.weight == LBS) grams = lbs_to_grams(value); else grams = value * 1000; ws->weight.grams = grams; ws->description = desc; }
//TODO: Move to C weight_t string_to_weight(const char *str) { const char *end; double value = strtod_flags(str, &end, 0); QString rest = QString(end).trimmed(); QString local_kg = QObject::tr("kg"); QString local_lbs = QObject::tr("lbs"); weight_t weight; if (rest.startsWith("kg") || rest.startsWith(local_kg)) goto kg; // using just "lb" instead of "lbs" is intentional - some people might enter the singular if (rest.startsWith("lb") || rest.startsWith(local_lbs)) goto lbs; if (prefs.units.weight == prefs.units.LBS) goto lbs; kg: weight.grams = rint(value * 1000); return weight; lbs: weight.grams = lbs_to_grams(value); return weight; }
static void record_weightsystem_changes(weightsystem_t *ws, struct ws_widget *weightsystem_widget) { const gchar *desc; GtkComboBox *box; int grams; double value; GtkTreeIter iter; /* Ignore uninitialized cylinder widgets */ box = weightsystem_widget->description; if (!box) return; desc = strdup(get_active_text(box)); value = gtk_spin_button_get_value(weightsystem_widget->weight); if (prefs.units.weight == LBS) grams = lbs_to_grams(value); else grams = value * 1000; ws->weight.grams = grams; ws->description = desc; add_weightsystem_type(desc, grams, &iter); }