void QgsGeometryCheckerResultTab::updateError( QgsGeometryCheckError *error, bool statusChanged ) { if ( !mErrorMap.contains( error ) ) { return; } // Disable sorting to prevent crashes: if i.e. sorting by col 0, as soon as the item(row, 0) is set, // the row is potentially moved due to sorting, and subsequent item(row, col) reference wrong item bool sortingWasEnabled = ui.tableWidgetErrors->isSortingEnabled(); if ( sortingWasEnabled ) ui.tableWidgetErrors->setSortingEnabled( false ); int row = mErrorMap.value( error ).row(); int prec = 7 - std::floor( std::max( 0., std::log10( std::max( error->location().x(), error->location().y() ) ) ) ); QString posStr = QStringLiteral( "%1, %2" ).arg( error->location().x(), 0, 'f', prec ).arg( error->location().y(), 0, 'f', prec ); ui.tableWidgetErrors->item( row, 3 )->setText( posStr ); ui.tableWidgetErrors->item( row, 4 )->setData( Qt::EditRole, error->value() ); if ( error->status() == QgsGeometryCheckError::StatusFixed ) { setRowStatus( row, Qt::green, tr( "Fixed: %1" ).arg( error->resolutionMessage() ), true ); ++mFixedCount; if ( statusChanged ) { mStatistics.fixedErrors.insert( error ); } } else if ( error->status() == QgsGeometryCheckError::StatusFixFailed ) { setRowStatus( row, Qt::red, tr( "Fix failed: %1" ).arg( error->resolutionMessage() ), true ); if ( statusChanged ) { mStatistics.failedErrors.insert( error ); } } else if ( error->status() == QgsGeometryCheckError::StatusObsolete ) { ui.tableWidgetErrors->setRowHidden( row, true ); // setRowStatus( row, Qt::gray, tr( "Obsolete" ), false ); --mErrorCount; // If error was new, don't report it as obsolete since the user never got to see the new error anyways if ( statusChanged && !mStatistics.newErrors.remove( error ) ) { mStatistics.obsoleteErrors.insert( error ); } } ui.labelErrorCount->setText( tr( "Total errors: %1, fixed errors: %2" ).arg( mErrorCount ).arg( mFixedCount ) ); if ( sortingWasEnabled ) ui.tableWidgetErrors->setSortingEnabled( true ); }
void QgsGeometryCheckerResultTab::updateError( QgsGeometryCheckError *error, bool statusChanged ) { if ( !mErrorMap.contains( error ) ) { return; } // Disable sorting to prevent crashes: if i.e. sorting by col 0, as soon as the item(row, 0) // is set, the row is potentially moved due to sorting, and subsequent item(row, col) reference wrong // item ui.tableWidgetErrors->setSortingEnabled( false ); int row = mErrorMap.value( error ).row(); int prec = 7 - std::floor( qMax( 0., std::log10( qMax( error->location().x(), error->location().y() ) ) ) ); QString posStr = QString( "%1, %2" ).arg( error->location().x(), 0, 'f', prec ).arg( error->location().y(), 0, 'f', prec ); double layerToMap = mIface->mapCanvas()->mapSettings().layerToMapUnits( mFeaturePool->getLayer() ); QVariant value; if ( error->valueType() == QgsGeometryCheckError::ValueLength ) { value = QVariant::fromValue( error->value().toDouble() * layerToMap ); } else if ( error->valueType() == QgsGeometryCheckError::ValueArea ) { value = QVariant::fromValue( error->value().toDouble() * layerToMap * layerToMap ); } else { value = error->value(); } ui.tableWidgetErrors->item( row, 2 )->setText( posStr ); ui.tableWidgetErrors->item( row, 3 )->setData( Qt::EditRole, value ); if ( error->status() == QgsGeometryCheckError::StatusFixed ) { setRowStatus( row, Qt::green, tr( "Fixed: %1" ).arg( error->resolutionMessage() ), true ); ++mFixedCount; if ( statusChanged ) { mStatistics.fixedErrors.insert( error ); } } else if ( error->status() == QgsGeometryCheckError::StatusFixFailed ) { setRowStatus( row, Qt::red, tr( "Fix failed: %1" ).arg( error->resolutionMessage() ), true ); if ( statusChanged ) { mStatistics.failedErrors.insert( error ); } } else if ( error->status() == QgsGeometryCheckError::StatusObsolete ) { ui.tableWidgetErrors->setRowHidden( row, true ); // setRowStatus( row, Qt::gray, tr( "Obsolete" ), false ); --mErrorCount; // If error was new, don't report it as obsolete since the user never got to see the new error anyways if ( statusChanged && !mStatistics.newErrors.remove( error ) ) { mStatistics.obsoleteErrors.insert( error ); } } ui.labelErrorCount->setText( tr( "Total errors: %1, fixed errors: %2" ).arg( mErrorCount ).arg( mFixedCount ) ); ui.tableWidgetErrors->setSortingEnabled( true ); }