Skip to content

Commit

Permalink
Fix processing rendering styles for output dialog, functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Aug 18, 2017
1 parent 0a4a7ac commit 7879c0a
Show file tree
Hide file tree
Showing 6 changed files with 44 additions and 28 deletions.
7 changes: 6 additions & 1 deletion python/core/processing/qgsprocessingcontext.sip
Expand Up @@ -92,14 +92,19 @@ class QgsProcessingContext
struct LayerDetails
{

LayerDetails( const QString &name, QgsProject *project );
LayerDetails( const QString &name, QgsProject *project, const QString &outputName = QString() );
%Docstring
Constructor for LayerDetails.
%End

QString name;
%Docstring
Friendly name for layer, to use when loading layer into project.
%End

QString outputName;
%Docstring
Associated output name from algorithm which generated the layer.
%End

QgsProject *project;
Expand Down
43 changes: 20 additions & 23 deletions python/plugins/processing/gui/EditRenderingStylesDialog.py
Expand Up @@ -32,12 +32,11 @@
from qgis.PyQt.QtCore import Qt
from qgis.PyQt.QtWidgets import QDialog, QHeaderView, QTableWidgetItem

from qgis.core import QgsProcessingParameterDefinition
from qgis.core import (QgsProcessingOutputRasterLayer,
QgsProcessingOutputVectorLayer)

from processing.gui.RenderingStyles import RenderingStyles
from processing.gui.RenderingStyleFilePanel import RenderingStyleFilePanel
from processing.core.outputs import OutputRaster
from processing.core.outputs import OutputVector

pluginPath = os.path.split(os.path.dirname(__file__))[0]
WIDGET, BASE = uic.loadUiType(
Expand All @@ -61,29 +60,27 @@ def __init__(self, alg):

def setTableContent(self):
numOutputs = 0
for output in self.alg.outputs:
if isinstance(output, (OutputVector, OutputRaster)):
if not output.flags() & QgsProcessingParameterDefinition.FlagHidden:
numOutputs += 1
for output in self.alg.outputDefinitions():
if isinstance(output, (QgsProcessingOutputVectorLayer, QgsProcessingOutputRasterLayer)):
numOutputs += 1
self.tblStyles.setRowCount(numOutputs)

i = 0
for output in self.alg.outputs:
if isinstance(output, (OutputVector, OutputRaster)):
if not output.flags() & QgsProcessingParameterDefinition.FlagHidden:
item = QTableWidgetItem(output.description() + '<' +
output.__class__.__name__ + '>')
item.setFlags(Qt.ItemIsEnabled)
self.tblStyles.setItem(i, 0, item)
item = RenderingStyleFilePanel()
style = \
RenderingStyles.getStyle(self.alg.id(),
output.name())
if style:
item.setText(str(style))
self.valueItems[output.name()] = item
self.tblStyles.setCellWidget(i, 1, item)
self.tblStyles.setRowHeight(i, 22)
for output in self.alg.outputDefinitions():
if isinstance(output, (QgsProcessingOutputVectorLayer, QgsProcessingOutputRasterLayer)):
item = QTableWidgetItem(output.description() + '<' +
output.__class__.__name__ + '>')
item.setFlags(Qt.ItemIsEnabled)
self.tblStyles.setItem(i, 0, item)
item = RenderingStyleFilePanel()
style = \
RenderingStyles.getStyle(self.alg.id(),
output.name())
if style:
item.setText(str(style))
self.valueItems[output.name()] = item
self.tblStyles.setCellWidget(i, 1, item)
self.tblStyles.setRowHeight(i, 22)
i += 1

def accept(self):
Expand Down
4 changes: 3 additions & 1 deletion python/plugins/processing/gui/Postprocessing.py
Expand Up @@ -60,7 +60,9 @@ def handleAlgorithmResults(alg, context, feedback=None, showResults=True):
if layer is not None:
layer.setName(details.name)

style = RenderingStyles.getStyle(alg.id(), layer.name())
style = None
if details.outputName:
style = RenderingStyles.getStyle(alg.id(), details.outputName)
if style is None:
if layer.type() == QgsMapLayer.RasterLayer:
style = ProcessingConfig.getSetting(ProcessingConfig.RASTER_STYLE)
Expand Down
6 changes: 5 additions & 1 deletion src/core/processing/qgsprocessingcontext.h
Expand Up @@ -134,14 +134,18 @@ class CORE_EXPORT QgsProcessingContext
/**
* Constructor for LayerDetails.
*/
LayerDetails( const QString &name, QgsProject *project )
LayerDetails( const QString &name, QgsProject *project, const QString &outputName = QString() )
: name( name )
, outputName( outputName )
, project( project )
{}

//! Friendly name for layer, to use when loading layer into project.
QString name;

//! Associated output name from algorithm which generated the layer.
QString outputName;

//! Destination project
QgsProject *project;

Expand Down
10 changes: 8 additions & 2 deletions src/core/processing/qgsprocessingparameters.cpp
Expand Up @@ -265,7 +265,10 @@ QgsFeatureSink *QgsProcessingParameters::parameterAsSink( const QgsProcessingPar
{
destName = definition->description();
}
context.addLayerToLoadOnCompletion( destinationIdentifier, QgsProcessingContext::LayerDetails( destName, destinationProject ) );
QString outputName;
if ( definition )
outputName = definition->name();
context.addLayerToLoadOnCompletion( destinationIdentifier, QgsProcessingContext::LayerDetails( destName, destinationProject, outputName ) );
}

return sink.release();
Expand Down Expand Up @@ -404,11 +407,14 @@ QString QgsProcessingParameters::parameterAsOutputLayer( const QgsProcessingPara

if ( destinationProject )
{
QString outputName;
if ( destName.isEmpty() && definition )
{
destName = definition->description();
}
context.addLayerToLoadOnCompletion( dest, QgsProcessingContext::LayerDetails( destName, destinationProject ) );
if ( definition )
outputName = definition->name();
context.addLayerToLoadOnCompletion( dest, QgsProcessingContext::LayerDetails( destName, destinationProject, outputName ) );
}

return dest;
Expand Down
2 changes: 2 additions & 0 deletions tests/src/core/testqgsprocessing.cpp
Expand Up @@ -1382,6 +1382,7 @@ void TestQgsProcessing::parameters()
QCOMPARE( context2.layersToLoadOnCompletion().size(), 1 );
QCOMPARE( context2.layersToLoadOnCompletion().keys().at( 0 ), destId );
QCOMPARE( context2.layersToLoadOnCompletion().values().at( 0 ).name, QStringLiteral( "my_dest" ) );
QCOMPARE( context2.layersToLoadOnCompletion().values().at( 0 ).outputName, QStringLiteral( "fs" ) );
}

void TestQgsProcessing::algorithmParameters()
Expand Down Expand Up @@ -3820,6 +3821,7 @@ void TestQgsProcessing::parameterRasterOut()
QCOMPARE( context2.layersToLoadOnCompletion().size(), 1 );
QCOMPARE( context2.layersToLoadOnCompletion().keys().at( 0 ), QStringLiteral( "test.tif" ) );
QCOMPARE( context2.layersToLoadOnCompletion().values().at( 0 ).name, QStringLiteral( "my_dest" ) );
QCOMPARE( context2.layersToLoadOnCompletion().values().at( 0 ).outputName, QStringLiteral( "x" ) );
}

void TestQgsProcessing::parameterFileOut()
Expand Down

0 comments on commit 7879c0a

Please sign in to comment.