Skip to content
Snippets Groups Projects
mapvisualization.py 42.3 KiB
Newer Older
  • Learn to ignore specific revisions
  • 
            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
    
    
    
    
    class MapViewDefinitionUI(QGroupBox, load('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 sizeHint(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)
            return QSize(w,h)
    
    
        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()
    
    
    class MapViewDockUI(TsvDockWidgetBase, load('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)