double get_depth_units(unsigned int mm, int *frac, const char **units) { int decimals; double d; const char *unit; struct units *units_p = get_units(); switch (units_p->length) { case METERS: d = mm / 1000.0; unit = _("m"); decimals = d < 20; break; case FEET: d = mm_to_feet(mm); unit = _("ft"); decimals = 0; break; } if (frac) *frac = decimals; if (units) *units = unit; return d; }
/* Get the values as we want to show them. Whole feet. But meters with one decimal for * values less than 20m, without decimals for larger values */ void get_depth_values(int depth, int *depth_int, int *depth_decimal, int *show_decimal) { int integer, frac; *show_decimal = 1; switch (prefs.units.length) { case METERS: /* To tenths of meters */ depth = (depth + 49) / 100; integer = depth / 10; frac = depth % 10; if (integer < 20) break; if (frac >= 5) integer++; *show_decimal = 0; break; case FEET: integer = mm_to_feet(depth) + 0.5; *show_decimal = 0; break; default: /* can't happen */ return; } *depth_int = integer; if (*show_decimal) *depth_decimal = frac; }
static void depth_data_func(GtkTreeViewColumn *col, GtkCellRenderer *renderer, GtkTreeModel *model, GtkTreeIter *iter, gpointer data) { int depth, integer, frac, len; char buffer[40]; gtk_tree_model_get(model, iter, DIVE_DEPTH, &depth, -1); switch (output_units.length) { case METERS: /* To tenths of meters */ depth = (depth + 49) / 100; integer = depth / 10; frac = depth % 10; if (integer < 20) break; frac = -1; /* Rounding? */ break; case FEET: integer = mm_to_feet(depth) + 0.5; frac = -1; break; default: return; } len = snprintf(buffer, sizeof(buffer), "%d", integer); if (frac >= 0) len += snprintf(buffer+len, sizeof(buffer)-len, ".%d", frac); g_object_set(renderer, "text", buffer, NULL); }
QString get_depth_string(depth_t depth, bool showunit) { if (prefs.units.length == units::METERS) { double meters = depth.mm / 1000.0; return QString("%1%2").arg(meters, 0, 'f', meters >= 20.0 ? 0 : 1 ).arg(showunit ? _("m") : ""); } else { double feet = mm_to_feet(depth.mm); return QString("%1%2").arg(feet, 0, 'f', 1). arg(showunit ? _("ft") : ""); } }
QString get_depth_string(int mm, bool showunit, bool showdecimal) { if (prefs.units.length == units::METERS) { double meters = mm / 1000.0; return QString("%1%2").arg(meters, 0, 'f', (showdecimal && meters < 20.0) ? 1 : 0 ).arg(showunit ? translate("gettextFromC","m") : ""); } else { double feet = mm_to_feet(mm); return QString("%1%2").arg(feet, 0, 'f', showdecimal ? 1 : 0). arg(showunit ? translate("gettextFromC","ft") : ""); } }
QString DiveItem::displayDepth() const { const int scale = 1000; QString fract, str; if (get_units()->length == units::METERS) { fract = QString::number((unsigned)(dive->maxdepth.mm % scale) / 100); str = QString("%1.%2").arg((unsigned)(dive->maxdepth.mm / scale)).arg(fract, 1, QChar('0')); } if (get_units()->length == units::FEET) { str = QString::number(mm_to_feet(dive->maxdepth.mm),'f',0); } return str; }
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(); }
double get_vertical_speed_units(unsigned int mms, int *frac, const char **units) { double d; const char *unit; const struct units *units_p = get_units(); const double time_factor = units_p->vertical_speed_time == MINUTES ? 60.0 : 1.0; switch (units_p->length) { case METERS: d = mms / 1000.0 * time_factor; unit = translate("gettextFromC",(units_p->vertical_speed_time == MINUTES) ? "m/min" : "m/s"); break; case FEET: d = mm_to_feet(mms) * time_factor; unit = translate("gettextFromC",(units_p->vertical_speed_time == MINUTES) ? "ft/min" : "ft/s"); break; } if (frac) *frac = d < 10; if (units) *units = unit; return d; }
double get_depth_units(unsigned int mm, int *frac, const char **units) { int decimals; double d; const char *unit; switch (output_units.length) { case METERS: d = mm / 1000.0; unit = "m"; decimals = d < 20; break; case FEET: d = mm_to_feet(mm); unit = "ft"; decimals = 0; break; } if (frac) *frac = decimals; if (units) *units = unit; return d; }
QVariant CylindersModel::data(const QModelIndex& index, int role) const { QVariant ret; if (!index.isValid() || index.row() >= MAX_CYLINDERS) return ret; cylinder_t *cyl = ¤t->cylinder[index.row()]; switch (role) { case Qt::FontRole: { QFont font = defaultModelFont(); switch (index.column()) { case START: font.setItalic(!cyl->start.mbar); break; case END: font.setItalic(!cyl->end.mbar); break; } ret = font; break; } case Qt::TextAlignmentRole: ret = Qt::AlignCenter; break; case Qt::DisplayRole: case Qt::EditRole: switch(index.column()) { case TYPE: ret = QString(cyl->type.description); break; case SIZE: // we can't use get_volume_string because the idiotic imperial tank // sizes take working pressure into account... if (cyl->type.size.mliter) { double volume; int mbar = cyl->type.workingpressure.mbar; if (mbar && prefs.units.volume == prefs.units.CUFT) { volume = ml_to_cuft(cyl->type.size.mliter); volume *= bar_to_atm(mbar / 1000.0); } else { volume = cyl->type.size.mliter / 1000.0; } ret = QString("%1").arg(volume, 0, 'f', 1); } break; case WORKINGPRESS: if (cyl->type.workingpressure.mbar) ret = get_pressure_string(cyl->type.workingpressure, TRUE); break; case START: if (cyl->start.mbar) ret = get_pressure_string(cyl->start, FALSE); else if (cyl->sample_start.mbar) ret = get_pressure_string(cyl->sample_start, FALSE); break; case END: if (cyl->end.mbar) ret = get_pressure_string(cyl->end, FALSE); else if (cyl->sample_end.mbar) ret = get_pressure_string(cyl->sample_end, FALSE); break; case O2: ret = percent_string(cyl->gasmix.o2); break; case HE: ret = percent_string(cyl->gasmix.he); break; case DEPTH: if (prefs.units.length == prefs.units.FEET) ret = mm_to_feet(cyl->depth.mm); else ret = cyl->depth.mm / 1000; break; } break; case Qt::DecorationRole: if (index.column() == REMOVE) ret = QIcon(":trash"); break; case Qt::ToolTipRole: if (index.column() == REMOVE) ret = tr("Clicking here will remove this cylinder."); break; } return ret; }