@@ -746,7 +746,7 @@ void QgsGrassModule::finished( int exitCode, QProcess::ExitStatus exitStatus )
746
746
if ( exitCode == 0 )
747
747
{
748
748
mOutputTextBrowser ->append ( tr ( " <B>Successfully finished</B>" ) );
749
- mProgressBar -> setValue ( 100 );
749
+ setProgress ( 100 , true );
750
750
mSuccess = true ;
751
751
mViewButton ->setEnabled ( !mOutputVector .isEmpty () || !mOutputRaster .isEmpty () );
752
752
mOptions ->freezeOutput ( false );
@@ -784,7 +784,7 @@ void QgsGrassModule::readStdout()
784
784
if ( rxpercent.indexIn ( line ) != -1 )
785
785
{
786
786
int progress = rxpercent.cap ( 1 ).toInt ();
787
- mProgressBar -> setValue ( progress );
787
+ setProgress ( progress );
788
788
}
789
789
else
790
790
{
@@ -810,7 +810,7 @@ void QgsGrassModule::readStderr()
810
810
QgsGrass::ModuleOutput type = QgsGrass::parseModuleOutput ( line, text, html, percent );
811
811
if ( type == QgsGrass::OutputPercent )
812
812
{
813
- mProgressBar -> setValue ( percent );
813
+ setProgress ( percent );
814
814
}
815
815
else if ( type == QgsGrass::OutputMessage || type == QgsGrass::OutputWarning || type == QgsGrass::OutputError )
816
816
{
@@ -819,6 +819,19 @@ void QgsGrassModule::readStderr()
819
819
}
820
820
}
821
821
822
+ void QgsGrassModule::setProgress ( int percent, bool force )
823
+ {
824
+ int max = 100 ;
825
+ // Do not set 100% until module finished, see #3131
826
+ if ( percent >= 100 && !force )
827
+ {
828
+ max = 0 ; // busy indicator
829
+ percent = 0 ;
830
+ }
831
+ mProgressBar ->setMaximum ( max );
832
+ mProgressBar ->setValue ( percent );
833
+ }
834
+
822
835
void QgsGrassModule::close ()
823
836
{
824
837
delete this ;
0 commit comments