Base: refactor unit formatting defaults

Defaults for both precision (number of digits after decimal point)
and denominator (number of fractions) are defined on various places
making difficult to find which default is used for various tasks.
Store these values at one central place: UnitsApi. Unless overriden
by user, default values are defined by unitSchemasDataPack.
This commit is contained in:
Ladislav Michl
2025-08-27 11:40:50 +02:00
parent 28c256ba07
commit e7cd72b2e0
6 changed files with 30 additions and 50 deletions

View File

@@ -2782,8 +2782,7 @@ void Application::initApplication()
("User parameter:BaseApp/Preferences/Units");
Base::UnitsApi::setSchema(hGrp->GetInt("UserSchema", Base::UnitsApi::getDefSchemaNum()));
Base::UnitsApi::setDecimals(hGrp->GetInt("Decimals", Base::UnitsApi::getDecimals()));
Base::QuantityFormat::setDefaultDenominator(
hGrp->GetInt("FracInch", Base::QuantityFormat::getDefaultDenominator()));
Base::UnitsApi::setDenominator(hGrp->GetInt("FracInch", Base::UnitsApi::getDenominator()));
#if defined (_DEBUG)
Base::Console().log("Application is built with debug information\n");

View File

@@ -57,23 +57,18 @@ using Base::Quantity;
using Base::QuantityFormat;
using Base::UnitsSchema;
// ====== Static attributes =========================
// NOLINTNEXTLINE
int QuantityFormat::defaultDenominator = 8; // for 1/8"
QuantityFormat::QuantityFormat()
: option(OmitGroupSeparator | RejectGroupSeparator)
, format(Fixed)
, precision(static_cast<int>(UnitsApi::getDecimals()))
, denominator(defaultDenominator)
, precision(UnitsApi::getDecimals())
, denominator(UnitsApi::getDenominator())
{}
QuantityFormat::QuantityFormat(QuantityFormat::NumberFormat format, int decimals)
: option(OmitGroupSeparator | RejectGroupSeparator)
, format(format)
, precision(decimals < 0 ? UnitsApi::getDecimals() : decimals)
, denominator(defaultDenominator)
, denominator(UnitsApi::getDenominator())
{}
// ----------------------------------------------------------------------------

View File

@@ -52,21 +52,6 @@ struct BaseExport QuantityFormat
int precision;
int denominator;
// Default denominator of minimum fractional inch. Only used in certain
// schemas.
// NOLINTNEXTLINE
static int defaultDenominator; // i.e 8 for 1/8"
static inline int getDefaultDenominator()
{
return defaultDenominator;
}
static inline void setDefaultDenominator(int denom)
{
defaultDenominator = denom;
}
inline int getDenominator() const
{
return denominator;

View File

@@ -67,9 +67,24 @@ std::string UnitsApi::getBasicLengthUnit()
return schemas->currentSchema()->getBasicLengthUnit();
}
std::size_t UnitsApi::getFractDenominator()
void UnitsApi::setDecimals(const int prec)
{
return schemas->defFractDenominator();
decimals = prec;
}
int UnitsApi::getDecimals()
{
return decimals < 0 ? schemas->getDecimals() : decimals;
}
void UnitsApi::setDenominator(int frac)
{
denominator = frac;
}
int UnitsApi::getDenominator()
{
return denominator < 0 ? schemas->defFractDenominator() : denominator;
}
std::unique_ptr<UnitsSchema> UnitsApi::createSchema(const std::size_t num)
@@ -121,18 +136,3 @@ std::string UnitsApi::schemaTranslate(const Quantity& quant)
std::string dummy2;
return schemas->currentSchema()->translate(quant, dummy1, dummy2);
}
void UnitsApi::setDecimals(const std::size_t prec)
{
decimals = prec;
}
size_t UnitsApi::getDecimals()
{
return decimals;
}
size_t UnitsApi::getDefDecimals()
{
return schemas->getDecimals();
}

View File

@@ -52,9 +52,11 @@ public:
static double toDouble(PyObject* args, const Base::Unit& u = Base::Unit());
static void setDecimals(std::size_t);
static std::size_t getDecimals();
static std::size_t getDefDecimals();
static void setDecimals(int);
static int getDecimals();
static void setDenominator(int);
static int getDenominator();
static std::vector<std::string> getDescriptions();
static std::vector<std::string> getNames();
@@ -64,7 +66,6 @@ public:
static bool isMultiUnitAngle();
static bool isMultiUnitLength();
static std::string getBasicLengthUnit();
static std::size_t getFractDenominator();
static std::size_t getDefSchemaNum()
{
@@ -76,8 +77,8 @@ public:
protected:
static inline auto schemas =
std::make_unique<UnitsSchemas>(UnitsSchemasData::unitSchemasDataPack);
static inline std::size_t decimals {2};
static inline std::size_t denominator {2};
static inline int decimals {-1};
static inline int denominator {-1};
// the python API wrapper methods
static PyObject* sParseQuantity(PyObject* self, PyObject* args);

View File

@@ -200,7 +200,7 @@ void DlgSettingsGeneral::saveUnitSystemSettings()
hGrpu->SetInt("FracInch", FracInch);
// Set the actual format value
QuantityFormat::setDefaultDenominator(FracInch);
UnitsApi::setDenominator(FracInch);
// Set and save the Unit System
if (ui->checkBox_projectUnitSystemIgnore->isChecked()) {
@@ -272,7 +272,7 @@ void DlgSettingsGeneral::loadSettings()
ui->checkBox_projectUnitSystemIgnore->setChecked(hGrpu->GetBool("IgnoreProjectSchema", false));
// Get the current user setting for the minimum fractional inch
FracInch = hGrpu->GetInt("FracInch", QuantityFormat::getDefaultDenominator());
FracInch = hGrpu->GetInt("FracInch", UnitsApi::getDenominator());
// Convert fractional inch to the corresponding combobox index using this
// handy little equation.