From 0828083b6667a79464ea922506b0fe2839d12439 Mon Sep 17 00:00:00 2001
From: "benjamin.jakimow@geo.hu-berlin.de" <q8DTkxUg-BB>
Date: Fri, 30 Jun 2017 09:12:05 +0200
Subject: [PATCH] added utils.copyRenderer(renderer, targetLayer) to apply new
 renderer

---
 timeseriesviewer/mapcanvas.py | 24 ++++++++++--------------
 timeseriesviewer/utils.py     | 29 +++++++++++++++++++++++++++++
 2 files changed, 39 insertions(+), 14 deletions(-)

diff --git a/timeseriesviewer/mapcanvas.py b/timeseriesviewer/mapcanvas.py
index ef48d691..e75e26fd 100644
--- a/timeseriesviewer/mapcanvas.py
+++ b/timeseriesviewer/mapcanvas.py
@@ -94,8 +94,9 @@ class MapCanvas(QgsMapCanvas):
             QgsMapLayerRegistry.instance().addMapLayers(mls, False)
             del self.mLazyRasterSources[:]
             self.mLayers.extend(mls)
-            self.setRasterRenderer(self.mRendererRaster, refresh=False)
-            self.setVectorRenderer(self.mRendererVector, refresh=False)
+            self.setRenderer(self.mRendererVector, refresh=False)
+            self.setRenderer(self.mRendererRaster, refresh=False)
+
         return self.mLayers
 
     def addLazyRasterSources(self, sources):
@@ -368,18 +369,13 @@ class MapCanvas(QgsMapCanvas):
             SETTINGS.setValue('CANVAS_SAVE_IMG_DIR', os.path.dirname(path))
 
 
-    def setRenderer(self, renderer):
-        #print('Set renderer {}'.format(self.objectName()))
-        #lyrs = [l for l in self.mapLayersToRender() if str(l.source()) == targetLayerUri]
-        isRasterRenderer = isinstance(renderer, QgsRasterRenderer)
-        if isRasterRenderer:
-            self.setRasterRenderer(renderer, refresh=False)
-        else:
-            self.setVectorRenderer(renderer, refresh=False)
-
-        self.refresh()
+    def setRenderer(self, renderer, refresh=True):
+        from utils import copyRenderer
+        success = [copyRenderer(renderer, lyr) for lyr in self.mLayers]
+        if refresh and any(success):
+            self.refresh()
 
-    def setVectorRenderer(self, renderer, refresh=True):
+    def depr_setVectorRenderer(self, renderer, refresh=True):
         self.mRendererVector = renderer
         lyrs = [l for l in self.mLayers if isinstance(l, QgsVectorLayer)]
         for lyr in lyrs:
@@ -388,7 +384,7 @@ class MapCanvas(QgsMapCanvas):
         if refresh:
             self.refresh()
 
-    def setRasterRenderer(self, renderer, refresh=False):
+    def depr_setRasterRenderer(self, renderer, refresh=False):
         self.mRendererRaster = renderer
         lyrs = [l for l in self.mLayers if isinstance(l, QgsRasterLayer)]
         for lyr in lyrs:
diff --git a/timeseriesviewer/utils.py b/timeseriesviewer/utils.py
index 1c222552..57f2642f 100644
--- a/timeseriesviewer/utils.py
+++ b/timeseriesviewer/utils.py
@@ -298,6 +298,35 @@ def filterSubLayers(filePaths, subLayerEndings):
             pass
     return results
 
+def copyRenderer(renderer, targetLayer):
+    """
+    Copies and applies renderer to targetLayer.
+    :param renderer:
+    :param targetLayer:
+    :return: True, if 'renderer' could be copied and applied to 'targetLayer'
+    """
+    if isinstance(targetLayer, QgsRasterLayer):
+        if isinstance(renderer, QgsMultiBandColorRenderer):
+            r = renderer.clone()
+            r.setInput(targetLayer.dataProvider())
+            targetLayer.setRenderer(r)
+            return True
+        elif isinstance(renderer, QgsSingleBandPseudoColorRenderer):
+            r = renderer.clone()
+            # r = QgsSingleBandPseudoColorRenderer(None, renderer.band(), None)
+            r.setInput(targetLayer.dataProvider())
+            cmin = renderer.classificationMin()
+            cmax = renderer.classificationMax()
+            r.setClassificationMin(cmin)
+            r.setClassificationMax(cmax)
+            targetLayer.setRenderer(r)
+            return True
+    elif isinstance(targetLayer, QgsVectorLayer):
+        #todo: add render-specific switches
+        targetLayer.setRenderer(renderer)
+        return True
+    else:
+        return False
 
 def getIface():
     """
-- 
GitLab