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