From a67c1f5e3217eb22aa752a58889dfe8c5838fa5b Mon Sep 17 00:00:00 2001 From: "benjamin.jakimow@geo.hu-berlin.de" <q8DTkxUg-BB> Date: Mon, 26 Jun 2017 10:30:47 +0200 Subject: [PATCH] added QgisTsvBridge.addLayersToQGIS(mapLayers) UI fixes --- timeseriesviewer/main.py | 131 +++++-------- timeseriesviewer/ui/mapviewrendersettings.ui | 187 ++++++++++++------- timeseriesviewer/ui/timeseriesviewer.ui | 32 +--- 3 files changed, 175 insertions(+), 175 deletions(-) diff --git a/timeseriesviewer/main.py b/timeseriesviewer/main.py index bf1cdf54..6f45488a 100644 --- a/timeseriesviewer/main.py +++ b/timeseriesviewer/main.py @@ -1,8 +1,7 @@ # -*- coding: utf-8 -*- """ /*************************************************************************** - HUB TimeSeriesViewer - A QGIS based time series viewer + HUB TimeSeriesViewer ------------------- begin : 2015-08-20 git sha : $Format:%H$ @@ -121,6 +120,7 @@ class QgisTsvBridge(QObject): """ _instance = None + class SyncState(object): def __init__(self): self.center = False @@ -144,11 +144,26 @@ class QgisTsvBridge(QObject): def instance(): return QgisTsvBridge._instance + def addLayersToQGIS(self, mapLayers): + assert isinstance(mapLayers, list) + if not self.iface: + return + + + for ml in mapLayers: + assert isinstance(ml, QgsMapLayer) + src = ml.source() + if isinstance(ml, QgsRasterLayer): + self.iface.addRasterLayer(src) + if isinstance(ml, QgsVectorLayer): + self.iface.addVectorLayer(src , os.path.basename(src), ml.providerType()) + def __init__(self, iface, TSV): - super(QgisTsvBridge, self).__init__() - assert QgisTsvBridge._instance is None + + #assert QgisTsvBridge._instance is None assert isinstance(TSV, TimeSeriesViewer) assert isinstance(iface, QgisInterface) + #super(QgisTsvBridge, self).__init__(parent=TSV) self.iface = iface self.TSV = TSV self.ui = self.TSV.ui @@ -182,6 +197,9 @@ class QgisTsvBridge(QObject): self.cbQgsVectorLayer.layerChanged.connect(self.onQgsVectorLayerChanged) self.onQgsVectorLayerChanged(None) + print('QGIS TSV Bridge initialized') + QgisTsvBridge._instance = self + def onQgisInteractionRequest(self, request): assert isinstance(self.qgsMapCanvas, QgsMapCanvas) extQgs = SpatialExtent.fromMapCanvas(self.qgsMapCanvas) @@ -395,13 +413,6 @@ class TimeSeriesViewerUI(QMainWindow, s = "" - def setQgsLinkWidgets(self): - #enable/disable widgets that rely on QGIS instance interaction - from timeseriesviewer import QGIS_TSV_BRIDGE - from timeseriesviewer.main import QgisTsvBridge - b = isinstance(QGIS_TSV_BRIDGE, QgisTsvBridge) - self.dockRendering.enableQgisSyncronization(b) - #self.dockRendering.gbQgsVectorLayer.setEnabled(b) def _blockSignals(self, widgets, block=True): states = dict() @@ -509,10 +520,10 @@ class TimeSeriesViewer: D.actionAddTSD.triggered.connect(lambda : self.addTimeSeriesImages()) D.actionRemoveTSD.triggered.connect(lambda: self.TS.removeDates(self.ui.dockTimeSeries.selectedTimeSeriesDates())) D.actionRefresh.triggered.connect(self.spatialTemporalVis.refresh) - D.actionLoadTS.triggered.connect(self.loadTimeSeries) + D.actionLoadTS.triggered.connect(self.loadTimeSeriesDefinition) D.actionClearTS.triggered.connect(self.clearTimeSeries) - D.actionSaveTS.triggered.connect(self.ua_saveTSFile) - D.actionAddTSExample.triggered.connect(self.ua_loadExampleTS) + D.actionSaveTS.triggered.connect(self.saveTimeSeriesDefinition) + D.actionAddTSExample.triggered.connect(self.loadExampleTimeSeries) D.actionShowCrosshair.toggled.connect(self.spatialTemporalVis.setShowCrosshair) @@ -529,10 +540,12 @@ class TimeSeriesViewer: D.dockRendering.sigMapCanvasColorChanged.connect(self.spatialTemporalVis.setBackgroundColor) self.spatialTemporalVis.setMapSize(D.dockRendering.mapSize()) - if isinstance(iface,QgisInterface): + self.mQgisBridge = None + if isinstance(iface, QgisInterface): import timeseriesviewer - timeseriesviewer.QGIS_TSV_BRIDGE = QgisTsvBridge(iface, self) - self.ui.setQgsLinkWidgets() + self.mQgisBridge = QgisTsvBridge(iface, self) + D.dockRendering.enableQgisSyncronization(True) + assert QgisTsvBridge.instance() == self.mQgisBridge def loadImageFiles(self, files): @@ -540,11 +553,15 @@ class TimeSeriesViewer: self.TS.addFiles(files) - def loadTimeSeries(self, path=None, n_max=None): - if path is None or path is False: - path = QFileDialog.getOpenFileName(self.ui, 'Open Time Series file', '') - - if os.path.exists(path): + def loadTimeSeriesDefinition(self, path=None, n_max=None): + s = getSettings() + defFile = s.value('FILE_TS_DEFINITION') + if defFile is not None: + defFile = os.path.dirname(defFile) + path = QFileDialog.getOpenFileName(caption='Load Time Series definition', + directory=defFile) + if path is not None and os.path.exists(path): + s.setValue('FILE_TS_DEFINITION', path) M = self.ui.dockTimeSeries.tableView_TimeSeries.model() M.beginResetModel() self.clearTimeSeries() @@ -602,29 +619,24 @@ class TimeSeriesViewer: - def ua_saveTSFile(self): - path = QFileDialog.getSaveFileName(self.ui, caption='Save Time Series file') + def saveTimeSeriesDefinition(self): + s = getSettings() + defFile = s.value('FILE_TS_DEFINITION') + if defFile is not None: + defFile = os.path.dirname(defFile) + path = QFileDialog.getSaveFileName(caption='Save Time Series definition', + directory=defFile) if path is not None: + s.setValue('FILE_TS_DEFINITION', path) self.TS.saveToFile(path) - def ua_loadExampleTS(self): + def loadExampleTimeSeries(self): from timeseriesviewer import PATH_EXAMPLE_TIMESERIES if not os.path.exists(PATH_EXAMPLE_TIMESERIES): QMessageBox.information(self.ui, 'File not found', '{} - this file describes an exemplary time series.'.format(PATH_EXAMPLE_TIMESERIES)) else: - self.loadTimeSeries(path=PATH_EXAMPLE_TIMESERIES) - - - - def ua_selectByRectangle(self): - if self.RectangleMapTool is not None: - self.qgsCanvas.setMapTool(self.RectangleMapTool) - - def ua_selectByCoordinate(self): - if self.PointMapTool is not None: - self.qgsCanvas.setMapTool(self.PointMapTool) - + self.loadTimeSeriesDefinition(path=PATH_EXAMPLE_TIMESERIES) def qgs_handleMouseDown(self, pt, btn): @@ -632,21 +644,6 @@ class TimeSeriesViewer: - def ua_TSprogress(self, v_min, v, v_max): - assert v_min <= v and v <= v_max - if v_min < v_max: - P = self.ui.progressBar - if P.minimum() != v_min or P.maximum() != v_max: - P.setRange(v_min, v_max) - else: - s = "" - - P.setValue(v) - - - - - # noinspection PyMethodMayBeStatic def tr(self, message): """Get the translation for a string using Qt translation API. @@ -664,15 +661,6 @@ class TimeSeriesViewer: - - - def ua_addTSD_to_QGIS(self, TSD, bands): - - s = "" - - pass - - def unload(self): """Removes the plugin menu item and icon """ self.iface.removeToolBarIcon(self.action) @@ -705,23 +693,6 @@ class TimeSeriesViewer: HBar.setValue(i_doi * step) - def ua_collect_date(self, ICL, event): - if self.ui.rb_labeling_activate.isChecked(): - txt = self.ui.tb_labeling_text.toPlainText() - reg = re.compile('\d{4}-\d{2}-\d{2}', re.I | re.MULTILINE) - dates = set([np.datetime64(m) for m in reg.findall(txt)]) - doi = ICL.TSD.getDate() - - if event.button() == Qt.LeftButton: - dates.add(doi) - elif event.button() == Qt.MiddleButton and doi in dates: - dates.remove(doi) - - dates = sorted(list(dates)) - txt = ' '.join([d.astype(str) for d in dates]) - self.ui.tb_labeling_text.setText(txt) - - def clearLayoutWidgets(self, L): if L is not None: while L.count(): @@ -734,15 +705,13 @@ class TimeSeriesViewer: def addTimeSeriesImages(self, files=None): if files is None: - s = QSettings('HU-Berlin','HUB TSV') + s = getSettings() defDir = s.value('DIR_FILESEARCH') files = QFileDialog.getOpenFileNames(directory=defDir) if len(files) > 0 and os.path.exists(files[0]): dn = os.path.dirname(files[0]) s.setValue('DIR_FILESEARCH', dn) - s = "" - #collect sublayers, if existing if files: diff --git a/timeseriesviewer/ui/mapviewrendersettings.ui b/timeseriesviewer/ui/mapviewrendersettings.ui index 06d88855..3d6f27ea 100644 --- a/timeseriesviewer/ui/mapviewrendersettings.ui +++ b/timeseriesviewer/ui/mapviewrendersettings.ui @@ -152,7 +152,7 @@ <enum>QFrame::NoFrame</enum> </property> <property name="currentIndex"> - <number>0</number> + <number>1</number> </property> <widget class="QWidget" name="pageMultiBand"> <property name="sizePolicy"> @@ -463,6 +463,12 @@ </property> <item> <widget class="QToolButton" name="btnDefaultMB"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="font"> <font> <pointsize>8</pointsize> @@ -473,12 +479,18 @@ <string>default band selection</string> </property> <property name="text"> - <string>D</string> + <string>Def</string> </property> </widget> </item> <item> <widget class="QToolButton" name="btnTrueColor"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="font"> <font> <pointsize>8</pointsize> @@ -495,6 +507,12 @@ </item> <item> <widget class="QToolButton" name="btnCIR"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="font"> <font> <pointsize>8</pointsize> @@ -511,6 +529,12 @@ </item> <item> <widget class="QToolButton" name="btn453"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Preferred"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="font"> <font> <pointsize>8</pointsize> @@ -521,7 +545,7 @@ <string>swIR-mwIR-red</string> </property> <property name="text"> - <string>453</string> + <string>swIR</string> </property> </widget> </item> @@ -544,12 +568,18 @@ </layout> </widget> <widget class="QWidget" name="pageSingleBand"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Minimum" vsizetype="Minimum"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="font"> <font> <pointsize>8</pointsize> </font> </property> - <layout class="QGridLayout" name="gridLayout"> + <layout class="QGridLayout" name="gridLayout" columnstretch="2,0,0,0,0"> <property name="horizontalSpacing"> <number>2</number> </property> @@ -559,11 +589,41 @@ <property name="margin"> <number>0</number> </property> - <item row="3" column="1"> + <item row="4" column="4"> + <widget class="QLineEdit" name="tbSingleBandMax"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> + <property name="minimumSize"> + <size> + <width>50</width> + <height>0</height> + </size> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="text"> + <string>5000</string> + </property> + </widget> + </item> + <item row="4" column="1"> <widget class="QSlider" name="sliderSingleBand"> + <property name="sizePolicy"> + <sizepolicy hsizetype="Expanding" vsizetype="Fixed"> + <horstretch>0</horstretch> + <verstretch>0</verstretch> + </sizepolicy> + </property> <property name="minimumSize"> <size> - <width>0</width> + <width>100</width> <height>0</height> </size> </property> @@ -590,7 +650,25 @@ </property> </widget> </item> - <item row="8" column="1" colspan="4"> + <item row="4" column="3"> + <widget class="QLineEdit" name="tbSingleBandMin"> + <property name="minimumSize"> + <size> + <width>50</width> + <height>0</height> + </size> + </property> + <property name="font"> + <font> + <pointsize>8</pointsize> + </font> + </property> + <property name="text"> + <string>0</string> + </property> + </widget> + </item> + <item row="9" column="1" colspan="4"> <widget class="QFrame" name="frame"> <property name="minimumSize"> <size> @@ -604,7 +682,7 @@ <property name="frameShadow"> <enum>QFrame::Raised</enum> </property> - <layout class="QGridLayout" name="gridLayout_4"> + <layout class="QGridLayout" name="gridLayout_4" columnstretch="0,0,0,0"> <property name="horizontalSpacing"> <number>1</number> </property> @@ -662,7 +740,21 @@ </layout> </widget> </item> - <item row="2" column="1"> + <item row="3" column="3"> + <widget class="QLabel" name="labelMin_2"> + <property name="text"> + <string>Min</string> + </property> + </widget> + </item> + <item row="3" column="4"> + <widget class="QLabel" name="labelMax_2"> + <property name="text"> + <string>Max</string> + </property> + </widget> + </item> + <item row="2" column="1" colspan="4"> <widget class="QFrame" name="bntBarSB"> <property name="minimumSize"> <size> @@ -685,7 +777,7 @@ </font> </property> <property name="text"> - <string>D</string> + <string>Def</string> </property> </widget> </item> @@ -739,65 +831,22 @@ </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> </widget> </item> - <item row="2" column="3"> - <widget class="QLabel" name="labelMin_2"> - <property name="text"> - <string>Min</string> - </property> - </widget> - </item> - <item row="3" column="3"> - <widget class="QLineEdit" name="tbSingleBandMin"> - <property name="minimumSize"> - <size> - <width>50</width> - <height>0</height> - </size> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <property name="text"> - <string>0</string> - </property> - </widget> - </item> - <item row="2" column="4"> - <widget class="QLabel" name="labelMax_2"> - <property name="text"> - <string>Max</string> - </property> - </widget> - </item> - <item row="3" column="4"> - <widget class="QLineEdit" name="tbSingleBandMax"> - <property name="sizePolicy"> - <sizepolicy hsizetype="Preferred" vsizetype="Fixed"> - <horstretch>0</horstretch> - <verstretch>0</verstretch> - </sizepolicy> - </property> - <property name="minimumSize"> - <size> - <width>50</width> - <height>0</height> - </size> - </property> - <property name="font"> - <font> - <pointsize>8</pointsize> - </font> - </property> - <property name="text"> - <string>5000</string> - </property> - </widget> - </item> </layout> </widget> </widget> @@ -891,7 +940,7 @@ </action> <action name="actionSetCIR"> <property name="text"> - <string>CIR</string> + <string>CIR1</string> </property> <property name="toolTip"> <string>Set to coloured infra red (swIR-red-green)</string> @@ -899,10 +948,10 @@ </action> <action name="actionSet453"> <property name="text"> - <string>453</string> + <string>CIR2</string> </property> <property name="toolTip"> - <string>Set to swIR-mwIR-red (Landsat 4-5-3)</string> + <string>Set to swIR-mwIR-red</string> </property> </action> <action name="actionCopyStyle"> diff --git a/timeseriesviewer/ui/timeseriesviewer.ui b/timeseriesviewer/ui/timeseriesviewer.ui index bde5c677..772735db 100644 --- a/timeseriesviewer/ui/timeseriesviewer.ui +++ b/timeseriesviewer/ui/timeseriesviewer.ui @@ -46,16 +46,7 @@ <property name="spacing"> <number>1</number> </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> + <property name="margin"> <number>0</number> </property> <item> @@ -90,7 +81,7 @@ <x>0</x> <y>0</y> <width>807</width> - <height>290</height> + <height>302</height> </rect> </property> <property name="sizePolicy"> @@ -112,16 +103,7 @@ <property name="sizeConstraint"> <enum>QLayout::SetNoConstraint</enum> </property> - <property name="leftMargin"> - <number>0</number> - </property> - <property name="topMargin"> - <number>0</number> - </property> - <property name="rightMargin"> - <number>0</number> - </property> - <property name="bottomMargin"> + <property name="margin"> <number>0</number> </property> <item> @@ -147,7 +129,7 @@ <x>0</x> <y>0</y> <width>809</width> - <height>22</height> + <height>21</height> </rect> </property> <widget class="QMenu" name="menuFiles"> @@ -244,7 +226,7 @@ <normaloff>:/timeseriesviewer/icons/CRS.png</normaloff>:/timeseriesviewer/icons/CRS.png</iconset> </property> <property name="text"> - <string>selectCRS</string> + <string>Select CRS</string> </property> <property name="toolTip"> <string>Select coordinate reference system</string> @@ -413,7 +395,7 @@ </action> <action name="actionSetExtent"> <property name="text"> - <string>setExtent</string> + <string>Set Extent</string> </property> </action> <action name="actionZoomIn"> @@ -470,7 +452,7 @@ <normaloff>:/timeseriesviewer/icons/mActionPan.png</normaloff>:/timeseriesviewer/icons/mActionPan.png</iconset> </property> <property name="text"> - <string>actionPan</string> + <string>Pan Map</string> </property> <property name="toolTip"> <string>Pan map</string> -- GitLab