Skip to content
Snippets Groups Projects
mapvisualization.py 60.8 KiB
Newer Older
  • Learn to ignore specific revisions
  •                 mapCanvas.setCenter(center)
                    mapCanvas.blockSignals(oldState)
            self.mBlockCanvasSignals = False
    
            self.sigSpatialExtentChanged.emit(self.mSpatialExtent)
    
    
    
        def setSpatialExtent(self, extent, mapCanvas0=None):
            if self.mBlockCanvasSignals:
                return True
    
            assert isinstance(extent, SpatialExtent)
            extent = extent.toCrs(self.mCRS)
            if not isinstance(extent, SpatialExtent) \
                or extent.isEmpty() or not extent.isFinite() \
                or extent.width() <= 0 \
                or extent.height() <= 0 \
                or extent == self.mSpatialExtent:
    
    
            self.mBlockCanvasSignals = True
            self.mSpatialExtent = extent
            for mapCanvas in self.mMapCanvases:
                if mapCanvas != mapCanvas0:
                    oldState = mapCanvas.blockSignals(True)
                    mapCanvas.setExtent(extent)
                    mapCanvas.blockSignals(oldState)
    
            self.mBlockCanvasSignals = False
    
            #for mapCanvas in self.mMapCanvases:
            #    mapCanvas.refresh()
    
            self.mRefreshTimer.start()
    
            self.sigSpatialExtentChanged.emit(extent)
    
        def setBackgroundColor(self, color):
            assert isinstance(color, QColor)
            self.mColor = color
    
        def backgroundColor(self):
            return self.mColor
    
    
        def mapCanvasIterator(self):
            return self.mMapCanvases[:]
    
        def setCrs(self, crs):
            assert isinstance(crs, QgsCoordinateReferenceSystem)
    
    
            if self.mCRS != crs:
    
                from timeseriesviewer.utils import saveTransform
                if saveTransform(self.mSpatialExtent, self.mCRS, crs):
                    self.mCRS = crs
                    for mapCanvas in self.mapCanvasIterator():
    
                        #print(('STV set CRS {} {}', str(mapCanvas), self.mCRS.description()))
    
                        mapCanvas.setCrs(crs)
                else:
                    pass
    
                self.sigCRSChanged.emit(self.mCRS)
    
    
    
        def crs(self):
    
    
    
        def navigateToTSD(self, TSD):
            assert isinstance(TSD, TimeSeriesDatum)
            #get widget related to TSD
    
            tsdv = self.DVC.tsdView(TSD)
    
            assert isinstance(self.scrollArea, QScrollArea)
            self.scrollArea.ensureWidgetVisible(tsdv.ui)
    
    
        def setMapViewVisibility(self, bandView, isVisible):
            assert isinstance(bandView, MapView)
            assert isinstance(isVisible, bool)
    
            for tsdv in self.TSDViews:
                tsdv.setMapViewVisibility(bandView, isVisible)
    
    
    
    class DateViewCollection(QObject):
    
    
        sigResizeRequired = pyqtSignal()
        sigLoadingStarted = pyqtSignal(MapView, TimeSeriesDatum)
        sigLoadingFinished = pyqtSignal(MapView, TimeSeriesDatum)
    
        sigShowProfiles = pyqtSignal(SpatialPoint)
        sigSpatialExtentChanged = pyqtSignal(SpatialExtent)
    
    
        def __init__(self, STViz):
            assert isinstance(STViz, SpatialTemporalVisualization)
    
            super(DateViewCollection, self).__init__()
    
            self.STV = STViz
            self.ui = self.STV.targetLayout.parentWidget()
    
            self.scrollArea = self.ui.parentWidget().parentWidget()
            #potentially there are many more dates than views.
            #therefore we implement the addinng/removing of mapviews here
            #we reduce the number of layout refresh calls by
            #suspending signals, adding the new map view canvases, and sending sigResizeRequired
    
    
            self.STV.MVC.sigMapViewAdded.connect(self.addMapView)
            self.STV.MVC.sigMapViewRemoved.connect(self.removeMapView)
    
    
    
        def tsdView(self, tsd):
            r = [v for v in self.views if v.TSD == tsd]
            if len(r) == 1:
                return r[0]
            else:
                raise Exception('TSD not in list')
    
        def addMapView(self, mapView):
            assert isinstance(mapView, MapView)
            w = self.ui
            w.setUpdatesEnabled(False)
            for tsdv in self.views:
                tsdv.ui.setUpdatesEnabled(False)
    
            for tsdv in self.views:
                tsdv.insertMapView(mapView)
    
            for tsdv in self.views:
                tsdv.ui.setUpdatesEnabled(True)
    
            #mapView.sigSensorRendererChanged.connect(lambda *args : self.setRasterRenderer(mapView, *args))
            w.setUpdatesEnabled(True)
            self.sigResizeRequired.emit()
    
        def removeMapView(self, mapView):
            assert isinstance(mapView, MapView)
            for tsdv in self.views:
                tsdv.removeMapView(mapView)
            self.sigResizeRequired.emit()
    
    
        def setFocusView(self, tsd):
            self.focusView = tsd
    
        def orderedViews(self):
            #returns the
            if self.focusView is not None:
    
                assert isinstance(self.focusView, DatumView)
    
                return sorted(self.views,key=lambda v: np.abs(v.TSD.date - self.focusView.TSD.date))
            else:
                return self.views
    
    
        def setSubsetSize(self, size):
            assert isinstance(size, QSize)
            self.subsetSize = size
    
            for tsdView in self.orderedViews():
                tsdView.blockSignals(True)
    
            for tsdView in self.orderedViews():
                tsdView.setSubsetSize(size)
    
            for tsdView in self.orderedViews():
                tsdView.blockSignals(False)
    
    
    
        def addDates(self, tsdList):
            """
            Create a new TSDView
            :param tsdList:
            :return:
            """
            for tsd in tsdList:
                assert isinstance(tsd, TimeSeriesDatum)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
                DV = DatumView(tsd, self.STV, parent=self.ui)
    
                #tsdView.setSubsetSize(self.subsetSize)
    
                DV.sigLoadingStarted.connect(self.sigLoadingStarted.emit)
                DV.sigLoadingFinished.connect(self.sigLoadingFinished.emit)
                DV.sigVisibilityChanged.connect(lambda: self.STV.adjustScrollArea())
    
                for i, mapView in enumerate(self.STV.MVC):
                    DV.insertMapView(mapView)
    
                bisect.insort(self.views, DV)
                i = self.views.index(DV)
    
                DV.ui.setParent(self.STV.targetLayout.parentWidget())
                self.STV.targetLayout.insertWidget(i, DV.ui)
                DV.ui.show()
    
    
            if len(tsdList) > 0:
                self.sigResizeRequired.emit()
    
        def removeDates(self, tsdList):
            toRemove = [v for v in self.views if v.TSD in tsdList]
            removedDates = []
    
            for DV in toRemove:
                self.views.remove(DV)
    
    
                for mapCanvas in DV.mapCanvases.values():
                    toRemove = mapCanvas.layers()
                    mapCanvas.setLayers([])
                    toRemove = [l for l in toRemove if isinstance(l, QgsRasterLayer)]
                    if len(toRemove) > 0:
                        QgsMapLayerRegistry.instance().removeMapLayers(toRemove)
    
    
                DV.ui.parent().layout().removeWidget(DV.ui)
                DV.ui.hide()
                DV.ui.close()
                removedDates.append(DV.TSD)
                del DV
    
    
            if len(removedDates) > 0:
                self.sigResizeRequired.emit()
    
        def __len__(self):
            return len(self.views)
    
        def __iter__(self):
            return iter(self.views)
    
        def __getitem__(self, slice):
            return self.views[slice]
    
        def __delitem__(self, slice):
            self.removeDates(self.views[slice])
    
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    """
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    class DEPR_MapViewCollection(QObject):
    
    
        sigMapViewAdded = pyqtSignal(MapView)
        sigMapViewRemoved = pyqtSignal(MapView)
        sigSetMapViewVisibility = pyqtSignal(MapView, bool)
    
        def __init__(self, spatialTemporalVisualization):
            assert isinstance(spatialTemporalVisualization, SpatialTemporalVisualization)
    
            self.STV = spatialTemporalVisualization
            self.STV.dockMapViews.actionApplyStyles.triggered.connect(self.applyStyles)
            self.STV.TS.sigSensorAdded.connect(self.addSensor)
            self.STV.TS.sigSensorRemoved.connect(self.removeSensor)
    
            self.ui = spatialTemporalVisualization.dockMapViews
    
            self.uiV2 = spatialTemporalVisualization.dockMapViewsV2
    
            self.btnList = spatialTemporalVisualization.dockMapViews.BVButtonList
            self.scrollArea = spatialTemporalVisualization.dockMapViews.scrollAreaMapViews
            self.scrollAreaContent = spatialTemporalVisualization.dockMapViews.scrollAreaMapsViewDockContent
    
            self.mapViewsDefinitions = []
            self.mapViewButtons = dict()
            self.adjustScrollArea()
    
        def applyStyles(self):
            for mapView in self.mapViewsDefinitions:
                mapView.applyStyles()
    
        def setCrosshairStyle(self, crosshairStyle):
            for mapView in self.mapViewsDefinitions:
                mapView.setCrosshairStyle(crosshairStyle)
    
        def setShowCrosshair(self, b):
            for mapView in self.mapViewsDefinitions:
                mapView.setShowCrosshair(b)
    
        def index(self, mapView):
            assert isinstance(mapView, MapView)
            return self.mapViewsDefinitions.index(mapView)
    
        def adjustScrollArea(self):
            #adjust scroll area widget to fit all visible widgets
            l = self.scrollAreaContent.layout()
            from timeseriesviewer.ui.widgets import maxWidgetSizes
            newSize = maxWidgetSizes(l)
            #print(newSize)
            #newSize = self.scrollAreaContent.sizeHint()
            self.scrollAreaContent.setFixedSize(newSize)
    
        def setVectorLayer(self, lyr):
            for mapView in self.mapViewsDefinitions:
                assert isinstance(mapView, MapView)
                mapView.setVectorLayer(lyr)
    
        def addSensor(self, sensor):
            for mapView in self.mapViewsDefinitions:
                mapView.addSensor(sensor)
            self.adjustScrollArea()
    
        def removeSensor(self, sensor):
            for mapView in self.mapViewsDefinitions:
                mapView.removeSensor(sensor)
    
        def createMapView(self):
    
            btn = QToolButton(self.btnList)
            self.btnList.layout().insertWidget(self.btnList.layout().count() - 1, btn)
    
            mapView = MapView(self, parent=self.scrollArea)
            mapView.sigRemoveMapView.connect(self.removeMapView)
            mapView.sigShowProfiles.connect(self.sigShowProfiles.emit)
    
    
            for sensor in self.STV.TS.Sensors:
    
                mapView.addSensor(sensor)
    
            self.mapViewButtons[mapView] = btn
            self.mapViewsDefinitions.append(mapView)
    
    
            btn.clicked.connect(lambda : self.showMapViewDefinition(mapView))
            self.refreshMapViewTitles()
            if len(self) == 1:
                self.showMapViewDefinition(mapView)
            self.sigMapViewAdded.emit(mapView)
            self.adjustScrollArea()
    
        def removeMapView(self, mapView):
            assert isinstance(mapView, MapView)
            btn = self.mapViewButtons[mapView]
    
            idx = self.mapViewsDefinitions.index(mapView)
    
            self.mapViewsDefinitions.remove(mapView)
            self.mapViewButtons.pop(mapView)
    
            mapView.ui.setVisible(False)
            btn.setVisible(False)
            self.btnList.layout().removeWidget(btn)
            l = self.scrollAreaContent.layout()
    
            for d in self.recentMapViewDefinitions():
                d.ui.setVisible(False)
                l.removeWidget(d.ui)
            l.removeWidget(mapView.ui)
            mapView.ui.close()
            btn.close()
            self.refreshMapViewTitles()
            self.sigMapViewRemoved.emit(mapView)
            if len(self) > 0:
                #show previous mapViewDefinition
                idxNext = max([idx-1, 0])
                self.showMapViewDefinition(self.mapViewsDefinitions[idxNext])
    
        def refreshMapViewTitles(self):
    
            for i, mapView in enumerate(self.mapViewsDefinitions):
                number = i+1
                title = '#{}'.format(number)
                mapView.setTitle(title)
                btn = self.mapViewButtons[mapView]
                btn.setText('{}'.format(number))
                btn.setToolTip('Show definition for map view {}'.format(number))
                btn.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
    
    
    
        def showMapViewDefinition(self, mapViewDefinition):
            assert mapViewDefinition in self.mapViewsDefinitions
            assert isinstance(mapViewDefinition, MapView)
            l = self.scrollAreaContent.layout()
    
            for d in self.recentMapViewDefinitions():
                d.ui.setVisible(False)
                l.removeWidget(d.ui)
    
            l.insertWidget(l.count() - 1, mapViewDefinition.ui)
            mapViewDefinition.ui.setVisible(True)
            self.ui.setWindowTitle(self.ui.baseTitle + '|'+mapViewDefinition.title())
    
        def recentMapViewDefinitions(self):
            parent = self.scrollAreaContent
            return [ui.mapViewDefinition() for ui in parent.findChildren(MapViewDefinitionUI)]
    
    
        def setMapViewVisibility(self, bandView, isVisible):
            assert isinstance(bandView, MapView)
            assert isinstance(isVisible, bool)
    
    
    
    
    
        def __len__(self):
            return len(self.mapViewsDefinitions)
    
        def __iter__(self):
            return iter(self.mapViewsDefinitions)
    
        def __getitem__(self, key):
            return self.mapViewsDefinitions[key]
    
        def __contains__(self, mapView):
            return mapView in self.mapViewsDefinitions
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    """
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    """
    
    class MapViewDefinitionUI(QGroupBox, loadUi('mapviewdefinition.ui')):
    
    
        sigHideMapView = pyqtSignal()
        sigShowMapView = pyqtSignal()
        sigVectorVisibility = pyqtSignal(bool)
    
        def __init__(self, mapViewDefinition,parent=None):
            super(MapViewDefinitionUI, self).__init__(parent)
    
            self.setupUi(self)
            self.mMapViewDefinition = mapViewDefinition
            self.btnRemoveMapView.setDefaultAction(self.actionRemoveMapView)
            self.btnMapViewVisibility.setDefaultAction(self.actionToggleVisibility)
            self.btnApplyStyles.setDefaultAction(self.actionApplyStyles)
            self.btnVectorOverlayVisibility.setDefaultAction(self.actionToggleVectorVisibility)
            self.btnShowCrosshair.setDefaultAction(self.actionShowCrosshair)
    
    
            self.actionToggleVisibility.toggled.connect(lambda: self.setVisibility(not self.actionToggleVisibility.isChecked()))
            self.actionToggleVectorVisibility.toggled.connect(lambda : self.sigVectorVisibility.emit(self.actionToggleVectorVisibility.isChecked()))
    
    
        def DEPRsizeHint(self):
    
    
            #m = self.layout().contentsMargins()
            #sl = maxWidgetSizes(self.sensorList)
            #sm = self.buttonList.size()
            #w = sl.width() + m.left()+ m.right() + sm.width()
            #h = sl.height() + m.top() + m.bottom() + sm.height()
    
            return maxWidgetSizes(self.sensorList.layout())
    
    
    
    
        def mapViewDefinition(self):
            return self.mMapViewDefinition
    
    
        def setVisibility(self, isVisible):
            if isVisible != self.actionToggleVisibility.isChecked():
                self.btnMapViewVisibility.setChecked(isVisible)
                if isVisible:
                    self.sigShowMapView.emit()
                else:
                    self.sigHideMapView.emit()
    
        def visibility(self):
            return self.actionToggleVisibility.isChecked()
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    """
    
    
    class MapViewListModel(QAbstractListModel):
        """
        A model to keep a list of map views.
    
        """
        sigMapViewsAdded = pyqtSignal(list)
        sigMapViewsRemoved = pyqtSignal(list)
    
        def __init__(self, parent=None):
            super(MapViewListModel, self).__init__(parent)
            self.mMapViewList = []
    
    
        def addMapView(self, mapView):
            i = len(self.mMapViewList)
            self.insertMapView(i, mapView)
    
        def insertMapView(self, i, mapView):
            self.insertMapViews(i, [mapView])
    
        def insertMapViews(self, i, mapViews):
            assert isinstance(mapViews, list)
            assert i >= 0 and i <= len(self.mMapViewList)
    
            self.beginInsertRows(QModelIndex(), i, i + len(mapViews) - 1)
    
            for j in range(len(mapViews)):
                mapView = mapViews[j]
                assert isinstance(mapView, MapView)
                mapView.sigTitleChanged.connect(
                    lambda : self.doRefresh([mapView])
                )
                self.mMapViewList.insert(i + j, mapView)
            self.endInsertRows()
            self.sigMapViewsAdded.emit(mapViews)
    
    
        def doRefresh(self, mapViews):
            for mapView in mapViews:
                idx = self.mapView2idx(mapView)
                self.dataChanged.emit(idx, idx)
    
        def removeMapView(self, mapView):
            self.removeMapViews([mapView])
    
        def removeMapViews(self, mapViews):
            assert isinstance(mapViews, list)
            for mv in mapViews:
                assert mv in self.mMapViewList
                idx = self.mapView2idx(mv)
                self.beginRemoveRows(idx.parent(), idx.row(), idx.row())
                self.mMapViewList.remove(mv)
                self.endRemoveRows()
            self.sigMapViewsRemoved.emit(mapViews)
    
        def rowCount(self, parent=None, *args, **kwargs):
            return len(self.mMapViewList)
    
        def columnCount(self, QModelIndex_parent=None, *args, **kwargs):
            return 1
    
    
        def idx2MapView(self, index):
            if isinstance(index, QModelIndex):
                if index.isValid():
                    index = index.row()
                else:
                    return None
            assert index >= 0 and index < len(self.mMapViewList)
            return self.mMapViewList[index]
    
    
        def mapView2idx(self, mapView):
            assert isinstance(mapView, MapView)
            row = self.mMapViewList.index(mapView)
            return self.createIndex(row, 0, mapView)
    
        def __len__(self):
            return len(self.mMapViewList)
    
        def __iter__(self):
            return iter(self.mMapViewList)
    
        def data(self, index, role=Qt.DisplayRole):
            if not index.isValid():
                return None
    
            if (index.row() >= len(self.mMapViewList)) or (index.row() < 0):
                return None
    
            mapView = self.idx2MapView(index)
            assert isinstance(mapView, MapView)
    
            value = None
    
            if role == Qt.DisplayRole:
                value = '{} {}'.format(index.row() +1 , mapView.title())
            #if role == Qt.DecorationRole:
                #value = classInfo.icon(QSize(20,20))
            if role == Qt.UserRole:
                value = mapView
            return value
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    class MapViewCollectionDock(QgsDockWidget, loadUi('mapviewdockV2.ui')):
    
        sigMapViewAdded = pyqtSignal(MapView)
        sigMapViewRemoved = pyqtSignal(MapView)
        sigSetMapViewVisibility = pyqtSignal(MapView, bool)
        sigShowProfiles = pyqtSignal(SpatialPoint)
    
    
        def __init__(self, parent=None):
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
            super(MapViewCollectionDock, self).__init__(parent)
    
            self.setupUi(self)
            self.baseTitle = self.windowTitle()
    
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
            self.btnAddMapView.setDefaultAction(self.actionAddMapView)
    
            self.btnRemoveMapView.setDefaultAction(self.actionRemoveMapView)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
            self.btnRefresh.setDefaultAction(self.actionApplyStyles)
    
            self.actionAddMapView.triggered.connect(self.createMapView)
            self.actionRemoveMapView.triggered.connect(lambda : self.removeMapView(self.currentMapView()))
    
            self.mMapViews = MapViewListModel()
            self.mMapViews.sigMapViewsRemoved.connect(self.onMapViewsRemoved)
            self.mMapViews.sigMapViewsAdded.connect(self.onMapViewsAdded)
            self.cbMapView.setModel(self.mMapViews)
            self.cbMapView.currentIndexChanged[int].connect(lambda i : self.setCurrentMapView(self.mMapViews.idx2MapView(i)) )
    
            self.TS = None
    
        def connectTimeSeries(self, timeSeries):
            assert isinstance(timeSeries, TimeSeries)
            self.TS = timeSeries
            self.TS.sigSensorAdded.connect(self.addSensor)
            self.TS.sigSensorRemoved.connect(self.removeSensor)
    
        def onMapViewsRemoved(self, mapViews):
            for mapView in mapViews:
                idx = self.stackedWidget.indexOf(mapView.ui)
                if idx >= 0:
                    self.stackedWidget.removeWidget(mapView.ui)
                    mapView.ui.close()
                else:
                    s = ""
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
        def onMapViewsAdded(self, mapViews):
            nextShown = None
            for mapView in mapViews:
                self.stackedWidget.addWidget(mapView.ui)
                if nextShown is None:
                    nextShown = mapView
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
            if isinstance(nextShown, MapView):
                self.setCurrentMapView(nextShown)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    
        def createMapView(self):
    
            #todo: add entry to combobox + stacked widget
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
            mapView = MapView(self)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
            n = len(self.mMapViews) + 1
            title = 'Map View {}'.format(n)
            while title in [m.title() for m in self.mMapViews]:
                n += 1
                title = 'Map View {}'.format(n)
            mapView.setTitle(title)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
            for sensor in self.TS.Sensors:
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
                mapView.addSensor(sensor)
    
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
            self.mMapViews.addMapView(mapView)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
            self.sigMapViewAdded.emit(mapView)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    
        def updateFromMapView(self, mapView):
            assert isinstance(mapView, MapView)
            self.btnToggleMapViewVisibility.setChecked(mapView)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    
        def removeMapView(self, mapView):
            assert isinstance(mapView, MapView)
            assert mapView in self.mMapViews
    
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
            i = self.mMapViews.mapView2idx(mapView)
            if not i == self.stackedWidget.indexOf(mapView.ui):
                s = ""
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
            self.mMapViews.removeMapView(mapView)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    
            mapView.ui.close()
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
            self.sigMapViewRemoved.emit(mapView)
    
        def __len__(self):
            return len(self.mMapViews)
    
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
        def __iter__(self):
            return iter(self.mMapViews)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
        def __contains__(self, mapView):
            return mapView in self.mMapViews
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    
        def index(self, mapView):
            assert isinstance(mapView, MapView)
            return self.mMapViews.index(mapView)
    
        def setVectorLayer(self, lyr):
            for mapView in self.mMapViews:
                assert isinstance(mapView, MapView)
                mapView.setVectorLayer(lyr)
    
        def addSensor(self, sensor):
            for mapView in self.mMapViews:
                mapView.addSensor(sensor)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
            #self.adjustScrollArea()
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    
        def removeSensor(self, sensor):
            for mapView in self.mMapViews:
                mapView.removeSensor(sensor)
    
        def applyStyles(self):
            for mapView in self.mMapViews:
                mapView.applyStyles()
    
        def setCrosshairStyle(self, crosshairStyle):
            for mapView in self.mMapViews:
                mapView.setCrosshairStyle(crosshairStyle)
    
        def setShowCrosshair(self, b):
            for mapView in self.mMapViews:
                mapView.setShowCrosshair(b)
    
        def index(self, mapView):
            assert isinstance(mapView, MapView)
            return self.mapViewsDefinitions.index(mapView)
    
    
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
        def setCurrentMapView(self, mapView):
            assert isinstance(mapView, MapView) and mapView in self.mMapViews
            idx = self.stackedWidget.indexOf(mapView.ui)
            if idx >= 0:
                self.stackedWidget.setCurrentIndex(idx)
                self.cbMapView.setCurrentIndex(self.mMapViews.mapView2idx(mapView).row())
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
        def currentMapView(self):
            if len(self.mMapViews) == None:
                return None
            else:
                i = self.cbMapView.currentIndex()
                return self.mMapViews.idx2MapView(i)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    """
    
    class MapViewDockUI(TsvDockWidgetBase, loadUi('mapviewdock.ui')):
    
        def __init__(self, parent=None):
            super(MapViewDockUI, self).__init__(parent)
            self.setupUi(self)
    
            self.baseTitle = self.windowTitle()
            self.btnApplyStyles.setDefaultAction(self.actionApplyStyles)
    
            #self.dockLocationChanged.connect(self.adjustLayouts)
    
    
        def toggleLayout(self, p):
            newLayout = None
            l = p.layout()
            print('toggle layout {}'.format(str(p.objectName())))
            tmp = QWidget()
            tmp.setLayout(l)
            sMax = p.maximumSize()
            sMax.transpose()
            sMin = p.minimumSize()
            sMin.transpose()
            p.setMaximumSize(sMax)
            p.setMinimumSize(sMin)
            if isinstance(l, QVBoxLayout):
                newLayout = QHBoxLayout()
            else:
                newLayout = QVBoxLayout()
            print(l, '->', newLayout)
    
            while l.count() > 0:
                item = l.itemAt(0)
                l.removeItem(item)
    
                newLayout.addItem(item)
    
    
            p.setLayout(newLayout)
            return newLayout
    
        def adjustLayouts(self, area):
            return
            lOld = self.scrollAreaMapsViewDockContent.layout()
            if area in [Qt.LeftDockWidgetArea, Qt.RightDockWidgetArea] \
                and isinstance(lOld, QVBoxLayout) or \
            area in [Qt.TopDockWidgetArea, Qt.BottomDockWidgetArea] \
                            and isinstance(lOld, QHBoxLayout):
    
                #self.toogleLayout(self.scrollAreaMapsViewDockContent)
                self.toggleLayout(self.BVButtonList)
    
    Benjamin Jakimow's avatar
    Benjamin Jakimow committed
    """