Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsprocessingfeedback.cpp 3 : : ------------------------- 4 : : begin : June 2017 5 : : copyright : (C) 2017 by Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 7 : : ***************************************************************************/ 8 : : 9 : : /*************************************************************************** 10 : : * * 11 : : * This program is free software; you can redistribute it and/or modify * 12 : : * it under the terms of the GNU General Public License as published by * 13 : : * the Free Software Foundation; either version 2 of the License, or * 14 : : * (at your option) any later version. * 15 : : * * 16 : : ***************************************************************************/ 17 : : 18 : : #include "qgsprocessingfeedback.h" 19 : : #include "qgsgeos.h" 20 : : #include "qgsprocessingprovider.h" 21 : : #include <ogr_api.h> 22 : : #include <gdal_version.h> 23 : : #include <proj.h> 24 : : 25 : : #ifdef HAVE_PDAL 26 : : #include <pdal/pdal.hpp> 27 : : #endif 28 : : 29 : 0 : QgsProcessingFeedback::QgsProcessingFeedback( bool logFeedback ) 30 : 0 : : mLogFeedback( logFeedback ) 31 : 0 : { 32 : : 33 : 0 : } 34 : : 35 : 0 : void QgsProcessingFeedback::setProgressText( const QString & ) 36 : : { 37 : 0 : } 38 : : 39 : 0 : void QgsProcessingFeedback::reportError( const QString &error, bool ) 40 : : { 41 : 0 : if ( mLogFeedback ) 42 : 0 : QgsMessageLog::logMessage( error, tr( "Processing" ), Qgis::Critical ); 43 : : 44 : 0 : mHtmlLog.append( QStringLiteral( "<span style=\"color:red\">%1</span><br/>" ).arg( error.toHtmlEscaped() ).replace( '\n', QLatin1String( "<br>" ) ) ); 45 : 0 : mTextLog.append( error + '\n' ); 46 : 0 : } 47 : : 48 : 0 : void QgsProcessingFeedback::pushWarning( const QString &warning ) 49 : : { 50 : 0 : if ( mLogFeedback ) 51 : 0 : QgsMessageLog::logMessage( warning, tr( "Processing" ), Qgis::Warning ); 52 : : 53 : 0 : mHtmlLog.append( QStringLiteral( "<span style=\"color:#b85a20;\">%1</span><br/>" ).arg( warning.toHtmlEscaped() ).replace( '\n', QLatin1String( "<br>" ) ) + QStringLiteral( "<br/>" ) ); 54 : 0 : mTextLog.append( warning + '\n' ); 55 : 0 : } 56 : : 57 : 0 : void QgsProcessingFeedback::pushInfo( const QString &info ) 58 : : { 59 : 0 : if ( mLogFeedback ) 60 : 0 : QgsMessageLog::logMessage( info, tr( "Processing" ), Qgis::Info ); 61 : : 62 : 0 : mHtmlLog.append( info.toHtmlEscaped().replace( '\n', QLatin1String( "<br>" ) ) + QStringLiteral( "<br/>" ) ); 63 : 0 : mTextLog.append( info + '\n' ); 64 : 0 : } 65 : : 66 : 0 : void QgsProcessingFeedback::pushCommandInfo( const QString &info ) 67 : : { 68 : 0 : if ( mLogFeedback ) 69 : 0 : QgsMessageLog::logMessage( info, tr( "Processing" ), Qgis::Info ); 70 : : 71 : 0 : mHtmlLog.append( QStringLiteral( "<code>%1</code><br/>" ).arg( info.toHtmlEscaped().replace( '\n', QLatin1String( "<br>" ) ) ) ); 72 : 0 : mTextLog.append( info + '\n' ); 73 : 0 : } 74 : : 75 : 0 : void QgsProcessingFeedback::pushDebugInfo( const QString &info ) 76 : : { 77 : 0 : if ( mLogFeedback ) 78 : 0 : QgsMessageLog::logMessage( info, tr( "Processing" ), Qgis::Info ); 79 : : 80 : 0 : mHtmlLog.append( QStringLiteral( "<span style=\"color:#777\">%1</span><br/>" ).arg( info.toHtmlEscaped().replace( '\n', QLatin1String( "<br>" ) ) ) ); 81 : 0 : mTextLog.append( info + '\n' ); 82 : 0 : } 83 : : 84 : 0 : void QgsProcessingFeedback::pushConsoleInfo( const QString &info ) 85 : : { 86 : 0 : if ( mLogFeedback ) 87 : 0 : QgsMessageLog::logMessage( info, tr( "Processing" ), Qgis::Info ); 88 : : 89 : 0 : mHtmlLog.append( QStringLiteral( "<code style=\"color:#777\">%1</code><br/>" ).arg( info.toHtmlEscaped().replace( '\n', QLatin1String( "<br>" ) ) ) ); 90 : 0 : mTextLog.append( info + '\n' ); 91 : 0 : } 92 : : 93 : 0 : void QgsProcessingFeedback::pushVersionInfo( const QgsProcessingProvider *provider ) 94 : : { 95 : 0 : pushDebugInfo( tr( "QGIS version: %1" ).arg( Qgis::version() ) ); 96 : 0 : if ( QString( Qgis::devVersion() ) != QLatin1String( "exported" ) ) 97 : : { 98 : 0 : pushDebugInfo( tr( "QGIS code revision: %1" ).arg( Qgis::devVersion() ) ); 99 : 0 : } 100 : 0 : pushDebugInfo( tr( "Qt version: %1" ).arg( qVersion() ) ); 101 : 0 : pushDebugInfo( tr( "GDAL version: %1" ).arg( GDALVersionInfo( "RELEASE_NAME" ) ) ); 102 : 0 : pushDebugInfo( tr( "GEOS version: %1" ).arg( GEOSversion() ) ); 103 : : 104 : 0 : PJ_INFO info = proj_info(); 105 : 0 : pushDebugInfo( tr( "PROJ version: %1" ).arg( info.release ) ); 106 : : 107 : : #ifdef HAVE_PDAL 108 : : #if PDAL_VERSION_MAJOR_INT > 1 || (PDAL_VERSION_MAJOR_INT == 1 && PDAL_VERSION_MINOR_INT >= 7) 109 : : pushDebugInfo( tr( "PDAL version: %1" ).arg( QString::fromStdString( pdal::Config::fullVersionString() ) ) ); 110 : : #else 111 : : pushDebugInfo( tr( "PDAL version: %1" ).arg( QString::fromStdString( pdal::GetFullVersionString() ) ) ); 112 : : #endif 113 : : #endif 114 : : 115 : 0 : if ( provider && !provider->versionInfo().isEmpty() ) 116 : : { 117 : 0 : pushDebugInfo( tr( "%1 version: %2" ).arg( provider->name(), provider->versionInfo() ) ); 118 : 0 : } 119 : 0 : } 120 : : 121 : 0 : QString QgsProcessingFeedback::htmlLog() const 122 : : { 123 : 0 : return mHtmlLog; 124 : : } 125 : : 126 : 0 : QString QgsProcessingFeedback::textLog() const 127 : : { 128 : 0 : return mTextLog; 129 : : } 130 : : 131 : : 132 : 0 : QgsProcessingMultiStepFeedback::QgsProcessingMultiStepFeedback( int childAlgorithmCount, QgsProcessingFeedback *feedback ) 133 : 0 : : mChildSteps( childAlgorithmCount ) 134 : 0 : , mFeedback( feedback ) 135 : 0 : { 136 : 0 : connect( mFeedback, &QgsFeedback::canceled, this, &QgsFeedback::cancel, Qt::DirectConnection ); 137 : 0 : connect( this, &QgsFeedback::progressChanged, this, &QgsProcessingMultiStepFeedback::updateOverallProgress ); 138 : 0 : } 139 : : 140 : 0 : void QgsProcessingMultiStepFeedback::setCurrentStep( int step ) 141 : : { 142 : 0 : mCurrentStep = step; 143 : 0 : mFeedback->setProgress( 100.0 * static_cast< double >( mCurrentStep ) / mChildSteps ); 144 : 0 : } 145 : : 146 : 0 : void QgsProcessingMultiStepFeedback::setProgressText( const QString &text ) 147 : : { 148 : 0 : mFeedback->setProgressText( text ); 149 : 0 : } 150 : : 151 : 0 : void QgsProcessingMultiStepFeedback::reportError( const QString &error, bool fatalError ) 152 : : { 153 : 0 : mFeedback->reportError( error, fatalError ); 154 : 0 : } 155 : : 156 : 0 : void QgsProcessingMultiStepFeedback::pushWarning( const QString &warning ) 157 : : { 158 : 0 : mFeedback->pushWarning( warning ); 159 : 0 : } 160 : : 161 : 0 : void QgsProcessingMultiStepFeedback::pushInfo( const QString &info ) 162 : : { 163 : 0 : mFeedback->pushInfo( info ); 164 : 0 : } 165 : : 166 : 0 : void QgsProcessingMultiStepFeedback::pushCommandInfo( const QString &info ) 167 : : { 168 : 0 : mFeedback->pushCommandInfo( info ); 169 : 0 : } 170 : : 171 : 0 : void QgsProcessingMultiStepFeedback::pushDebugInfo( const QString &info ) 172 : : { 173 : 0 : mFeedback->pushDebugInfo( info ); 174 : 0 : } 175 : : 176 : 0 : void QgsProcessingMultiStepFeedback::pushConsoleInfo( const QString &info ) 177 : : { 178 : 0 : mFeedback->pushConsoleInfo( info ); 179 : 0 : } 180 : : 181 : 0 : QString QgsProcessingMultiStepFeedback::htmlLog() const 182 : : { 183 : 0 : return mFeedback->htmlLog(); 184 : : } 185 : : 186 : 0 : QString QgsProcessingMultiStepFeedback::textLog() const 187 : : { 188 : 0 : return mFeedback->textLog(); 189 : : } 190 : : 191 : 0 : void QgsProcessingMultiStepFeedback::updateOverallProgress( double progress ) 192 : : { 193 : 0 : double baseProgress = 100.0 * static_cast< double >( mCurrentStep ) / mChildSteps; 194 : 0 : double currentAlgorithmProgress = progress / mChildSteps; 195 : 0 : mFeedback->setProgress( baseProgress + currentAlgorithmProgress ); 196 : 0 : } 197 : 0 :