diff --git a/src/lib/util/kformatprivate.cpp b/src/lib/util/kformatprivate.cpp --- a/src/lib/util/kformatprivate.cpp +++ b/src/lib/util/kformatprivate.cpp @@ -178,142 +178,29 @@ QString KFormatPrivate::formatByteSize(double size, int precision, KFormat::BinaryUnitDialect dialect, KFormat::BinarySizeUnits units) const { - // Current KDE default is IECBinaryDialect - if (dialect <= KFormat::DefaultBinaryDialect || dialect > KFormat::LastBinaryDialect) { - dialect = KFormat::IECBinaryDialect; - } - - // Current KDE default is to auto-adjust so the size falls in the range 0 to 1000/1024 - if (units < KFormat::DefaultBinaryUnits || units > KFormat::UnitLastUnit) { - units = KFormat::DefaultBinaryUnits; - } - - int unit = 0; // Selects what unit to use - double multiplier = 1024.0; - - if (dialect == KFormat::MetricBinaryDialect) { - multiplier = 1000.0; - } - - // If a specific unit conversion is given, use it directly. Otherwise - // search until the result is in [0, multiplier] (or out of our range). - if (units == KFormat::DefaultBinaryUnits) { - while (qAbs(size) >= multiplier && unit < int(KFormat::UnitYottaByte)) { - size /= multiplier; - ++unit; - } - } else { - // A specific unit is in use - unit = static_cast(units); - if (unit > 0) { - size /= pow(multiplier, unit); - } - } - - // Bytes, no rounding - if (unit == 0) { - precision = 0; - } - - QString numString = m_locale.toString(size, 'f', precision); - - // Do not remove "//:" comments below, they are used by the translators. - // NB: we cannot pass pluralization arguments, as the size may be negative - if (dialect == KFormat::MetricBinaryDialect) { - switch (unit) { - case KFormat::UnitByte: - //: MetricBinaryDialect size in bytes - return tr("%1 B", "MetricBinaryDialect").arg(numString); - case KFormat::UnitKiloByte: - //: MetricBinaryDialect size in 1000 bytes - return tr("%1 kB", "MetricBinaryDialect").arg(numString); - case KFormat::UnitMegaByte: - //: MetricBinaryDialect size in 10^6 bytes - return tr("%1 MB", "MetricBinaryDialect").arg(numString); - case KFormat::UnitGigaByte: - //: MetricBinaryDialect size in 10^9 bytes - return tr("%1 GB", "MetricBinaryDialect").arg(numString); - case KFormat::UnitTeraByte: - //: MetricBinaryDialect size in 10^12 bytes - return tr("%1 TB", "MetricBinaryDialect").arg(numString); - case KFormat::UnitPetaByte: - //: MetricBinaryDialect size in 10^15 bytes - return tr("%1 PB", "MetricBinaryDialect").arg(numString); - case KFormat::UnitExaByte: - //: MetricBinaryDialect size in 10^18 byte - return tr("%1 EB", "MetricBinaryDialect").arg(numString); - case KFormat::UnitZettaByte: - //: MetricBinaryDialect size in 10^21 bytes - return tr("%1 ZB", "MetricBinaryDialect").arg(numString); - case KFormat::UnitYottaByte: - //: MetricBinaryDialect size in 10^24 bytes - return tr("%1 YB", "MetricBinaryDialect").arg(numString); - } - } else if (dialect == KFormat::JEDECBinaryDialect) { - switch (unit) { - case KFormat::UnitByte: - //: JEDECBinaryDialect memory size in bytes - return tr("%1 B", "JEDECBinaryDialect").arg(numString); - case KFormat::UnitKiloByte: - //: JEDECBinaryDialect memory size in 1024 bytes - return tr("%1 KB", "JEDECBinaryDialect").arg(numString); - case KFormat::UnitMegaByte: - //: JEDECBinaryDialect memory size in 10^20 bytes - return tr("%1 MB", "JEDECBinaryDialect").arg(numString); - case KFormat::UnitGigaByte: - //: JEDECBinaryDialect memory size in 10^30 bytes - return tr("%1 GB", "JEDECBinaryDialect").arg(numString); - case KFormat::UnitTeraByte: - //: JEDECBinaryDialect memory size in 10^40 bytes - return tr("%1 TB", "JEDECBinaryDialect").arg(numString); - case KFormat::UnitPetaByte: - //: JEDECBinaryDialect memory size in 10^50 bytes - return tr("%1 PB", "JEDECBinaryDialect").arg(numString); - case KFormat::UnitExaByte: - //: JEDECBinaryDialect memory size in 10^60 bytes - return tr("%1 EB", "JEDECBinaryDialect").arg(numString); - case KFormat::UnitZettaByte: - //: JEDECBinaryDialect memory size in 10^70 bytes - return tr("%1 ZB", "JEDECBinaryDialect").arg(numString); - case KFormat::UnitYottaByte: - //: JEDECBinaryDialect memory size in 10^80 bytes - return tr("%1 YB", "JEDECBinaryDialect").arg(numString); - } - } else { // KFormat::IECBinaryDialect, KFormat::DefaultBinaryDialect - switch (unit) { - case KFormat::UnitByte: - //: IECBinaryDialect size in bytes - return tr("%1 B", "IECBinaryDialect").arg(numString); - case KFormat::UnitKiloByte: - //: IECBinaryDialect size in 1024 bytes - return tr("%1 KiB", "IECBinaryDialect").arg(numString); - case KFormat::UnitMegaByte: - //: IECBinaryDialect size in 10^20 bytes - return tr("%1 MiB", "IECBinaryDialect").arg(numString); - case KFormat::UnitGigaByte: - //: IECBinaryDialect size in 10^30 bytes - return tr("%1 GiB", "IECBinaryDialect").arg(numString); - case KFormat::UnitTeraByte: - //: IECBinaryDialect size in 10^40 bytes - return tr("%1 TiB", "IECBinaryDialect").arg(numString); - case KFormat::UnitPetaByte: - //: IECBinaryDialect size in 10^50 bytes - return tr("%1 PiB", "IECBinaryDialect").arg(numString); - case KFormat::UnitExaByte: - //: IECBinaryDialect size in 10^60 bytes - return tr("%1 EiB", "IECBinaryDialect").arg(numString); - case KFormat::UnitZettaByte: - //: IECBinaryDialect size in 10^70 bytes - return tr("%1 ZiB", "IECBinaryDialect").arg(numString); - case KFormat::UnitYottaByte: - //: IECBinaryDialect size in 10^80 bytes - return tr("%1 YiB", "IECBinaryDialect").arg(numString); - } + switch (units) { + case KFormat::UnitByte: + return formatValue(size, KFormat::Unit::Byte, QString(), precision, KFormat::UnitPrefix::Unity, dialect); + case KFormat::UnitKiloByte: + return formatValue(size, KFormat::Unit::Byte, QString(), precision, KFormat::UnitPrefix::Kilo, dialect); + case KFormat::UnitMegaByte: + return formatValue(size, KFormat::Unit::Byte, QString(), precision, KFormat::UnitPrefix::Mega, dialect); + case KFormat::UnitGigaByte: + return formatValue(size, KFormat::Unit::Byte, QString(), precision, KFormat::UnitPrefix::Giga, dialect); + case KFormat::UnitTeraByte: + return formatValue(size, KFormat::Unit::Byte, QString(), precision, KFormat::UnitPrefix::Tera, dialect); + case KFormat::UnitPetaByte: + return formatValue(size, KFormat::Unit::Byte, QString(), precision, KFormat::UnitPrefix::Peta, dialect); + case KFormat::UnitExaByte: + return formatValue(size, KFormat::Unit::Byte, QString(), precision, KFormat::UnitPrefix::Exa, dialect); + case KFormat::UnitZettaByte: + return formatValue(size, KFormat::Unit::Byte, QString(), precision, KFormat::UnitPrefix::Zetta, dialect); + case KFormat::UnitYottaByte: + return formatValue(size, KFormat::Unit::Byte, QString(), precision, KFormat::UnitPrefix::Yotta, dialect); + case KFormat::DefaultBinaryUnits: + default: + return formatValue(size, KFormat::Unit::Byte, QString(), precision, KFormat::UnitPrefix::AutoAdjust, dialect); } - - // Should never reach here - Q_ASSERT(false); - return numString; } enum TimeConstants {