From 77060a75a6db296bb49e7bf031883ab7fed2317c Mon Sep 17 00:00:00 2001 From: hokieengr Date: Sat, 15 Sep 2018 18:10:05 -0400 Subject: [PATCH] Added support for fractional inch user setting. --- src/App/Application.cpp | 5 +++++ src/Base/Quantity.cpp | 4 ++++ src/Base/Quantity.h | 13 +++++++++++++ src/Base/UnitsSchemaImperial1.cpp | 6 ++---- src/Gui/DlgSettingsUnitsImp.cpp | 5 ++++- 5 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/App/Application.cpp b/src/App/Application.cpp index aa359dfbe7..2ad1285524 100644 --- a/src/App/Application.cpp +++ b/src/App/Application.cpp @@ -1576,6 +1576,11 @@ void Application::initApplication(void) UnitsApi::setSchema((UnitSystem)hGrp->GetInt("UserSchema",0)); UnitsApi::setDecimals(hGrp->GetInt("Decimals", Base::UnitsApi::getDecimals())); + // In case we are using fractional inches, get user setting for min unit + int denom = hGrp->GetInt("FracInch", Base::QuantityFormat::getDenominator()); + Base::QuantityFormat::setDenominator(denom); + + #if defined (_DEBUG) Console().Log("Application is built with debug information\n"); #endif diff --git a/src/Base/Quantity.cpp b/src/Base/Quantity.cpp index aab28e5c25..890c4575ae 100644 --- a/src/Base/Quantity.cpp +++ b/src/Base/Quantity.cpp @@ -44,6 +44,10 @@ using namespace Base; +// ====== Static attributes ========================= +int QuantityFormat::defaultDenominator = 8; // for 1/8" + + QuantityFormat::QuantityFormat() : option(static_cast(OmitGroupSeparator | RejectGroupSeparator)) , format(Fixed) diff --git a/src/Base/Quantity.h b/src/Base/Quantity.h index 7105e04387..32d1ca2df4 100644 --- a/src/Base/Quantity.h +++ b/src/Base/Quantity.h @@ -52,6 +52,19 @@ struct QuantityFormat { NumberFormat format; int precision; + // Default denominator of minimum fractional inch. Only used in certain + // schemas. + static int defaultDenominator; // i.e 8 for 1/8" + + static inline int getDenominator() { + return defaultDenominator; + } + + static inline void setDenominator(int denom) + { + defaultDenominator = denom; + } + QuantityFormat(); inline char toFormat() const { switch (format) { diff --git a/src/Base/UnitsSchemaImperial1.cpp b/src/Base/UnitsSchemaImperial1.cpp index ff93272d77..d0a5bead2a 100644 --- a/src/Base/UnitsSchemaImperial1.cpp +++ b/src/Base/UnitsSchemaImperial1.cpp @@ -229,10 +229,8 @@ QString UnitsSchemaImperialBuilding::schemaTranslate(const Quantity &quant, doub int a,b,d; // used to compute greatest common denominator int tmp; // temporary variable for GCD - // TEMPORARY: This will be replaced by a user setting when time permits. - // For now, it will be hardcoded to emulate the previous (1/8") - // behavior. - minden = 8; // 1/8" + // Get the current user specified minimum denominator + minden = Base::QuantityFormat::getDenominator(); // Compute and round the total number of fractional units ntot = (int)std::round(totalInches * (double)minden); diff --git a/src/Gui/DlgSettingsUnitsImp.cpp b/src/Gui/DlgSettingsUnitsImp.cpp index dad3868ac6..656b5f4aad 100644 --- a/src/Gui/DlgSettingsUnitsImp.cpp +++ b/src/Gui/DlgSettingsUnitsImp.cpp @@ -98,6 +98,9 @@ void DlgSettingsUnitsImp::saveSettings() // numerical fractional inch value) needs to be stored. FracInch = std::pow(2, ui->comboBox_FracInch->currentIndex() + 1); hGrp->SetInt("FracInch", FracInch); + + // Set the actual format value + Base::QuantityFormat::setDenominator(FracInch); } void DlgSettingsUnitsImp::loadSettings() @@ -111,7 +114,7 @@ void DlgSettingsUnitsImp::loadSettings() ui->spinBoxDecimals->setValue(hGrp->GetInt("Decimals",Base::UnitsApi::getDecimals())); // Get the current user setting for the minimum fractional inch - FracInch = hGrp->GetInt("FracInch",8); // 8==1/8" + FracInch = hGrp->GetInt("FracInch", Base::QuantityFormat::getDenominator()); // Convert fractional inch to the corresponding combobox index using this // handy little equation.