diff options
-rw-r--r-- | include/xmloff/ProgressBarHelper.hxx | 1 | ||||
-rw-r--r-- | xmloff/source/core/ProgressBarHelper.cxx | 11 |
2 files changed, 9 insertions, 3 deletions
diff --git a/include/xmloff/ProgressBarHelper.hxx b/include/xmloff/ProgressBarHelper.hxx index 7eeed4ebc7c1..6af3603c4fa2 100644 --- a/include/xmloff/ProgressBarHelper.hxx +++ b/include/xmloff/ProgressBarHelper.hxx @@ -36,6 +36,7 @@ class XMLOFF_DLLPUBLIC ProgressBarHelper sal_Int32 nRange; sal_Int32 nReference; sal_Int32 nValue; + double fOldPercent; bool bStrict; // #96469#; if the value goes over the Range the progressbar starts again bool bRepeat; diff --git a/xmloff/source/core/ProgressBarHelper.cxx b/xmloff/source/core/ProgressBarHelper.cxx index 719ab804e3ad..2419ecf2f65d 100644 --- a/xmloff/source/core/ProgressBarHelper.cxx +++ b/xmloff/source/core/ProgressBarHelper.cxx @@ -25,6 +25,7 @@ using namespace ::com::sun::star; static const sal_Int32 nDefaultProgressBarRange = 1000000; +static const float fProgressStep = 0.5; ProgressBarHelper::ProgressBarHelper(const ::com::sun::star::uno::Reference < ::com::sun::star::task::XStatusIndicator>& xTempStatusIndicator, const bool bTempStrict) @@ -32,6 +33,7 @@ ProgressBarHelper::ProgressBarHelper(const ::com::sun::star::uno::Reference < :: , nRange(nDefaultProgressBarRange) , nReference(100) , nValue(0) +, fOldPercent(0.0) , bStrict(bTempStrict) , bRepeat(true) #ifdef DBG_UTIL @@ -87,9 +89,12 @@ void ProgressBarHelper::SetValue(sal_Int32 nTempValue) double fValue(nValue); double fNewValue ((fValue * nRange) / nReference); - xStatusIndicator->setValue((sal_Int32)fNewValue); - - // #95181# disabled, because we want to call setValue very often to enable a good reschedule + double fPercent((fNewValue * 100) / nRange); + if (fPercent >= (fOldPercent + fProgressStep) || fPercent < fOldPercent) + { + xStatusIndicator->setValue((sal_Int32)fNewValue); + fOldPercent = fPercent; + } } #ifdef DBG_UTIL else if (!bFailure) |