From f677a0519ea8746a742fc446cd72a292c50d1650 Mon Sep 17 00:00:00 2001
From: "benjamin.jakimow" <benjamin.jakimow@geo.hu-berlin.de>
Date: Fri, 24 May 2019 15:10:52 +0200
Subject: [PATCH] closes Issue #87  (SensorLayer / QgsMapLayer properties
 dialog from MapViewLayerTreeContextMenu uses center mapcanvas of all visible
 mapcanvases

Signed-off-by: benjamin.jakimow <benjamin.jakimow@geo.hu-berlin.de>
---
 eotimeseriesviewer/mapvisualization.py | 31 ++++++++++++++++++++++----
 1 file changed, 27 insertions(+), 4 deletions(-)

diff --git a/eotimeseriesviewer/mapvisualization.py b/eotimeseriesviewer/mapvisualization.py
index a299c88c..5dceef48 100644
--- a/eotimeseriesviewer/mapvisualization.py
+++ b/eotimeseriesviewer/mapvisualization.py
@@ -54,13 +54,14 @@ KEY_SENSOR_LAYER = 'eotsv/sensorlayer'
 
 class MapViewLayerTreeViewMenuProvider(QgsLayerTreeViewMenuProvider):
 
-    def __init__(self, view: QgsLayerTreeView, canvas: QgsMapCanvas):
+    def __init__(self, mapView, view: QgsLayerTreeView, canvas: QgsMapCanvas):
         super(MapViewLayerTreeViewMenuProvider, self).__init__()
         assert isinstance(view, QgsLayerTreeView)
         assert isinstance(canvas, QgsMapCanvas)
         self.mLayerTreeView = view
         self.mDummyCanvas = canvas
         self.mDefActions = QgsLayerTreeViewDefaultActions(self.mLayerTreeView)
+        self.mMapView = mapView
 
         self.actionAddGroup = self.mDefActions.actionAddGroup()
         self.actionRename = self.mDefActions.actionRenameGroupOrLayer()
@@ -75,6 +76,8 @@ class MapViewLayerTreeViewMenuProvider(QgsLayerTreeViewMenuProvider):
 
         self.actionAddEOTSVTemporalProfiles = QAction('Add Temporal Profile Layer')
 
+    def mapView(self):
+        return self.mMapView
 
     def layerTreeView(self)->QgsLayerTreeView:
         return self.mLayerTreeView
@@ -118,9 +121,22 @@ class MapViewLayerTreeViewMenuProvider(QgsLayerTreeViewMenuProvider):
         menu.addAction(self.actionAddEOTSVTemporalProfiles)
 
         menu.addSeparator()
+
+        centerCanvas = None
+        if isinstance(self.mapView(), MapView):
+            visibleCanvases = self.mapView().visibleMapCanvases()
+            if len(visibleCanvases) > 0:
+                i = int(len(visibleCanvases) / 2)
+                centerCanvas = visibleCanvases[i]
+
+
         a = menu.addAction('Set Properties')
-        a.triggered.connect(lambda *args, lyr=l, canvas=self.mDummyCanvas: showLayerPropertiesDialog(lyr, canvas))
-        a.setEnabled(not isinstance(l, SensorProxyLayer))
+        a.triggered.connect(lambda *args, canvas=centerCanvas, lyr=l:
+                            showLayerPropertiesDialog(lyr, canvas))
+        a.setEnabled(isinstance(centerCanvas, QgsMapCanvas))
+
+
+
         #a = menu.addAction('Settings')
         #from qps.layerproperties import showLayerPropertiesDialog
         #a.triggered.connect(lambda *args, lyr=l:showLayerPropertiesDialog(lyr, self._canvas))
@@ -228,7 +244,7 @@ class MapView(QFrame, loadUIFormClass(jp(DIR_UI, 'mapview.ui'))):
         self._createSensorNode()
 
         self.mLayerTreeView.setModel(self.mLayerTreeModel)
-        self.mMapLayerTreeViewMenuProvider = MapViewLayerTreeViewMenuProvider(self.mLayerTreeView, self.mDummyCanvas)
+        self.mMapLayerTreeViewMenuProvider = MapViewLayerTreeViewMenuProvider(self, self.mLayerTreeView, self.mDummyCanvas)
 
         # register some actions that interact with other GUI elements
         self.mMapLayerTreeViewMenuProvider.actionAddEOTSVSpectralProfiles.triggered.connect(self.addSpectralProfileLayer)
@@ -241,6 +257,13 @@ class MapView(QFrame, loadUIFormClass(jp(DIR_UI, 'mapview.ui'))):
         self.mIsVisible = True
         self.setTitle(name)
 
+    def visibleMapCanvases(self)->list:
+        """
+        Returns the currently visible mapcanvases
+        :return: [list-of-MapCanvases]
+        """
+        return [m for m in self.mapCanvases() if m.isVisibleToViewport()]
+
     def onAddOgrLayer(self):
 
         from .externals.qps.utils import SelectMapLayersDialog
-- 
GitLab