include/vcl/field.hxx                           |    6 +++++-
 sd/source/ui/animations/CustomAnimationPane.cxx |    1 +
 vcl/source/control/field.cxx                    |   21 +++++++++++----------
 3 files changed, 17 insertions(+), 11 deletions(-)

New commits:
commit 6d595217f59957e1fc6ff69bd77dce1c9a1c6036
Author:     Ashod Nakashian <ashod.nakash...@collabora.co.uk>
AuthorDate: Sun Jul 21 23:47:40 2019 -0400
Commit:     Tor Lillqvist <t...@collabora.com>
CommitDate: Mon Jul 22 10:59:39 2019 +0200

    vcl: Numeric/MetricBox formatting of decimals is controlled via a flag
    
    Currently only the Animation Pane duration control uses the
    always-visible decimals. By making it controlled via a flag
    it is now flexible and avoids regressions in other controls.
    
    Change-Id: I324fa6944daaab311725ae6593e763b140315ae7
    Reviewed-on: https://gerrit.libreoffice.org/76082
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Reviewed-by: Tor Lillqvist <t...@collabora.com>
    Tested-by: Tor Lillqvist <t...@collabora.com>

diff --git a/include/vcl/field.hxx b/include/vcl/field.hxx
index de00346a2e51..b29a29b37f56 100644
--- a/include/vcl/field.hxx
+++ b/include/vcl/field.hxx
@@ -142,7 +142,10 @@ public:
     sal_Int64               GetSpinSize() const               { return 
mnSpinSize; }
 
     void                    SetDecimalDigits( sal_uInt16 nDigits );
-    sal_uInt16                  GetDecimalDigits() const { return 
mnDecimalDigits;}
+    sal_uInt16              GetDecimalDigits() const { return mnDecimalDigits; 
}
+
+    void                    SetShowDecimals(bool bShowDecimals) { 
mbShowDecimals = bShowDecimals; }
+    bool                    IsShowDecimals() const { return mbShowDecimals; }
 
     void                    SetUseThousandSep( bool b );
     bool                    IsUseThousandSep() const { return mbThousandSep; }
@@ -191,6 +194,7 @@ private:
     SAL_DLLPRIVATE void     ImplInit();
 
     sal_uInt16              mnDecimalDigits;
+    bool                    mbShowDecimals; //< When true, formatting appends 
.0s (as may as mnDecimalDigits).
     bool                    mbThousandSep;
     bool                    mbShowTrailingZeros;
 
diff --git a/sd/source/ui/animations/CustomAnimationPane.cxx 
b/sd/source/ui/animations/CustomAnimationPane.cxx
index d98c2952986f..3e1fc90a2850 100644
--- a/sd/source/ui/animations/CustomAnimationPane.cxx
+++ b/sd/source/ui/animations/CustomAnimationPane.cxx
@@ -204,6 +204,7 @@ void CustomAnimationPane::initialize()
     mpCBXDuration->InsertValue(300, FUNIT_CUSTOM);
     mpCBXDuration->InsertValue(500, FUNIT_CUSTOM);
     mpCBXDuration->AdaptDropDownLineCountToMaximum();
+    mpCBXDuration->SetShowDecimals(true);
 
 
     mpPBAddEffect->SetClickHdl( LINK( this, CustomAnimationPane, implClickHdl 
) );
diff --git a/vcl/source/control/field.cxx b/vcl/source/control/field.cxx
index 8740c9749922..9daa2ab8e944 100644
--- a/vcl/source/control/field.cxx
+++ b/vcl/source/control/field.cxx
@@ -79,7 +79,7 @@ bool ImplNumericProcessKeyInput( const KeyEvent& rKEvt,
 
 bool ImplNumericGetValue( const OUString& rStr, sal_Int64& rValue,
                                  sal_uInt16 nDecDigits, const 
LocaleDataWrapper& rLocaleDataWrappper,
-                                 bool bCurrency = false )
+                                 bool bCurrency = false, bool bShowDecimals = 
false )
 {
     OUString            aStr = rStr;
     OUStringBuffer      aStr1, aStr2, aStrFrac, aStrNum, aStrDenom;
@@ -130,7 +130,7 @@ bool ImplNumericGetValue( const OUString& rStr, sal_Int64& 
rValue,
         aStr1.append(aStr.getStr(), nDecPos);
         aStr2.append(aStr.getStr()+nDecPos+1);
     }
-    else if (nDecDigits > 0 && aStr.getLength() > nDecDigits)
+    else if (bShowDecimals && nDecDigits > 0 && aStr.getLength() > nDecDigits)
     {
         // We expect a decimal point and a certain number of decimal digits,
         // but seems the user has deleted the decimal point, so we restore it.
@@ -496,7 +496,7 @@ bool FormatterBase::IsEmptyFieldValue() const
 bool NumericFormatter::ImplNumericReformat( const OUString& rStr, sal_Int64& 
rValue,
                                                 OUString& rOutStr )
 {
-    if ( !ImplNumericGetValue( rStr, rValue, GetDecimalDigits(), 
ImplGetLocaleDataWrapper() ) )
+    if ( !ImplNumericGetValue( rStr, rValue, GetDecimalDigits(), 
ImplGetLocaleDataWrapper(), false, IsShowDecimals()) )
         return true;
     else
     {
@@ -512,10 +512,11 @@ void NumericFormatter::ImplInit()
     mnFieldValue        = 0;
     mnLastValue         = 0;
     mnMin               = 0;
-    mnMax               = 100000000; // A user-friendly round number.
+    mnMax               = 1000000; // A user-friendly round number.
         // a "large" value substantially smaller than SAL_MAX_INT64, to avoid
         // overflow in computations using this "dummy" value
     mnDecimalDigits     = 2;
+    mbShowDecimals      = false;
     mbThousandSep       = true;
     mbShowTrailingZeros = true;
     mbWrapOnLimits      = false;
@@ -604,7 +605,7 @@ sal_Int64 NumericFormatter::GetValueFromString(const 
OUString& rStr) const
     sal_Int64 nTempValue;
 
     if (ImplNumericGetValue(rStr, nTempValue,
-        GetDecimalDigits(), ImplGetLocaleDataWrapper()))
+        GetDecimalDigits(), ImplGetLocaleDataWrapper(), false, 
IsShowDecimals()))
     {
         return ClipAgainstMinMax(nTempValue);
     }
@@ -1317,11 +1318,11 @@ double MetricField::ConvertDoubleValue( double nValue, 
sal_uInt16 nDigits,
 }
 
 static bool ImplMetricGetValue( const OUString& rStr, double& rValue, 
sal_Int64 nBaseValue,
-                                sal_uInt16 nDecDigits, const 
LocaleDataWrapper& rLocaleDataWrapper, FieldUnit eUnit )
+                                sal_uInt16 nDecDigits, const 
LocaleDataWrapper& rLocaleDataWrapper, FieldUnit eUnit, bool bShowDecimals )
 {
     // Get value
     sal_Int64 nValue;
-    if ( !ImplNumericGetValue( rStr, nValue, nDecDigits, rLocaleDataWrapper ) )
+    if ( !ImplNumericGetValue( rStr, nValue, nDecDigits, rLocaleDataWrapper, 
false, bShowDecimals ) )
         return false;
 
     // Determine unit
@@ -1336,7 +1337,7 @@ static bool ImplMetricGetValue( const OUString& rStr, 
double& rValue, sal_Int64
 
 bool MetricFormatter::ImplMetricReformat( const OUString& rStr, double& 
rValue, OUString& rOutStr )
 {
-    if ( !ImplMetricGetValue( rStr, rValue, mnBaseValue, GetDecimalDigits(), 
ImplGetLocaleDataWrapper(), meUnit ) )
+    if ( !ImplMetricGetValue( rStr, rValue, mnBaseValue, GetDecimalDigits(), 
ImplGetLocaleDataWrapper(), meUnit, IsShowDecimals() ) )
         return true;
     else
     {
@@ -1427,7 +1428,7 @@ sal_Int64 MetricFormatter::GetValueFromStringUnit(const 
OUString& rStr, FieldUni
 {
     double nTempValue;
     // caution: precision loss in double cast
-    if (!ImplMetricGetValue(rStr, nTempValue, mnBaseValue, GetDecimalDigits(), 
ImplGetLocaleDataWrapper(), meUnit))
+    if (!ImplMetricGetValue(rStr, nTempValue, mnBaseValue, GetDecimalDigits(), 
ImplGetLocaleDataWrapper(), meUnit, IsShowDecimals()))
         nTempValue = static_cast<double>(mnLastValue);
 
     // caution: precision loss in double cast
@@ -1791,7 +1792,7 @@ sal_Int64 MetricBox::GetValue( sal_Int32 nPos ) const
 {
     double nValue = 0;
     ImplMetricGetValue( ComboBox::GetEntry( nPos ), nValue, mnBaseValue,
-                        GetDecimalDigits(), ImplGetLocaleDataWrapper(), meUnit 
);
+                        GetDecimalDigits(), ImplGetLocaleDataWrapper(), 
meUnit, IsShowDecimals() );
 
     // convert to previously configured units
     sal_Int64 nRetValue = MetricField::ConvertValue( (sal_Int64)nValue, 
mnBaseValue, GetDecimalDigits(),
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to