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