Browse Source

oprava neexistující klic

Honza 5 years ago
parent
commit
b643cdea48

+ 36 - 3
QGIS_Installer/Form1.cs

@@ -115,10 +115,43 @@ namespace QGIS_Installer
                     string input3 = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + "\\atlas";
                     copyFiles(input3, out3);
                 }
-                
-                
+
+
             //}
-            checkStatus();
+            RegistryKey qgisKey = null;
+            var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry64);
+            string selectedKey = comboBox1.SelectedItem.ToString();
+            if (selectedKey == "QGIS 3_0")
+            {
+                qgisKey = hklm.OpenSubKey(@"Software\\QGIS 3.0");
+            }
+            if (selectedKey == "QGIS 3_4")
+            {
+                qgisKey = hklm.OpenSubKey(@"Software\\QGIS 3.4");
+            }
+            if (selectedKey == "QGIS 3_6")
+            {
+                qgisKey = hklm.OpenSubKey(@"Software\\QGIS 3.6");
+            }
+            if (selectedKey == "QGIS 3_8")
+            {
+                qgisKey = hklm.OpenSubKey(@"Software\\QGIS 3.8");
+            }
+            if (selectedKey == "QGIS 3_10")
+            {
+                qgisKey = hklm.OpenSubKey(@"Software\\QGIS 3.10");
+            }
+            if (selectedKey == "QGIS 3_12")
+            {
+                qgisKey = hklm.OpenSubKey(@"Software\\QGIS 3.12");
+            }
+            
+            
+           
+            
+            
+            
+            checkStatus(qgisKey);
             if (label2.Text == "Installed" && label3.Text == "Installed" && label4.Text == "Installed" && label5.Text == "Installed" && label6.Text == "Installed")
             { 
                 label1.ForeColor = System.Drawing.Color.Green;

BIN
QGIS_Installer/bin/Debug/QGIS_Installer.exe


BIN
QGIS_Installer/bin/Debug/QGIS_Installer.pdb


BIN
QGIS_Installer/bin/Debug/atlas.zip


+ 308 - 107
QGIS_Installer/bin/Debug/atlas/Atlas.py

@@ -122,7 +122,12 @@ class Atlas:
         self.code_challenge = None
         self.Agrimail = None
         self.loadedInMemory = False
+        self.liferayServer = None
+        self.laymanServer = None
         self.uri = 'http://layman.lesprojekt.cz/rest/'
+        self.iface.layerTreeView().currentLayerChanged.connect(lambda: self.layerChanged())
+        
+        
      #   global dlgGetLayers 
         self.dlgGetLayers= GetLayersDialog()
         # initialize locale
@@ -316,10 +321,13 @@ class Atlas:
     def run_UserInfoDialog(self):
         self.dlg = UserInfoDialog() 
         self.dlg.show()
+        self.dlg.pushButton_logout.setStyleSheet("#pushButton_logout {color: #fff !important;text-transform: uppercase;  text-decoration: none;   background: #72c02c;   padding: 20px;  border-radius: 50px;    display: inline-block; border: none;transition: all 0.4s ease 0s;} #pushButton_logout:hover{background: #66ab27 ;}")
+        self.dlg.setStyleSheet("#DialogBase {background: #f0f0f0 ;}")
         userEndpoint = "http://layman.lesprojekt.cz/rest/current-user"
         r = requests.get(url = userEndpoint,  headers = self.authHeader)
         res = r.text
         res = self.fromByteToJson(r.content)
+        self.dlg.pushButton_logout.clicked.connect(lambda: self.logout())
         print(res['claims'])
         self.dlg.label_layman.setText(res['claims']['preferred_username'])
         self.dlg.label_agrihub.setText(res['claims']['email'])
@@ -341,6 +349,10 @@ class Atlas:
         self.dlg.lineEdit_units.setText(self.compositeList[x]['units'])
         self.dlg.lineEdit_scale.setText(str(self.compositeList[x]['scale']))
         self.dlg.lineEdit_user.setText(self.compositeList[x]['user']['name'])
+        self.dlg.lineEdit_xmin.setText(self.compositeList[x]['extent'][0])
+        self.dlg.lineEdit_xmax.setText(self.compositeList[x]['extent'][2])
+        self.dlg.lineEdit_ymin.setText(self.compositeList[x]['extent'][1])
+        self.dlg.lineEdit_ymax.setText(self.compositeList[x]['extent'][3])
         self.dlg.rejected.connect(lambda: self.afterCloseEditMapDialog()) 
         self.dlg.pushButton_save.clicked.connect(lambda: self.modifyMap(x))
         self.dlg.rejected.connect(lambda: self.afterCloseCompositeDialog())
@@ -515,8 +527,9 @@ class Atlas:
                 layerType = 'vector layer'
             else:
                 layerType = 'raster layer'
-            item = QTreeWidgetItem([layer.name(), layerType])           
-            self.dlg.treeWidget.addTopLevelItem(item)
+            item = QTreeWidgetItem([layer.name(), layerType])    
+            if (layerType == 'vector layer'):
+                self.dlg.treeWidget.addTopLevelItem(item)
         self.dlg.setWindowModality(Qt.ApplicationModal)
 
         self.dlg.pushButton_close.setStyleSheet("#pushButton_close {color: #fff !important;text-transform: uppercase;  text-decoration: none;   background: #72c02c;   padding: 20px;  border-radius: 50px;    display: inline-block; border: none;transition: all 0.4s ease 0s;} #pushButton_close:hover{background: #66ab27 ;}")
@@ -537,8 +550,13 @@ class Atlas:
             if len(config['DEFAULT']['login']) > 0:
                 self.Agrimail = config['DEFAULT']['login']
                 self.dlg.pushButton_Connect.setEnabled(True) 
-            self.dlg.lineEdit_userName.setText(config['DEFAULT']['login'] + "@lesprojekt.cz")            
-            self.dlg.lineEdit_AgriID.setText(config['DEFAULT']['id']) 
+            self.dlg.lineEdit_userName.setText(config['DEFAULT']['login'] + "@lesprojekt.cz")  
+            try:
+                self.dlg.lineEdit_AgriID.setText(config['DEFAULT']['id']) 
+                self.dlg.lineEdit_server.setText(config['DEFAULT']['server']) 
+                self.dlg.lineEdit_serverLayman.setText(config['DEFAULT']['layman']) 
+            except:
+                print("udaj v ini nenalezen")
         else:
             try:
                 os.makedirs(os.getenv("HOME") + os.sep + ".layman")
@@ -616,7 +634,7 @@ class Atlas:
         self.dlg.pushButton_delete.setEnabled(False)
         
         for row in range(0, len(data)):            
-            item = QTreeWidgetItem([data[row]['name']])
+            item = QTreeWidgetItem([self.getLayerTitle(data[row]['name'])])
             self.dlg.treeWidget.addTopLevelItem(item)
         self.dlg.pushButton_delete.clicked.connect(lambda: self.layerDelete(self.dlg.treeWidget.selectedItems()[0].text(0)))    
         self.dlg.pushButton_layerRedirect.clicked.connect(lambda: self.layerInfoRedirect(self.dlg.treeWidget.selectedItems()[0].text(0)))
@@ -699,7 +717,20 @@ class Atlas:
         return loaded 
                    
         
-                   
+    def logout(self):
+        self.menu_saveLocalFile.setEnabled(False)
+        self.menu_loadJson.setEnabled(False)
+        self.menu_ImportLayerDialog.setEnabled(False)
+        self.menu_AddLayerDialog.setEnabled(False) 
+        self.menu_AddMapDialog.setEnabled(False)       
+        self.menu_ImportLayerDialog.setEnabled(False)
+        self.menu_ImportMapDialog.setEnabled(False)    
+        self.menu_UserInfoDialog.setEnabled(False)
+        self.textbox.setText("Layman")
+        self.dlg.close()
+       # self.flaskThread.join()
+       # self.thread1.join() ## ukončujeme vlákno, které se stará o refresh tokenů OAUTH
+
     def enableLoadMapButtons(self, item):
         self.dlg.pushButton_mapWFS.setEnabled(True)
     def enableButtonImport(self, item, column):
@@ -817,7 +848,10 @@ class Atlas:
                 print(response.content)
                 print(response)
                 self.addLayerRefresh()
-                self.deleteLayerThrowCompositions(name)
+                try:
+                    self.deleteLayerThrowCompositions(name)
+                except:
+                    pass
                 
         else:    
             url = self.URI+'/rest/'+self.laymanUsername+'/layers/'+name    
@@ -835,6 +869,7 @@ class Atlas:
             self.dlg.treeWidget.addTopLevelItem(item)
     def checkIfMapExist(self, name):
         url = "http://layman.lesprojekt.cz/rest/"+self.laymanUsername+"/maps/"+str(name)+"/file"
+        print(url)
         r = requests.get(url)
         print(r.content)
         if (r.status_code == 404):
@@ -845,20 +880,28 @@ class Atlas:
     def reorderLayers(self, pos, order, x):
         self.compositeList[x]['layers']
         i = 0
-        
-        for lay in self.compositeList[x]['layers']:
-            #print (lay)
-            if i == pos:
+        compositeLength = len(self.compositeList[x]['layers'])
+       
+        if (pos + order < 0):
+            QMessageBox.information(None, "Error", "Layer is already on the top level!")
+            
+        elif( pos + order == compositeLength):
+            QMessageBox.information(None, "Error", "Layer is already on the bottom level!")
 
-                pom = self.compositeList[x]['layers'][i]
-                self.compositeList[x]['layers'][i] = self.compositeList[x]['layers'][i + order]
-                self.compositeList[x]['layers'][i + order] = pom     
+        else:
+            for lay in self.compositeList[x]['layers']:
+                #print (lay)
+                if i == pos:
 
-            i = i + 1
-        print(self.compositeList[x]['layers'])
-        self.importMap(x, 'mod')
-        self.refreshLayerList()
-        self.dlg.listWidget_listLayers.setCurrentRow(pos + order)
+                    pom = self.compositeList[x]['layers'][i]
+                    self.compositeList[x]['layers'][i] = self.compositeList[x]['layers'][i + order]
+                    self.compositeList[x]['layers'][i + order] = pom     
+
+                i = i + 1
+            print(self.compositeList[x]['layers'])
+            self.importMap(x, 'mod')
+            self.refreshLayerList()
+            self.dlg.listWidget_listLayers.setCurrentRow(pos + order)
 
     def showThumbnail(self, it):
         try:
@@ -866,7 +909,7 @@ class Atlas:
         except:
             layer = it.text()##pro listWidget
         try:
-            url = self.URI+'/rest/' +self.laymanUsername+'/layers/'+str(layer)+'/thumbnail'    
+            url = self.URI+'/rest/' +self.laymanUsername+'/layers/'+str(layer).lower()+'/thumbnail'    
             data = urlopen(url).read()
             pixmap = QPixmap(200, 200)
             pixmap.loadFromData(data)
@@ -881,7 +924,7 @@ class Atlas:
         except:
             layer = it.text()##pro listWidget
         try:
-            url = self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layer)+'/thumbnail'    
+            url = self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layer).lower()+'/thumbnail'    
             data = urlopen(url).read()
             pixmap = QPixmap(170, 170)
             pixmap.loadFromData(data)
@@ -899,7 +942,7 @@ class Atlas:
         
         try:
             map = self.removeUnacceptableChars(str(map))
-            url = self.URI+'/rest/'+self.laymanUsername+'/maps/'+str(map)+'/thumbnail'    
+            url = self.URI+'/rest/'+self.laymanUsername+'/maps/'+str(map).lower()+'/thumbnail'    
             print(url)
             data = urlopen(url).read()
             pixmap = QPixmap(100, 100)
@@ -924,6 +967,8 @@ class Atlas:
     #----------------------------------------------------------
     def readLayerJson(self,layerName, service):
         if self.checkLayerOnLayman(layerName):
+            layerNameTitle =layerName
+            layerName = self.removeUnacceptableChars(layerName)
             url = self.URI+'/rest/'+self.laymanUsername+'/layers/'+layerName  
             print (url)
             r = requests.get(url = url)
@@ -934,11 +979,11 @@ class Atlas:
                 wmsUrl = data['wms']['url']
                 format = 'png'
                 epsg = 'EPSG:4326' 
-                self.loadWms(wmsUrl, layerName, format, epsg) 
+                self.loadWms(wmsUrl, layerName,layerNameTitle, format, epsg) 
             if (service == "WFS"):
                 wfsUrl = data['wfs']['url']
                 print("loading WFS")
-                self.loadWfs(wfsUrl, layerName) 
+                self.loadWfs(wfsUrl, layerName, layerNameTitle) 
         else:
             QMessageBox.information(None, "Layman", "Something went wrong with this layer: "+layerName)
     def loadAllComposites(self):
@@ -1085,8 +1130,8 @@ class Atlas:
         # disconnects
         self.dockwidget.closingPlugin.disconnect(self.onClosePlugin)
 
-  
-
+        self.flaskThread.terminate() ## killing daemons
+        self.thread1.terminate()
         self.pluginIsActive = False
 
 
@@ -1143,9 +1188,14 @@ class Atlas:
         name = (os.path.splitext(os.path.basename(fileName))[0])
         vlayer = QgsVectorLayer(fileName, name,"ogr")
         sldPath = os.path.splitext(fileName[:-4])[0] + ".sld"
+        qmlPath = os.path.splitext(fileName[:-4])[0] + ".qml"
         print (sldPath)
-        exists = os.path.isfile(sldPath)
-        if (exists):
+        sldExists = os.path.isfile(sldPath)
+        qmlExists = os.path.isfile(qmlPath)
+        if (qmlExists):
+            print("qml loaded")
+            vlayer.loadNamedStyle(qmlPath)
+        elif (sldExists):
             vlayer.loadSldStyle(os.path.splitext(fileName)[0]+ ".sld")
             print("sld loaded")
         QgsProject.instance().addMapLayer(vlayer)
@@ -1189,7 +1239,11 @@ class Atlas:
         self.compositeList[x]['name'] = name
         self.compositeList[x]['abstract'] = self.dlg.lineEdit_abstract.text()
         self.compositeList[x]['title'] = self.dlg.lineEdit_title.text()
-
+        self.compositeList[x]['extent'][0] = self.dlg.lineEdit_xmin.text()
+        self.compositeList[x]['extent'][2] = self.dlg.lineEdit_xmax.text()
+        self.compositeList[x]['extent'][1] = self.dlg.lineEdit_ymin.text()
+        self.compositeList[x]['extent'][3] = self.dlg.lineEdit_ymax.text()
+        print(self.compositeList[x]['extent'])
         
         print(self.URI+'/rest/'+self.laymanUsername+'/maps/'+self.compositeList[x]['name'])       
         oldName = self.dlg.lineEdit_name.text()
@@ -1256,7 +1310,9 @@ class Atlas:
                 print(tempFile)
                 #QMessageBox.information(None, "Layman", "It is not possible overwrite this file. File is already open in other process.")  
                 sld_temp_filename = tempFile.replace("geojson", "sld") 
+                qml_temp_filename = tempFile.replace("geojson", "qml")
                 layer.saveSldStyle(sld_temp_filename)
+                layer.saveNamedStyle(qml_temp_filename)
                 result2 = qgis.core.QgsVectorFileWriter.writeAsVectorFormat(layer, tempFile, "utf-8", crs, ogr_driver_name)
                 print(result2)
                 if(result2[0] == 2):
@@ -1267,16 +1323,19 @@ class Atlas:
                     print(tempFile, layer_name)
                     shutil.copy(tempFile, layer_name)
                     shutil.copy(sld_temp_filename, layer_name.replace(".geojson", ".sld"))
+                    shutil.copy(qml_temp_filename, layer_name.replace(".geojson", ".qml"))
                     self.loadJsonLayer(layer_name)
                 
             else:                
-                sld_filename = layer_name.replace("geojson", "sld")             
+                sld_filename = layer_name.replace("geojson", "sld")     
+                qml_filename = layer_name.replace("geojson", "qml") 
                 result3 = False
                 layer.saveSldStyle(sld_filename)
+                layer.saveNamedStyle(qml_filename)
 
     def json_export(self, layer_name):     
 
-        filePath = self.getTempPath(layer_name)  
+        filePath = self.getTempPath(layer_name.lower())  
         ogr_driver_name = "GeoJSON"     
         project = QgsProject.instance()
         fileNames = []      
@@ -1312,7 +1371,7 @@ class Atlas:
         #    print("convert")
         #    print(main(["","-f", ogr_driver_name, "-s_srs", "EPSG:5514", "-t_srs", "EPSG:4326", out, input])) ## ogr2ogr
             ##
-            sld_filename = filePath.replace("geojson", "sld")            
+            sld_filename = filePath.replace("geojson", "sld").lower()            
             result3 = False
             layer.saveSldStyle(sld_filename)
 
@@ -1350,9 +1409,25 @@ class Atlas:
         
         for item in layers:
             print (item.text(0))
+            
+            
+                
+
             self.postRequest(item.text(0))
     #def transformLayer2(self, layer):
     #    pass
+    def setCurrentLayer(name):
+        layers = QgsProject.instance().mapLayersByName(name) 
+        if(len(layers) >1):
+            layerss = QgsProject.instance().mapLayers().values()    
+            i = 0
+            for layer in layerss:  
+                if layers[0].name == layer.name():
+                    if (i == item.currentIndex()):
+                        i = i + 1
+                        break
+                    i = i + 1
+        return i
     def transformLayer(self, layer):
         layer = iface.activeLayer()
         crsSrc = layer.crs()
@@ -1383,7 +1458,7 @@ class Atlas:
         nameCheck = True
         validExtent = True
         layers = QgsProject.instance().mapLayersByName(layer_name)  
-        layer_name = self.removeUnacceptableChars(layer_name)
+       # layer_name = self.removeUnacceptableChars(layer_name)
         layers[0].setName(layer_name)
         if len(layers) > 1:
             for l in layers:
@@ -1392,11 +1467,14 @@ class Atlas:
                     layers.append(l)
                     break
      
-        if not (re.match('[a-zA-Z_]{1}', layer_name)): ## nesmí být nesmysl v názvu na prvním místě
-            QMessageBox.information(None, "Layman", "Diacritics or number in first character is not allowed.")
-            nameCheck = False
-        if not (re.match('[a-zA-Z0-9]', layer_name)): ## není povolena diakritika
-            QMessageBox.information(None, "Layman", "Diacritics is not allowed.")
+        #if not (re.match('[a-zA-Z_]{1}', layer_name)): ## nesmí být nesmysl v názvu na prvním místě
+        #    QMessageBox.information(None, "Layman", "Diacritics or number in first character is not allowed.")
+        #    nameCheck = False
+        #if not (re.match('[a-zA-Z0-9]', layer_name)): ## není povolena diakritika
+        #    QMessageBox.information(None, "Layman", "Diacritics is not allowed.")
+        #    nameCheck = False
+        if (re.match('[0-9]{1}', layer_name)): ## nesmí být nesmysl v názvu na prvním místě
+            QMessageBox.information(None, "Layman", "Number in first character is not allowed.")
             nameCheck = False
         
         print(layer_name)
@@ -1411,7 +1489,7 @@ class Atlas:
                      
             crs = layers[0].crs().authid()
             crs = "EPSG:4326"
-            data = { 'name' :  str(layer_name), 'title' : str(layer_name), 'crs' : str(crs) } 
+            data = { 'name' :  str(layer_name).lower(), 'title' : str(layer_name), 'crs' : str(crs) } 
             
             if (self.checkValidAttributes(layer_name)):
                 if (self.checkExistingLayer(layer_name)):
@@ -1428,6 +1506,7 @@ class Atlas:
                         #try:
                         if (os.path.getsize(geoPath) > self.CHUNK_SIZE):
                             self.postInChunks(layer_name, "patch")
+                           # iface.messageBar().pushWidget(iface.messageBar().createMessage("Import:", " Layer  " + layer_name + " was imported successfully."), Qgis.Success, duration=3)
                         else:
                             self.patchLayer(layer_name, data)
                             iface.messageBar().pushWidget(iface.messageBar().createMessage("Import:", " Layer  " + layer_name + " was imported successfully."), Qgis.Success, duration=3)
@@ -1536,16 +1615,45 @@ class Atlas:
             QMessageBox.information(None, "Layman", "No layer selected!")
         
         for i in range (0, len(layers)):
-            print(type(layers[i]))            
-            print("tst")
+            print(type(layers[i]))           
+            
             print (self.isLayerInComposite(x))
             print (layers[i].name() in self.isLayerInComposite(x))
             inComposite = layers[i].name() in self.isLayerInComposite(x)
+            layerName = self.removeUnacceptableChars(layers[i].name())
             if (self.checkExistingLayer(layers[i].name()) and inComposite):
-                QMessageBox.information(None, "Message", "Composition already include layer "+layers[i].name()+"!")
-
-              #  self.postRequest(layers[i].name())
+                j = self.getLayerInCompositePosition(x)
+                print("j je: " + str(j))
+                
+               # QMessageBox.information(None, "Message", "Composition already include layer "+layers[i].name()+"!")
+               # self.deteteLayerFromComposite(x, j, layers[i].name())
+             
+                self.postRequest(layers[i].name())
+                layerName = self.removeUnacceptableChars(layers[i].name())
+                wmsStatus = 'PENDING'
+                j = 0
+                while ((wmsStatus == 'PENDING') and (j < 10)):
+                    print (self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layerName))
+                    response = requests.get(self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layerName), verify=False)
+                    res = self.fromByteToJson(response.content)
+                    try:
+                        wmsStatus = res['wms']['status']
+                    except:
+                        wmsStatus = "done"
+                    time.sleep(1)
+                    j = j + 1
+            
 
+                #print(res)
+                #try:
+                #    wmsUrl = res['wms']['url']
+                #except:
+                #    wmsUrl = self.URI+'/geoserver/'+layers[i].name()+'/ows'
+                #self.compositeList[x]['layers'].append({"metadata":{},"visibility":True,"opacity":1,"title":str(layers[i].name()),"className":"HSLayers.Layer.WMS","singleTile":True,"wmsMaxScale":0,"legends":[""],"maxResolution":None,"minResolution":0,"url": wmsUrl ,"params":{"LAYERS": str(layers[i].name()),"INFO_FORMAT":"application/vnd.ogc.gml","FORMAT":"image/png","FROMCRS":"EPSG:3857","VERSION":"1.3.0"},"ratio":1.5,"dimensions":{}})
+                #successful = successful + 1
+                #self.dlg.progressBar.setValue(self.dlg.progressBar.value()+step)
+ 
+                #self.importMap(x, "add", successful) 
 
               
             else:
@@ -1553,8 +1661,8 @@ class Atlas:
                 wmsStatus = 'PENDING'
                 j = 0
                 while ((wmsStatus == 'PENDING') and (j < 10)):
-                    print (self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layers[i].name()))
-                    response = requests.get(self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layers[i].name()), verify=False)
+                    print (self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layerName))
+                    response = requests.get(self.URI+'/rest/'+self.laymanUsername+'/layers/'+str(layerName), verify=False)
                     res = self.fromByteToJson(response.content)
                     try:
                         wmsStatus = res['wms']['status']
@@ -1568,8 +1676,8 @@ class Atlas:
                 try:
                     wmsUrl = res['wms']['url']
                 except:
-                    wmsUrl = self.URI+'/geoserver/'+layers[i].name()+'/ows'
-                self.compositeList[x]['layers'].append({"metadata":{},"visibility":True,"opacity":1,"title":str(layers[i].name()),"className":"HSLayers.Layer.WMS","singleTile":True,"wmsMaxScale":0,"legends":[""],"maxResolution":None,"minResolution":0,"url": wmsUrl ,"params":{"LAYERS": str(layers[i].name()),"INFO_FORMAT":"application/vnd.ogc.gml","FORMAT":"image/png","FROMCRS":"EPSG:3857","VERSION":"1.3.0"},"ratio":1.5,"dimensions":{}})
+                    wmsUrl = self.URI+'/geoserver/'+layerName+'/ows'
+                self.compositeList[x]['layers'].append({"metadata":{},"visibility":True,"opacity":1,"title":str(layerName),"className":"HSLayers.Layer.WMS","singleTile":True,"wmsMaxScale":0,"legends":[""],"maxResolution":None,"minResolution":0,"url": wmsUrl ,"params":{"LAYERS": str(layers[i].name()),"INFO_FORMAT":"application/vnd.ogc.gml","FORMAT":"image/png","FROMCRS":"EPSG:3857","VERSION":"1.3.0"},"ratio":1.5,"dimensions":{}})
                 successful = successful + 1
                 self.dlg.progressBar.setValue(self.dlg.progressBar.value()+step)
  
@@ -1647,22 +1755,30 @@ class Atlas:
             if (operation == "add"):                
                 msgbox = QMessageBox(QMessageBox.Question, "Import Map", "Chcete přidat do kompozice "+str(successful)+" vrstev?") 
             if (operation == "mod"): 
-                msgbox = QMessageBox(QMessageBox.Question, "Import Map", "Chcete opravdu provést změny v této kompozici?") 
+                #msgbox = QMessageBox(QMessageBox.Question, "Import Map", "Do you want save changes?") 
+                
                 self.dlg.close()
                 self.afterCloseEditMapDialog()
                 print(self.URI+'/rest/'+self.laymanUsername+'/maps/'+self.compositeList[x]['name'])       
               
                 response = requests.delete(self.URI+'/rest/'+self.laymanUsername+'/maps/'+self.compositeList[x]['name'],headers = self.authHeader, verify=False)
                 print(response.content)
+                response = requests.post(self.URI+'/rest/'+self.laymanUsername+'/maps', files=files, data = data, headers = self.authHeader)
                 self.dlg.show()
+                return
             if (operation == "del"):
                 msgbox = QMessageBox(QMessageBox.Question, "Import Map", "Chcete smazat vybranou vrstvu?")
-            msgbox.addButton(QMessageBox.Yes)
-            msgbox.addButton(QMessageBox.No)
-            msgbox.setDefaultButton(QMessageBox.No)
-            reply = msgbox.exec()
+          
+            try: # jedná se o mod pokud je except
+                msgbox.addButton(QMessageBox.Yes)
+                msgbox.addButton(QMessageBox.No)
+                msgbox.setDefaultButton(QMessageBox.No)
+                reply = msgbox.exec()
+            except:
+                pass
+                
             if (reply == QMessageBox.Yes):
-                response = requests.post(self.URI+'/rest/'+self.laymanUsername+'/maps', files=files, data = data, headers = self.authHeader, verify=False)
+                response = requests.post(self.URI+'/rest/'+self.laymanUsername+'/maps', files=files, data = data, headers = self.authHeader)
                 print(response.content)
                 data = response.content
                 self.dlg.progressBar.hide() 
@@ -1804,6 +1920,7 @@ class Atlas:
             return False
    
     def removeUnacceptableChars(self, input):
+        input = input.lower()
         input = input.replace("ř","r")
         input = input.replace("š","s")
         input = input.replace("ž","z")
@@ -1812,6 +1929,7 @@ class Atlas:
         input = input.replace(" ","_")
         input = input.replace("é","e")
         input = input.replace("í","i")
+        input = input.replace("ý","y")
         input = input.replace("á","a")
         input = input.replace("ó","o")
         input = input.replace("č","c")
@@ -1819,10 +1937,15 @@ class Atlas:
         input = input.replace("ě","e")
         input = input.replace("ť","t")
         input = re.sub(r'[?|$|.|!]',r'',input)
-        input = input.lower()
+        
+       # iface.messageBar().pushWidget(iface.messageBar().createMessage("Layman:", "Diacritics in name of layer was replaced."), Qgis.Success, duration=3)
+        return input
+    def removeUnacceptableChars2(self, input):
+        input = input.encode('utf-8')
+        input = input.hex()
+        
        # iface.messageBar().pushWidget(iface.messageBar().createMessage("Layman:", "Diacritics in name of layer was replaced."), Qgis.Success, duration=3)
         return input
-
     def test (self):
         item = self.dlgGetLayers.items.currentItem().text()
         print( item)
@@ -1843,6 +1966,25 @@ class Atlas:
                     existingLayers.append(data['layers'][i]['params']['LAYERS'])
 
         return existingLayers
+    def getLayerInCompositePosition(self, x):      
+        layers =[]
+        layers.append(self.dlg.mMapLayerComboBox.currentLayer())
+        print (self.URI+'/rest/'+self.laymanUsername+'/maps/'+self.compositeList[x]['name']+'/file')
+        req = requests.get (self.URI+'/rest/'+self.laymanUsername+'/maps/'+self.compositeList[x]['name']+'/file')
+        data = req.json()
+       
+        print (data['abstract'])
+        print (len(self.compositeList[x]['layers']))
+        existingLayers = []
+        j = 0
+        for i in range (0, len(data['layers'])):
+            for j in range (0, len(layers)):
+                if (data['layers'][i]['params']['LAYERS'] in layers[j].name() ):
+                  #  existingLayers.append(data['layers'][i]['params']['LAYERS'])
+                   j = i
+                   print("founded")
+
+        return j
 
     def isRasterLayerInComposite(self, x, name):
         req = requests.get (self.URI+'/rest/'+self.laymanUsername+'/maps/'+self.compositeList[x]['name']+'/file')
@@ -1864,18 +2006,28 @@ class Atlas:
            #  epsg = str(data['groups']['projection']).upper()
             epsg = 'EPSG:4326' 
             #abstract = data['data']['layers'][x]['params']['ABSTRACT']
-            wmsName = data['layers'][x]['params']['LAYERS']             
+            wmsName = data['layers'][x]['params']['LAYERS']
+            
+            print("groupName " +groupName)
+            print("groupName " +layerName)
+            
+            print("groupName " +format)
+            print("groupName " +epsg)
+            layerNameTitle = self.getLayerTitle(layerName)
+            print("groupName " +layerNameTitle)
+            
+            
             if service == 'WMS':         
-                self.loadWms(repairUrl, layerName, format,epsg, groupName)
+                self.loadWms(repairUrl, layerName,layerNameTitle, format,epsg, groupName)
 
             if service == 'WFS':          
-                self.loadWfs(repairUrl, layerName, groupName)
+                self.loadWfs(repairUrl, layerName,layerNameTitle, groupName)
     def loadService(self, data, service, groupName = ''):     
         
-        print(len(data['layers']))
-        for x in range(0, len(data['layers'])):        
+        #print(len(data['layers']))
+        for x in range(len(data['layers'])- 1, -1, -1):       ## descending order 
             #repairUrl = self.convertUrlFromHex(data['layers'][x]['url'])  
-            repairUrl = "http://layman.lesprojekt.cz/geoserver/"+self.laymanUsername+"/ows"
+            repairUrl = self.URI+"/geoserver/"+self.laymanUsername+"/ows"
             layerName = data['layers'][x]['params']['LAYERS']
             format = data['layers'][x]['params']['FORMAT']
            #  epsg = str(data['groups']['projection']).upper()
@@ -1884,29 +2036,51 @@ class Atlas:
             wmsName = data['layers'][x]['params']['LAYERS']  
             if self.checkLayerOnLayman(layerName):
                 if service == 'WMS':         
+                    print("zzzzzzz" +layerName)
                     self.loadWms(repairUrl, layerName, format,epsg, groupName)
 
                 if service == 'WFS':          
                     self.loadWfs(repairUrl, layerName, groupName)
             else:
                 QMessageBox.information(None, "Layman", "Layer: "+layerName + " is corrupted and will not be loaded.")
-                
-    def loadWms(self, url, layerName, format, epsg, groupName = ''):          
+    def getLayerTitle(self, layerName):
+        layerName = self.removeUnacceptableChars(layerName)
+        url = self.URI+'/rest/'+self.laymanUsername+'/layers/'+layerName
+        r = requests.get(url = url)
+        data = r.json()
+        print(data)
+        title = data['title']
+        return title
+        
+    def loadWms(self, url, layerName,layerNameTitle, format, epsg, groupName = ''):          
         print(url)
-        urlWithParams = 'contextualWMSLegend=0&crs='+epsg+'&dpiMode=7&featureCount=10&format=image/png&layers='+layerName+'&styles=&url=' + url 
+        layerName = self.removeUnacceptableChars(layerName)
+        epsg = "EPSG:4326"
+        urlWithParams = 'contextualWMSLegend=0&crs='+epsg+'&IgnoreReportedLayerExtents=1&dpiMode=7&featureCount=10&format=image/png&layers='+layerName+'&styles=&url=' + url
         print(urlWithParams)
-        rlayer = QgsRasterLayer(urlWithParams, layerName, 'wms')
+        print("test")
+        print(layerNameTitle)
+        rlayer = QgsRasterLayer(urlWithParams, layerNameTitle, 'wms')
+        try:
+            print("extents")
+            print(rlayer.ignoreExtents())
+        except:
+            print("ignoreExtents works only with qgis 3.10 and higher")
+            pass # pro qgis 3.10 a vys
+            
+           
         if (groupName != ''):
             self.addWmsToGroup(groupName,rlayer)
         else:
             QgsProject.instance().addMapLayer(rlayer)
 
-    def loadWfs(self, url, layerName, groupName = ''):
+    def loadWfs(self, url, layerName,layerNameTitle, groupName = ''):
+        layerName = self.removeUnacceptableChars(layerName)
         epsg = 'EPSG:4326'        
-        uri = "http://layman.lesprojekt.cz/geoserver/"+self.laymanUsername+"/ows?srsname="+epsg+"&typename="+self.laymanUsername+":"+layerName+"&restrictToRequestBBOX=1&pagingEnabled=True &version=auto&request=GetFeature&service=WFS"
+        uri = self.URI+"/geoserver/"+self.laymanUsername+"/ows?srsname="+epsg+"&typename="+self.laymanUsername+":"+layerName+"&restrictToRequestBBOX=1&pagingEnabled=True&version=auto&request=GetFeature&service=WFS"
         
-        print(uri)
-        vlayer = QgsVectorLayer(uri, layerName, "WFS")
+        print(uri)        
+        vlayer = QgsVectorLayer(uri, layerNameTitle, "WFS")
         print(vlayer.isValid())  
         if (groupName != ''):
             self.addWmsToGroup(groupName,vlayer)
@@ -1916,10 +2090,18 @@ class Atlas:
         root = QgsProject.instance().layerTreeRoot()
         group = root.findGroup(groupName)
         if not(group):
-            group = root.addGroup(groupName)           
+            group = root.addGroup(groupName)  
+            group = self.reorderToTop(groupName)
         QgsProject.instance().addMapLayer(layer,False)
-        group.insertChildNode(1,QgsLayerTreeLayer(layer))         
-
+        group.insertChildNode(0,QgsLayerTreeLayer(layer))         
+    def reorderToTop(self, name):
+        root = QgsProject.instance().layerTreeRoot()
+        for ch in root.children():
+            if ch.name() == name:
+                _ch = ch.clone()
+                root.insertChildNode(0, _ch)
+                root.removeChildNode(ch)
+        return _ch
     def convertUrlFromHex(self, url):
         url = url.replace('%3A',':')
         url = url.replace('%2F','/')
@@ -1937,17 +2119,18 @@ class Atlas:
         return ret
 
     def registerLayer(self, name):
-        sldPath = self.getTempPath(name).replace("geojson", "sld")
-        geoPath = self.getTempPath(name)
+        sldPath = self.getTempPath(name).replace("geojson", "sld").lower()
+        geoPath = self.getTempPath(name).lower()
 
         url = "http://layman.lesprojekt.cz/rest/"+self.laymanUsername+"/layers"
                              
         files = {'sld': (sldPath, open(sldPath, 'rb')),} # nahrávám sld
         payload = {        
-            'file': name+".geojson"
+            'file': name.lower()+".geojson",
+            'title': name
             }    
         response = requests.request("POST", url, files = files, data=payload, headers = self.authHeader)    
-       # print(response.text)
+        print(response.text)
 
     def read_in_chunks(self, file_object): ## cca 1MB chunk převzato z laymana test klienta
         chunk_size=self.CHUNK_SIZE
@@ -1975,32 +2158,34 @@ class Atlas:
         arr = []
         for piece in self.read_in_chunks(f):
             arr.append(piece)
-     
+        layer_name = layer_name.lower()
         url = self.URI+'/rest/'+self.laymanUsername+'/layers/'+layer_name+'/chunk'     
         resumableFilename = layer_name+'.geojson'
         layman_original_parameter = "file"  
         resumableTotalChunks = len(arr)
-
-        for i in range (1, len(arr)+1):  ##chunky jsou počítané od 1 proto +1  
-            print("chunk" + str(i))
-            file = arr[i-1] # rozsekaná část souboru
-            resumableChunkNumber = i  # cislo casti
-            payload = {
-            'file' : "chunk"+str(i)+".geojson",
-            'resumableFilename': resumableFilename,
-            'layman_original_parameter': layman_original_parameter,
-            'resumableChunkNumber': i,
-            'resumableTotalChunks': resumableTotalChunks
-            } 
+        try:
+            for i in range (1, len(arr)+1):  ##chunky jsou počítané od 1 proto +1  
+                print("chunk" + str(i))
+                file = arr[i-1] # rozsekaná část souboru
+                resumableChunkNumber = i  # cislo casti
+                payload = {
+                'file' : "chunk"+str(i)+".geojson",
+                'resumableFilename': resumableFilename,
+                'layman_original_parameter': layman_original_parameter,
+                'resumableChunkNumber': i,
+                'resumableTotalChunks': resumableTotalChunks
+                } 
          
-            f = open(filePath + os.sep+"chunk"+str(i)+".geojson", "wb")
-            f.write(bytearray(arr[i-1]))
-            f.close()              
-            files = {'file': (layer_name+".geojson", open(filePath +os.sep+ "chunk"+str(i)+".geojson", 'rb')),}              
-            response = requests.post(url, files = files, data=payload, headers = self.authHeader)
-
-            print(response.content)
+                f = open(filePath + os.sep+"chunk"+str(i)+".geojson", "wb")
+                f.write(bytearray(arr[i-1]))
+                f.close()              
+                files = {'file': (layer_name+".geojson", open(filePath +os.sep+ "chunk"+str(i)+".geojson", 'rb')),}              
+                response = requests.post(url, files = files, data=payload, headers = self.authHeader)
 
+                print(response.content)
+            iface.messageBar().pushWidget(iface.messageBar().createMessage("Import:", " Layer  " + layer_name + " was imported successfully."), Qgis.Success, duration=3)
+        except:
+            iface.messageBar().pushWidget(iface.messageBar().createMessage("Import:", " Layer  " + layer_name + " was not imported successfully!"), Qgis.Warning, duration=3)
 
 ############################################# auth part############################
 
@@ -2012,7 +2197,7 @@ class Atlas:
         #self.expires_in = 60
         path = tempfile.gettempdir() + os.sep + "atlas" + os.sep + "tsts.txt" 
         i = 0
-        tokenEndpoint = "https://www.agrihub.cz/o/oauth2/token"
+        tokenEndpoint = "https://www."+self.liferayServer+"/o/oauth2/token"
         while (i < self.expires_in):        
             f = open(path, "a")
             f.write(str(i))
@@ -2092,7 +2277,7 @@ class Atlas:
     def getToken(self):
         self.saveIni()
 
-        tokenEndpoint = "https://www.agrihub.cz/o/oauth2/token"
+        tokenEndpoint = "https://www."+self.liferayServer+"/o/oauth2/token"
         # data to be sent to api 
         data = {'grant_type':'authorization_code', 
                 'client_id': self.client_id, 
@@ -2130,7 +2315,7 @@ class Atlas:
     def setAuthHeader(self):
         self.authHeader ={
           "Authorization": "Bearer " + self.access_token, 
-          "AuthorizationIssUrl" : 'https://www.agrihub.cz/o/oauth2/authorize'
+          "AuthorizationIssUrl" : 'https://www.'+self.liferayServer+'/o/oauth2/authorize'
         } 
         
     def registerUserIfNotExists(self):
@@ -2162,12 +2347,13 @@ class Atlas:
         #API_ENDPOINT = "http://layman.lesprojekt.cz/rest/current-user"
         #headers ={
         #  "Authorization": "Bearer "+ self.access_token, 
-        #  "AuthorizationIssUrl" : 'https://www.agrihub.cz/o/oauth2/authorize'
+        #  "AuthorizationIssUrl" : 'https://www.'+self.liferayServer+'/o/oauth2/authorize'
         #} 
 
 
     def openAuthLiferayUrl(self):
-        
+        self.liferayServer = self.dlg.lineEdit_server.text()
+        self.URI = self.dlg.lineEdit_serverLayman.text()
         self.getCodeChallenge(self.getCodeVerifier()) ##generování kódů
         self.client_id = self.dlg.lineEdit_AgriID.text()
         path = tempfile.gettempdir() + os.sep + "atlas" + os.sep + "auth.txt" 
@@ -2179,10 +2365,10 @@ class Atlas:
             #################       
      
         print ("##### flask server is starting #####")                     
-        thread = StartFlaskDaemon()
-        thread.daemon = True
-        thread.start()       
-        url = 'https://www.agrihub.cz/o/oauth2/authorize?response_type=code&client_id='+self.client_id+'&redirect_uri=http%3A%2F%2Flocalhost:3000%2Fclient%2Fauthn%2Foauth2-liferay%2Fcallback&code_challenge='+self.code_challenge ##n4bQgYhMfWWaL-qgxVrQFaO_TxsrC4Is0V1sFbDwCgg'
+        self.flaskThread = StartFlaskDaemon()
+        self.flaskThread.daemon = True
+        self.flaskThread.start()       
+        url = 'https://www.'+self.liferayServer+'/o/oauth2/authorize?response_type=code&client_id='+self.client_id+'&redirect_uri=http%3A%2F%2Flocalhost:3000%2Fclient%2Fauthn%2Foauth2-liferay%2Fcallback&code_challenge='+self.code_challenge ##n4bQgYhMfWWaL-qgxVrQFaO_TxsrC4Is0V1sFbDwCgg'
         webbrowser.open(url, new=2)
 
     def saveIni(self):
@@ -2194,8 +2380,12 @@ class Atlas:
             except OSError:  
                 print ("vytváření adresáře selhalo")
         config = configparser.ConfigParser()
+
         config['DEFAULT']['login'] = self.Agrimail
         config['DEFAULT']['id'] = self.client_id
+        print("saveliferay" + self.liferayServer)
+        config['DEFAULT']['server'] = self.liferayServer
+        config['DEFAULT']['layman'] = self.URI
         
 
         with open(file, 'w') as configfile:
@@ -2205,6 +2395,16 @@ class Atlas:
         config = configparser.ConfigParser()
         config.read(file)
         return config   
+
+    def layerChanged(self):  
+        
+        print(iface.activeLayer())
+        if (iface.activeLayer() != None):
+            self.menu_saveLocalFile.setEnabled(True)
+        else:
+            self.menu_saveLocalFile.setEnabled(False)
+
+
     def run(self):
         """Run method that loads and starts the plugin"""
 
@@ -2222,7 +2422,8 @@ class Atlas:
 
             
             # connect to provide cleanup on closing of dockwidget
-            self.dockwidget.closingPlugin.connect(self.onClosePlugin)            
+            self.dockwidget.closingPlugin.connect(self.onClosePlugin)     
+            
             self.dockwidget.pushButton.clicked.connect(self.sendLayer)   
             self.dockwidget.pushButton_2.clicked.connect(self.loadLocalFile) 
             self.dockwidget.pushButton_3.clicked.connect(self.saveLocalFile)

BIN
QGIS_Installer/bin/Debug/atlas/__pycache__/Atlas.cpython-37.pyc


+ 71 - 13
QGIS_Installer/bin/Debug/atlas/dlg_ConnectionManager.ui

@@ -10,7 +10,7 @@
     <x>0</x>
     <y>0</y>
     <width>635</width>
-    <height>186</height>
+    <height>200</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -22,13 +22,13 @@
   <property name="minimumSize">
    <size>
     <width>635</width>
-    <height>186</height>
+    <height>200</height>
    </size>
   </property>
   <property name="maximumSize">
    <size>
     <width>635</width>
-    <height>186</height>
+    <height>200</height>
    </size>
   </property>
   <property name="windowTitle">
@@ -41,7 +41,7 @@
    <property name="geometry">
     <rect>
      <x>155</x>
-     <y>57</y>
+     <y>120</y>
      <width>351</width>
      <height>27</height>
     </rect>
@@ -54,20 +54,20 @@
    <property name="geometry">
     <rect>
      <x>20</x>
-     <y>57</y>
+     <y>120</y>
      <width>111</width>
      <height>19</height>
     </rect>
    </property>
    <property name="text">
-    <string>Agrihub ID:</string>
+    <string>Liferay ID:</string>
    </property>
   </widget>
   <widget class="QPushButton" name="pushButton_Connect">
    <property name="geometry">
     <rect>
      <x>155</x>
-     <y>97</y>
+     <y>160</y>
      <width>111</width>
      <height>27</height>
     </rect>
@@ -80,7 +80,7 @@
    <property name="geometry">
     <rect>
      <x>394</x>
-     <y>97</y>
+     <y>160</y>
      <width>111</width>
      <height>28</height>
     </rect>
@@ -93,7 +93,7 @@
    <property name="geometry">
     <rect>
      <x>279</x>
-     <y>97</y>
+     <y>160</y>
      <width>101</width>
      <height>27</height>
     </rect>
@@ -106,7 +106,7 @@
    <property name="geometry">
     <rect>
      <x>154</x>
-     <y>137</y>
+     <y>180</y>
      <width>88</width>
      <height>27</height>
     </rect>
@@ -119,13 +119,13 @@
    <property name="geometry">
     <rect>
      <x>20</x>
-     <y>22</y>
+     <y>85</y>
      <width>121</width>
      <height>19</height>
     </rect>
    </property>
    <property name="text">
-    <string>Agrihub login:</string>
+    <string>Liferay login:</string>
    </property>
   </widget>
   <widget class="QLineEdit" name="lineEdit_userName">
@@ -135,7 +135,7 @@
    <property name="geometry">
     <rect>
      <x>155</x>
-     <y>20</y>
+     <y>83</y>
      <width>351</width>
      <height>27</height>
     </rect>
@@ -144,6 +144,64 @@
     <string>@lesprojekt.cz</string>
    </property>
   </widget>
+  <widget class="QLineEdit" name="lineEdit_server">
+   <property name="enabled">
+    <bool>true</bool>
+   </property>
+   <property name="geometry">
+    <rect>
+     <x>156</x>
+     <y>45</y>
+     <width>351</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>agrihub.cz</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_APIKey_3">
+   <property name="geometry">
+    <rect>
+     <x>20</x>
+     <y>50</y>
+     <width>121</width>
+     <height>19</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Liferay server:</string>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_serverLayman">
+   <property name="enabled">
+    <bool>true</bool>
+   </property>
+   <property name="geometry">
+    <rect>
+     <x>157</x>
+     <y>7</y>
+     <width>350</width>
+     <height>27</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>http://layman.lesprojekt.cz</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_APIKey_4">
+   <property name="geometry">
+    <rect>
+     <x>20</x>
+     <y>10</y>
+     <width>121</width>
+     <height>19</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Layman server:</string>
+   </property>
+  </widget>
  </widget>
  <resources/>
  <connections/>

+ 5 - 5
QGIS_Installer/bin/Debug/atlas/dlg_addLayer.ui

@@ -37,7 +37,7 @@
   <widget class="QPushButton" name="pushButton">
    <property name="geometry">
     <rect>
-     <x>190</x>
+     <x>20</x>
      <y>360</y>
      <width>141</width>
      <height>27</height>
@@ -58,7 +58,7 @@
    </property>
    <column>
     <property name="text">
-     <string>Layer</string>
+     <string>Layers on Layman</string>
     </property>
    </column>
   </widget>
@@ -108,7 +108,7 @@
    <property name="geometry">
     <rect>
      <x>450</x>
-     <y>270</y>
+     <y>280</y>
      <width>131</width>
      <height>27</height>
     </rect>
@@ -120,7 +120,7 @@
   <widget class="QPushButton" name="pushButton_wfs">
    <property name="geometry">
     <rect>
-     <x>30</x>
+     <x>190</x>
      <y>360</y>
      <width>141</width>
      <height>27</height>
@@ -134,7 +134,7 @@
    <property name="geometry">
     <rect>
      <x>450</x>
-     <y>310</y>
+     <y>320</y>
      <width>131</width>
      <height>28</height>
     </rect>

+ 122 - 3
QGIS_Installer/bin/Debug/atlas/dlg_editMap.ui

@@ -9,7 +9,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>350</width>
+    <width>550</width>
     <height>250</height>
    </rect>
   </property>
@@ -21,13 +21,13 @@
   </property>
   <property name="minimumSize">
    <size>
-    <width>350</width>
+    <width>550</width>
     <height>250</height>
    </size>
   </property>
   <property name="maximumSize">
    <size>
-    <width>350</width>
+    <width>550</width>
     <height>250</height>
    </size>
   </property>
@@ -210,7 +210,126 @@
     <bool>true</bool>
    </property>
   </widget>
+  <widget class="QLineEdit" name="lineEdit_xmin">
+   <property name="geometry">
+    <rect>
+     <x>370</x>
+     <y>56</y>
+     <width>130</width>
+     <height>22</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_ymin">
+   <property name="geometry">
+    <rect>
+     <x>370</x>
+     <y>116</y>
+     <width>130</width>
+     <height>22</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_ymax">
+   <property name="geometry">
+    <rect>
+     <x>370</x>
+     <y>146</y>
+     <width>130</width>
+     <height>22</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_8">
+   <property name="geometry">
+    <rect>
+     <x>300</x>
+     <y>149</y>
+     <width>41</width>
+     <height>16</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>YMax:</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_7">
+   <property name="geometry">
+    <rect>
+     <x>300</x>
+     <y>89</y>
+     <width>41</width>
+     <height>16</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>XMax:</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_9">
+   <property name="geometry">
+    <rect>
+     <x>300</x>
+     <y>60</y>
+     <width>41</width>
+     <height>16</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>XMin:</string>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_10">
+   <property name="geometry">
+    <rect>
+     <x>300</x>
+     <y>29</y>
+     <width>211</width>
+     <height>16</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Extent of canvas:</string>
+   </property>
+  </widget>
+  <widget class="QLineEdit" name="lineEdit_xmax">
+   <property name="geometry">
+    <rect>
+     <x>370</x>
+     <y>86</y>
+     <width>130</width>
+     <height>22</height>
+    </rect>
+   </property>
+  </widget>
+  <widget class="QLabel" name="label_11">
+   <property name="geometry">
+    <rect>
+     <x>300</x>
+     <y>120</y>
+     <width>41</width>
+     <height>16</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>YMin:</string>
+   </property>
+  </widget>
  </widget>
+ <tabstops>
+  <tabstop>pushButton_save</tabstop>
+  <tabstop>pushButton_close</tabstop>
+  <tabstop>lineEdit_name</tabstop>
+  <tabstop>lineEdit_title</tabstop>
+  <tabstop>lineEdit_abstract</tabstop>
+  <tabstop>lineEdit_units</tabstop>
+  <tabstop>lineEdit_scale</tabstop>
+  <tabstop>lineEdit_user</tabstop>
+  <tabstop>lineEdit_xmin</tabstop>
+  <tabstop>lineEdit_xmax</tabstop>
+  <tabstop>lineEdit_ymin</tabstop>
+  <tabstop>lineEdit_ymax</tabstop>
+ </tabstops>
  <resources/>
  <connections/>
 </ui>

+ 15 - 2
QGIS_Installer/bin/Debug/atlas/dlg_userInfo.ui

@@ -9,8 +9,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>400</width>
-    <height>300</height>
+    <width>322</width>
+    <height>216</height>
    </rect>
   </property>
   <property name="windowTitle">
@@ -68,6 +68,19 @@
     <string/>
    </property>
   </widget>
+  <widget class="QPushButton" name="pushButton_logout">
+   <property name="geometry">
+    <rect>
+     <x>42</x>
+     <y>140</y>
+     <width>93</width>
+     <height>28</height>
+    </rect>
+   </property>
+   <property name="text">
+    <string>Logout</string>
+   </property>
+  </widget>
  </widget>
  <resources/>
  <connections/>

BIN
QGIS_Installer/bin/Debug/installer.zip


BIN
QGIS_Installer/obj/Debug/QGIS_Installer.csprojAssemblyReference.cache


BIN
QGIS_Installer/obj/Debug/QGIS_Installer.exe


BIN
QGIS_Installer/obj/Debug/QGIS_Installer.pdb