From f5a5372973e8537cc3e50b2409bed9eb9cea6f6f Mon Sep 17 00:00:00 2001
From: "benjamin.jakimow@geo.hu-berlin.de" <q8DTkxUg-BB>
Date: Fri, 30 Jun 2017 12:28:41 +0200
Subject: [PATCH] simplified enableQgisInteraction added sigShowVectorOverlay
 and sigRemoveVectorOverlay

---
 timeseriesviewer/sandbox.py          |   9 ++-
 timeseriesviewer/ui/docks.py         |  60 +++++----------
 timeseriesviewer/ui/renderingdock.ui | 109 ++++++---------------------
 timeseriesviewer/utils.py            |   8 +-
 4 files changed, 53 insertions(+), 133 deletions(-)

diff --git a/timeseriesviewer/sandbox.py b/timeseriesviewer/sandbox.py
index d31f59de..4b47a155 100644
--- a/timeseriesviewer/sandbox.py
+++ b/timeseriesviewer/sandbox.py
@@ -52,6 +52,8 @@ def sandboxGui():
     SP = SignalPrinter(S.spatialTemporalVis)
 
 
+
+
 class QgisFake(QgisInterface):
 
     def __init__(self, *args):
@@ -100,7 +102,8 @@ class QgisFake(QgisInterface):
         self.bridge.setCanvasLayers()
         s = ""
 
-
+    def legendInterface(self):
+        QgsLegendInterface
     def addRasterLayer(self, path, baseName=''):
         l = QgsRasterLayer(path, loadDefaultStyleFlag=True)
         self.lyrs.append(l)
@@ -153,6 +156,8 @@ def sandboxQgisBridge():
 
     S.loadImageFiles([example.Images.Img_2014_01_15_LC82270652014015LGN00_BOA])
     S.ui.resize(600,600)
+    S.ui.dockRendering.gbQgsVectorLayer.setChecked(True)
+
     s = ""
 
 
@@ -318,7 +323,7 @@ def sandboxMultitemp2017(qgis=False):
 
 if __name__ == '__main__':
     import site, sys, pyqtgraph
-    #add site-packages to sys.path as done by enmapboxplugin.py
+    # add site-packages to sys.path as done by enmapboxplugin.py
 
     qgsApp = initQgisEnvironment()
 
diff --git a/timeseriesviewer/ui/docks.py b/timeseriesviewer/ui/docks.py
index 5103b4a3..3599f7ea 100644
--- a/timeseriesviewer/ui/docks.py
+++ b/timeseriesviewer/ui/docks.py
@@ -36,7 +36,6 @@ class RenderingDockUI(TsvDockWidgetBase, load('renderingdock.ui')):
     sigSpatialExtentChanged = pyqtSignal(SpatialExtent)
     sigCrsChanged = pyqtSignal(QgsCoordinateReferenceSystem)
     sigMapSizeChanged = pyqtSignal(QSize)
-    sigQgisSyncStateChanged = pyqtSignal(QgisTsvBridge.SyncState)
     sigQgisInteractionRequest = pyqtSignal(str)
 
     def __init__(self, parent=None):
@@ -53,63 +52,38 @@ class RenderingDockUI(TsvDockWidgetBase, load('renderingdock.ui')):
         self.btnMapCanvasColor.colorChanged.connect(self.sigMapCanvasColorChanged)
         self.btnCrs.crsChanged.connect(self.sigCrsChanged)
 
-        #default: disable QgsSync box
-
-        #todo: realt-time syncing?
-        self.frameRTSync.setVisible(False)
         self.progressBar.setVisible(False)
+        self.enableQgisInteraction(False)
 
-        self.enableQgisSyncronization(False)
-
-        self.mLastSyncState = self.qgsSyncState()
-        self.cbSyncQgsMapExtent.stateChanged.connect(self.onSyncStateChanged)
-        self.cbSyncQgsMapCenter.stateChanged.connect(self.onSyncStateChanged)
-        self.cbSyncQgsCRS.stateChanged.connect(self.onSyncStateChanged)
+        self.gbQgsVectorLayer.clicked.connect(self.onVectorOverlayerChanged)
+        self.cbQgsVectorLayer.currentIndexChanged.connect(self.onVectorOverlayerChanged)
 
         self.btnSetQGISCenter.clicked.connect(lambda : self.sigQgisInteractionRequest.emit('tsvCenter2qgsCenter'))
         self.btnSetQGISExtent.clicked.connect(lambda: self.sigQgisInteractionRequest.emit('tsvExtent2qgsExtent'))
         self.btnGetQGISCenter.clicked.connect(lambda: self.sigQgisInteractionRequest.emit('qgisCenter2tsvCenter'))
         self.btnGetQGISExtent.clicked.connect(lambda: self.sigQgisInteractionRequest.emit('qgisExtent2tsvExtent'))
 
-    def enableQgisSyncronization(self, b):
+    sigShowVectorOverlay = pyqtSignal(QgsVectorLayer)
+    sigRemoveVectorOverlay = pyqtSignal()
+    def onVectorOverlayerChanged(self, *args):
+
+        b = self.gbQgsVectorLayer.isChecked()
+        lyr = self.cbQgsVectorLayer.currentLayer()
+        if b and isinstance(lyr, QgsVectorLayer):
+            self.sigShowVectorOverlay.emit(lyr)
+        else:
+            self.sigRemoveVectorOverlay.emit()
+        s = ""
+
+    def enableQgisInteraction(self, b):
 
         self.gbSyncQgs.setEnabled(b)
         if b:
             self.gbSyncQgs.setTitle('QGIS')
         else:
             self.gbSyncQgs.setTitle('QGIS (not available)')
-        #self.gbQgsVectorLayer.setEnabled(b)
-
-    def onSyncStateChanged(self, *args):
-
-        w = [self.cbSyncQgsMapCenter, self.cbSyncQgsMapExtent]
-        self._blockSignals(w, True)
-        if self.cbSyncQgsMapExtent.isChecked():
-            self.cbSyncQgsMapCenter.setEnabled(False)
-            self.cbSyncQgsMapCenter.setChecked(True)
-        else:
-            self.cbSyncQgsMapCenter.setEnabled(True)
-        state = self.qgsSyncState()
-        self._blockSignals(w, False)
-
-        if self.mLastSyncState != state:
-            self.mLastSyncState = state
-            self.sigQgisSyncStateChanged.emit(state)
-
-
-    def setQgisSyncState(self, syncState):
-        assert isinstance(syncState, QgisTsvBridge.SyncState)
-
-        self.cbSyncQgsCRS.setChecked(syncState.crs)
-        self.cbSyncQgsMapExtent.setChecked(syncState.extent)
-        self.cbSyncQgsMapCenter.setChecked(syncState.center)
 
-    def qgsSyncState(self):
-        s = QgisTsvBridge.SyncState()
-        s.crs = self.cbSyncQgsCRS.isChecked()
-        s.extent = self.cbSyncQgsMapExtent.isChecked()
-        s.center = self.cbSyncQgsMapCenter.isChecked()
-        return s
+        self.gbQgsVectorLayer.setEnabled(b)
 
 
     def setCrs(self, crs):
diff --git a/timeseriesviewer/ui/renderingdock.ui b/timeseriesviewer/ui/renderingdock.ui
index 299b27c5..f487e4b7 100644
--- a/timeseriesviewer/ui/renderingdock.ui
+++ b/timeseriesviewer/ui/renderingdock.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>220</width>
-    <height>359</height>
+    <height>387</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -259,7 +259,7 @@
       <property name="flat">
        <bool>false</bool>
       </property>
-      <layout class="QGridLayout" name="gridLayout_2" rowstretch="1,1,0,0" rowminimumheight="23,23,0,0">
+      <layout class="QGridLayout" name="gridLayout_2" rowstretch="1,0,0">
        <property name="sizeConstraint">
         <enum>QLayout::SetMinimumSize</enum>
        </property>
@@ -269,13 +269,13 @@
        <property name="spacing">
         <number>2</number>
        </property>
-       <item row="1" column="2">
-        <widget class="QToolButton" name="btnGetQGISExtent">
+       <item row="0" column="1">
+        <widget class="QToolButton" name="btnSetQGISCenter">
          <property name="toolTip">
-          <string>Take the spatial map extent from QGIS</string>
+          <string>Set QGIS Map to the same map center</string>
          </property>
          <property name="text">
-          <string>Get Extent</string>
+          <string>Set Center</string>
          </property>
         </widget>
        </item>
@@ -299,81 +299,6 @@
          </property>
         </widget>
        </item>
-       <item row="3" column="0" colspan="4">
-        <widget class="QFrame" name="frameRTSync">
-         <property name="enabled">
-          <bool>false</bool>
-         </property>
-         <property name="sizePolicy">
-          <sizepolicy hsizetype="Preferred" vsizetype="Minimum">
-           <horstretch>0</horstretch>
-           <verstretch>0</verstretch>
-          </sizepolicy>
-         </property>
-         <property name="minimumSize">
-          <size>
-           <width>0</width>
-           <height>50</height>
-          </size>
-         </property>
-         <property name="frameShape">
-          <enum>QFrame::StyledPanel</enum>
-         </property>
-         <property name="frameShadow">
-          <enum>QFrame::Raised</enum>
-         </property>
-         <layout class="QHBoxLayout" name="horizontalLayout">
-          <item>
-           <widget class="QCheckBox" name="cbSyncQgsMapCenter">
-            <property name="text">
-             <string>Center</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QCheckBox" name="cbSyncQgsMapExtent">
-            <property name="text">
-             <string>Exent</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <widget class="QCheckBox" name="cbSyncQgsCRS">
-            <property name="text">
-             <string>CRS</string>
-            </property>
-           </widget>
-          </item>
-          <item>
-           <spacer name="horizontalSpacer_3">
-            <property name="orientation">
-             <enum>Qt::Horizontal</enum>
-            </property>
-            <property name="sizeHint" stdset="0">
-             <size>
-              <width>40</width>
-              <height>20</height>
-             </size>
-            </property>
-           </spacer>
-          </item>
-         </layout>
-         <zorder>cbSyncQgsMapCenter</zorder>
-         <zorder>cbSyncQgsCRS</zorder>
-         <zorder>cbSyncQgsMapExtent</zorder>
-         <zorder>horizontalSpacer_3</zorder>
-        </widget>
-       </item>
-       <item row="0" column="1">
-        <widget class="QToolButton" name="btnSetQGISCenter">
-         <property name="toolTip">
-          <string>Set QGIS Map to the same map center</string>
-         </property>
-         <property name="text">
-          <string>Set Center</string>
-         </property>
-        </widget>
-       </item>
        <item row="0" column="3">
         <spacer name="horizontalSpacer">
          <property name="orientation">
@@ -387,10 +312,20 @@
          </property>
         </spacer>
        </item>
+       <item row="1" column="2">
+        <widget class="QToolButton" name="btnGetQGISExtent">
+         <property name="toolTip">
+          <string>Take the spatial map extent from QGIS</string>
+         </property>
+         <property name="text">
+          <string>Get Extent</string>
+         </property>
+        </widget>
+       </item>
        <item row="2" column="0" colspan="4">
         <widget class="QgsCollapsibleGroupBox" name="gbQgsVectorLayer">
          <property name="title">
-          <string>Show Vector Layer</string>
+          <string>Show Vector Overlay</string>
          </property>
          <property name="checkable">
           <bool>true</bool>
@@ -399,7 +334,7 @@
           <bool>false</bool>
          </property>
          <property name="collapsed">
-          <bool>true</bool>
+          <bool>false</bool>
          </property>
          <property name="saveCheckedState">
           <bool>true</bool>
@@ -411,7 +346,7 @@
           <item row="0" column="1">
            <widget class="QgsMapLayerComboBox" name="cbQgsVectorLayer">
             <property name="enabled">
-             <bool>false</bool>
+             <bool>true</bool>
             </property>
             <property name="sizePolicy">
              <sizepolicy hsizetype="Preferred" vsizetype="Preferred">
@@ -419,6 +354,12 @@
               <verstretch>0</verstretch>
              </sizepolicy>
             </property>
+            <property name="minimumSize">
+             <size>
+              <width>0</width>
+              <height>23</height>
+             </size>
+            </property>
            </widget>
           </item>
          </layout>
diff --git a/timeseriesviewer/utils.py b/timeseriesviewer/utils.py
index 57f2642f..777cafba 100644
--- a/timeseriesviewer/utils.py
+++ b/timeseriesviewer/utils.py
@@ -305,7 +305,7 @@ def copyRenderer(renderer, targetLayer):
     :param targetLayer:
     :return: True, if 'renderer' could be copied and applied to 'targetLayer'
     """
-    if isinstance(targetLayer, QgsRasterLayer):
+    if isinstance(targetLayer, QgsRasterLayer) and isinstance(renderer, QgsRasterRenderer):
         if isinstance(renderer, QgsMultiBandColorRenderer):
             r = renderer.clone()
             r.setInput(targetLayer.dataProvider())
@@ -321,12 +321,12 @@ def copyRenderer(renderer, targetLayer):
             r.setClassificationMax(cmax)
             targetLayer.setRenderer(r)
             return True
-    elif isinstance(targetLayer, QgsVectorLayer):
+    elif isinstance(targetLayer, QgsVectorLayer) and isinstance(renderer, QgsFeatureRendererV2):
         #todo: add render-specific switches
         targetLayer.setRenderer(renderer)
         return True
-    else:
-        return False
+
+    return False
 
 def getIface():
     """
-- 
GitLab