def setupUi(self, CartogramDialog): CartogramDialog.setObjectName("CartogramDialog") CartogramDialog.resize(640, 600) self.formLayout = QtWidgets.QFormLayout(CartogramDialog) self.formLayout.setObjectName("formLayout") self.layerComboBoxLabel = QtWidgets.QLabel(CartogramDialog) self.layerComboBoxLabel.setObjectName("layerComboBoxLabel") self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, self.layerComboBoxLabel) self.layerComboBox = gui.QgsMapLayerComboBox(CartogramDialog) self.layerComboBox.setObjectName("layerComboBox") self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, self.layerComboBox) self.fieldListViewLabel = QtWidgets.QLabel(CartogramDialog) self.fieldListViewLabel.setObjectName("fieldListViewLabel") self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.fieldListViewLabel) self.fieldListView = QgsFieldListView(CartogramDialog) self.fieldListView.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection) self.fieldListView.setObjectName("fieldListView") self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.fieldListView) self.stopConditionsFrameLabel = QtWidgets.QLabel(CartogramDialog) self.stopConditionsFrameLabel.setObjectName("stopConditionsFrameLabel") self.formLayout.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.stopConditionsFrameLabel) self.stopConditionsFrame = QtWidgets.QFrame(CartogramDialog) self.stopConditionsFrame.setFrameShape(QtWidgets.QFrame.StyledPanel) self.stopConditionsFrame.setFrameShadow(QtWidgets.QFrame.Raised) self.stopConditionsFrame.setObjectName("stopConditionsFrame") self.formLayout_2 = QtWidgets.QFormLayout(self.stopConditionsFrame) self.formLayout_2.setObjectName("formLayout_2") self.iterationsSpinBoxLabel = QtWidgets.QLabel(self.stopConditionsFrame) self.iterationsSpinBoxLabel.setObjectName("iterationsSpinBoxLabel") self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.LabelRole, self.iterationsSpinBoxLabel) self.iterationsSpinBox = QtWidgets.QSpinBox(self.stopConditionsFrame) self.iterationsSpinBox.setMinimum(1) self.iterationsSpinBox.setMaximum(9999) self.iterationsSpinBox.setProperty("value", 10) self.iterationsSpinBox.setObjectName("iterationsSpinBox") self.formLayout_2.setWidget(1, QtWidgets.QFormLayout.FieldRole, self.iterationsSpinBox) self.averageErrorDoubleSpinBoxLabel = QtWidgets.QLabel(self.stopConditionsFrame) self.averageErrorDoubleSpinBoxLabel.setObjectName("averageErrorDoubleSpinBoxLabel") self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.LabelRole, self.averageErrorDoubleSpinBoxLabel) self.averageErrorDoubleSpinBox = QtWidgets.QDoubleSpinBox(self.stopConditionsFrame) self.averageErrorDoubleSpinBox.setSingleStep(0.5) self.averageErrorDoubleSpinBox.setProperty("value", 10.0) self.averageErrorDoubleSpinBox.setObjectName("averageErrorDoubleSpinBox") self.formLayout_2.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.averageErrorDoubleSpinBox) self.conditionsExplanationLabel = QtWidgets.QLabel(self.stopConditionsFrame) self.conditionsExplanationLabel.setWordWrap(True) self.conditionsExplanationLabel.setObjectName("conditionsExplanationLabel") self.formLayout_2.setWidget(0, QtWidgets.QFormLayout.SpanningRole, self.conditionsExplanationLabel) self.formLayout.setWidget(2, QtWidgets.QFormLayout.FieldRole, self.stopConditionsFrame) self.buttonBox = QtWidgets.QDialogButtonBox(CartogramDialog) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) self.buttonBox.setObjectName("buttonBox") self.formLayout.setWidget(3, QtWidgets.QFormLayout.SpanningRole, self.buttonBox) self.retranslateUi(CartogramDialog) self.buttonBox.accepted.connect(CartogramDialog.accept) # type: ignore self.buttonBox.rejected.connect(CartogramDialog.reject) # type: ignore self.layerComboBox.layerChanged['QgsMapLayer*'].connect(self.fieldListView.setLayer) # type: ignore QtCore.QMetaObject.connectSlotsByName(CartogramDialog)
def createWidget(self): self.scrollwidget = QtWidgets.QScrollArea() self.scrollwidget.setWidgetResizable(True) self.tabs = QtWidgets.QTabWidget() self.scrollwidget.setWidget(self.tabs) self.names = [ 'Settings', 'DTM', 'Slope', '2D-Approximation', 'Topologic correction', 'Editing', '3D-Modelling', 'Editing (3D)', 'Export' ] self.widgets = {} self.settings = {} self.modules = {} for idx, name in enumerate(self.names): self.widgets[name] = QtWidgets.QDialog() ls = QtWidgets.QFormLayout() # Tab-specific options if name == "Settings": desc = QtWidgets.QLabel( "Welcome to the qpals LineModeler GUI! \nThis tool will help you to detect and " "model breaklines based on a DTM and/or a point cloud using the opals module " "opalsLineModeler.\nThe process includes manual editing in QGIS (\"Editing\") " "as well as automatic dectection and modelling.\n\n" "To begin, please enter some basic information.") desc.setWordWrap(True) ls.addRow(desc) boxRun = QtWidgets.QGroupBox( "Run multiple steps automatically:") boxVL = QtWidgets.QVBoxLayout() boxRun.setLayout(boxVL) self.settings['settings'] = OrderedDict([ ('name', QtWidgets.QLineEdit()), ('inFile', QpalsDropTextbox.QpalsDropTextbox( layerlist=self.layerlist)), ('tempFolder', QpalsDropTextbox.QpalsDropTextbox()), ('outFolder', QpalsDropTextbox.QpalsDropTextbox()), ('chkDTM', QtWidgets.QCheckBox("DTM")), ('chkSlope', QtWidgets.QCheckBox("Slope")), ('chk2D', QtWidgets.QCheckBox("2D-Approximation")), ('chktopo2D', QtWidgets.QCheckBox("Topological correction")), ('chkEditing2d', QtWidgets.QLabel( "--- Manual editing of 2D-Approximations ---")), ('chk3Dmodel', QtWidgets.QCheckBox("3D-Modelling")), ('chkEditing3d', QtWidgets.QLabel("--- Manual editing of 3D-Lines ---")), ('chkExport', QtWidgets.QCheckBox("Export")), ]) for key, value in list(self.settings['settings'].items()): if isinstance(value, QpalsDropTextbox.QpalsDropTextbox): value.setMinimumContentsLength(20) value.setSizeAdjustPolicy( QtWidgets.QComboBox.AdjustToMinimumContentsLength) if key.startswith("chk"): boxVL.addWidget(value) ls.addRow(QtWidgets.QLabel("Project name"), self.settings['settings']['name']) hbox_wrap = QtWidgets.QHBoxLayout() hbox_wrap.addWidget(self.settings['settings']['inFile'], stretch=1) ls.addRow(QtWidgets.QLabel("Input file (TIFF/LAS/ODM)"), hbox_wrap) hbox_wrap = QtWidgets.QHBoxLayout() hbox_wrap.addWidget(self.settings['settings']['tempFolder'], stretch=1) self.settings['settings']['tempFolder'].setPlaceholderText( "drop folder here (will be created if not exists)") ls.addRow(QtWidgets.QLabel("Folder for temporary files"), hbox_wrap) hbox_wrap = QtWidgets.QHBoxLayout() self.settings['settings']['outFolder'].setPlaceholderText( "drop folder here (will be created if not exists)") hbox_wrap.addWidget(self.settings['settings']['outFolder'], stretch=1) ls.addRow(QtWidgets.QLabel("Folder for output files"), hbox_wrap) ls.addRow(QtWidgets.QLabel("")) boxBtnRun = QtWidgets.QPushButton("Run selected steps now") boxBtnRun.clicked.connect(lambda: self.run_step("all")) boxBtnExp = QtWidgets.QPushButton( "Export selected steps to .bat") boxBtnExp.clicked.connect(self.createBatFile) # saveBtn = QtWidgets.QPushButton("Save to project file") # saveBtn.clicked.connect(self.save) boxVL.addWidget(boxBtnRun) boxVL.addWidget(boxBtnExp) # boxVL.addWidget(saveBtn) ls.addRow(boxRun) if name == "DTM": desc = QtWidgets.QLabel( "This first step will create a digital terrain model (DTM) from your point cloud data. " "Also, a shading of your DTM " "will be created for visualisation purposes. If the input file is not an ODM, one has to be " "created for the modelling process later on.") desc.setWordWrap(True) ls.addRow(desc) impmod, impscroll = QpalsModuleBase.QpalsModuleBase.createGroupBox( "opalsImport", "opalsImport", self.project, {'outFile': 'pointcloud.odm'}, ["inFile", "outFile"]) self.modules['dtmImp'] = impmod self.widgets['dtmImp'] = impscroll ls.addRow(impscroll) dtmmod, dtmscroll = QpalsModuleBase.QpalsModuleBase.createGroupBox( "opalsGrid", "opalsGrid", self.project, { 'interpolation': 'movingPlanes', 'gridSize': '1', 'outFile': 'DTM_1m.tif' }, [ "inFile", "outFile", "neighbours", "searchRadius", "interpolation" ]) self.modules['dtmGrid'] = dtmmod self.widgets['dtmGrid'] = dtmscroll dtmmod.afterRun = self.addDtm ls.addRow(dtmscroll) shdmod, shdscroll = QpalsModuleBase.QpalsModuleBase.createGroupBox( "opalsShade", "opalsShade", self.project, { 'inFile': 'DTM_1m.tif', 'outFile': 'DTM_1m_shd.tif' }, [ "inFile", "outFile", ]) self.modules['dtmShade'] = shdmod shdmod.afterRun = self.addShd ls.addRow(shdscroll) if name == "Slope": desc = QtWidgets.QLabel( "To automatically detect breaklines, a slope map is calculated. This map uses the neighboring 9" " pixels to estimate a plane. The gradient (steepest slope) is then taken, converted to a slope" "in degrees, and assigned to the pixel.") desc.setWordWrap(True) ls.addRow(desc) gfmod, gfscroll = QpalsModuleBase.QpalsModuleBase.createGroupBox( "opalsGridFeature", "opalsGridFeature", self.project, { 'feature': 'slpDeg', 'inFile': 'DTM_1m.tif', 'outFile': 'DTM_1m_slope.tif' }, ["inFile", "outFile", "feature"]) self.modules['slope'] = gfmod ls.addRow(gfscroll) if name == "2D-Approximation": desc = QtWidgets.QLabel( "The slope map is used to detect breaklines. For this, the algorithm by Canny (1986) is used.\n" "First, the slope map is convoluted with a gaussian kernel for smoothing, then the derivative " "is calculated. The two threshold parameters represent the upper and lower values for the " "binarization of the derivative map. Edges that have at least one pixel > upper threshold will be " "followed until they have a pixel < lower threshold.") desc.setWordWrap(True) ls.addRow(desc) edgeDmod, edgeDscroll = QpalsModuleBase.QpalsModuleBase.createGroupBox( "opalsEdgeDetect", "opalsEdgeDetect", self.project, { 'threshold': '2;4', 'sigmaSmooth': '1.8', 'inFile': 'DTM_1m_slope_slpDeg.tif', 'outFile': 'detected_edges.tif' }, ["inFile", "outFile", "threshold", "sigmaSmooth"]) self.modules['edgeDetect'] = edgeDmod ls.addRow(edgeDscroll) desc = QtWidgets.QLabel( "Since the output of opalsEdgeDetect is still a raster, we need to vectorize it:" ) desc.setWordWrap(True) ls.addRow(desc) vecmod, vecscroll = QpalsModuleBase.QpalsModuleBase.createGroupBox( "opalsVectorize", "opalsVectorize", self.project, { 'inFile': 'detected_edges.tif', 'outFile': 'detected_edges.shp' }, ["inFile", "outFile"]) self.modules['vectorize'] = vecmod ls.addRow(vecscroll) if name == "Topologic correction": desc = QtWidgets.QLabel( "Vectorized binary rasters usually need some topological cleaning. Here, this is done in three steps: \n" "1) Find the longest line and remove all lines < 10m\n" "2) Merge lines iteratively\n" "3) Clean up") desc.setWordWrap(True) ls.addRow(desc) lt1mod, lt1scroll = QpalsModuleBase.QpalsModuleBase.createGroupBox( "opalsLineTopology", "opalsLineTopology (1)", self.project, { 'method': 'longest', 'minLength': '10', 'snapRadius': '0', 'maxTol': '0.5', 'maxAngleDev': '75;15', 'avgDist': '3', 'inFile': 'detected_edges.shp', 'outFile': 'edges1.shp' }, ["inFile", "outFile", "method", "minLength", "maxTol"]) self.modules['lt1'] = lt1mod ls.addRow(lt1scroll) lt2mod, lt2scroll = QpalsModuleBase.QpalsModuleBase.createGroupBox( "opalsLineTopology", "opalsLineTopology (2)", self.project, { 'method': 'merge', 'minLength': '10', 'snapRadius': '3', 'maxTol': '0', 'maxAngleDev': '150;15', 'avgDist': '3', 'merge.minWeight': '0.75', 'merge.relWeightLead': '0', 'merge.maxIter': '10', 'merge.revertDist': '5', 'merge.revertInterval': '1', 'merge.searchGeneration': '4', 'merge.preventIntersection': '1', 'inFile': 'edges1.shp', 'outFile': 'edges2.shp' }, [ "inFile", "outFile", "method", "maxAngleDev", "snapRadius", "merge\..*" ]) lt2scroll.setFixedHeight(lt2scroll.height() - 200) self.modules['lt2'] = lt2mod ls.addRow(lt2scroll) lt3mod, lt3scroll = QpalsModuleBase.QpalsModuleBase.createGroupBox( "opalsLineTopology", "opalsLineTopology (3)", self.project, { 'method': 'longest', 'minLength': '25', 'snapRadius': '0', 'maxTol': '0', 'maxAngleDev': '90;15', 'avgDist': '3', 'inFile': 'edges2.shp', 'outFile': 'edges3.shp' }, ["inFile", "outFile", "method", "minLength", "maxTol"]) self.modules['lt3'] = lt3mod ls.addRow(lt3scroll) lt3mod.afterRun = self.add2DLines if name == "Editing": desc = QtWidgets.QLabel( "Please start editing the 2D approximations that have been loaded into qgis. Here are some tools " "that might help:") desc.setWordWrap(True) ls.addRow(desc) box1 = QtWidgets.QGroupBox("QuickLineModeller") from . import QpalsQuickLM self.quicklm = QpalsQuickLM.QpalsQuickLM( project=self.project, layerlist=self.layerlist, iface=self.iface) box1.setLayout(self.quicklm.fl) ls.addRow(box1) box2 = QtWidgets.QGroupBox("qpalsSection") from . import QpalsSection self.section = QpalsSection.QpalsSection( project=self.project, layerlist=self.layerlist, iface=self.iface) self.section.createWidget() box2.setLayout(self.section.ls) box2.setSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) ls.addRow(box2) if name == "3D-Modelling": desc = QtWidgets.QLabel( "The 2D approximations can now be used to model 3D breaklines in the pointcloud/the DTM." ) desc.setWordWrap(True) ls.addRow(desc) lmmod, lmscroll = QpalsModuleBase.QpalsModuleBase.createGroupBox( "opalsLineModeler", "opalsLineModeler", self.project, { #"filter": "Class[Ground]", "approxFile": "edges3.shp", "outFile": "modelled_lines.shp" }, [ "inFile", "approxFile", "outFile", "filter", "patchLength", "patchWidth", "overlap", "angle", "minLength", "pointCount", "sigmaApriori" ]) self.modules['lm'] = lmmod ls.addRow(lmscroll) lmmod.afterRun = self.add3DLines if name == "Editing (3D)": desc = QtWidgets.QLabel( "Before exporting the final product, there are a few tools to check the " "quality of the result. This includes a topological check as well as a search" "for points that have a big height difference to the DTM - and might be erraneous." ) desc.setWordWrap(True) ls.addRow(desc) self.startQualityCheckBtn = QtWidgets.QPushButton( "Start calculation") self.startQualityCheckBtn.clicked.connect( self.runProblemSearchAsync) self.QualityCheckbar = QtWidgets.QProgressBar() self.QualityCheckDtm = QgsMapLayerComboBox() self.QualityCheckDtm.setFilters( QgsMapLayerProxyModel.RasterLayer) self.QualityCheckThreshold = QtWidgets.QLineEdit("0.5") ls.addRow( QtWidgets.QLabel("DTM Layer to compare heights with"), self.QualityCheckDtm) ls.addRow( QtWidgets.QLabel("Set height difference threshold [m]"), self.QualityCheckThreshold) hb = QtWidgets.QHBoxLayout() hb.addWidget(self.QualityCheckbar) hb.addWidget(self.startQualityCheckBtn) ls.addRow(hb) line = QtWidgets.QFrame() line.setFrameShape(QtWidgets.QFrame.HLine) line.setFrameShadow(QtWidgets.QFrame.Sunken) ls.addRow(line) self.editingls = ls self.edit3d_linelayerbox = QgsMapLayerComboBox() self.edit3d_linelayerbox.setFilters( QgsMapLayerProxyModel.LineLayer) self.edit3d_pointlayerbox = QgsMapLayerComboBox() self.edit3d_pointlayerbox.setFilters( QgsMapLayerProxyModel.PointLayer) self.edit3d_dtmlayerbox = QgsMapLayerComboBox() self.edit3d_dtmlayerbox.setFilters( QgsMapLayerProxyModel.RasterLayer) self.edit3d_pointlayerbox.currentIndexChanged.connect( self.nodeLayerChanged) self.edit3d_currPointId = QSpinBox() self.edit3d_currPointId.setMinimum(0) self.edit3d_currPointId.valueChanged.connect( self.showProblemPoint) ls.addRow("Select Line Layer:", self.edit3d_linelayerbox) ls.addRow("Select Problem Point layer:", self.edit3d_pointlayerbox) self.selectNodeBtn = QtWidgets.QPushButton("Next point") self.selectNodeBtn.clicked.connect( lambda: self.edit3d_currPointId.setValue( self.edit3d_currPointId.value() + 1)) self.selectPrevNodeBtn = QtWidgets.QPushButton("Prev point") self.selectPrevNodeBtn.clicked.connect( lambda: self.edit3d_currPointId.setValue( self.edit3d_currPointId.value() - 1)) self.edit3d_countLabel = QtWidgets.QLabel() self.snapToDtmBtn = QtWidgets.QPushButton("Snap to:") self.snapToDtmBtn.clicked.connect(self.snapToDtm) self.remonveNodeBtn = QtWidgets.QPushButton("Remove") self.remonveNodeBtn.clicked.connect(self.removeNode) nextBox = QtWidgets.QHBoxLayout() nextBox.addWidget(QtWidgets.QLabel("Current point:")) nextBox.addWidget(self.edit3d_currPointId) nextBox.addWidget(QtWidgets.QLabel("/")) nextBox.addWidget(self.edit3d_countLabel) nextBox.addStretch() nextBox.addWidget(self.snapToDtmBtn) nextBox.addWidget(self.edit3d_dtmlayerbox) nextBox.addWidget(self.remonveNodeBtn) nextBox.addWidget(self.selectPrevNodeBtn) nextBox.addWidget(self.selectNodeBtn) ls.addRow(nextBox) self.nodeLayerChanged() if name == "Export": exp2mod, exp2scroll = QpalsModuleBase.QpalsModuleBase.createGroupBox( "opalsTranslate", "opalsTranslate", self.project, { 'oformat': 'shp', 'inFile': 'modelled_lines.shp', 'outFile': 'STRULI3D.shp', }, ["inFile", "outFile"]) self.modules['exp'] = exp2mod ls.addRow(exp2scroll) vl = QtWidgets.QVBoxLayout() vl.addLayout(ls, 1) navbar = QtWidgets.QHBoxLayout() next = QtWidgets.QPushButton("Next step >") next.clicked.connect(self.switchToNextTab) prev = QtWidgets.QPushButton("< Previous step") prev.clicked.connect(self.switchToPrevTab) runcurr = QtWidgets.QPushButton( "Run this step (all modules above)") runcurr.clicked.connect(lambda: self.run_step(None)) if idx > 0: navbar.addWidget(prev) navbar.addStretch() if name in [ "DTM", "Slope", "2D-Approximation", "Topologic correction", "3D-Modelling", "Export" ]: navbar.addWidget(runcurr) navbar.addStretch() if idx < len(self.names): navbar.addWidget(next) vl.addLayout(navbar) self.widgets[name].setLayout(vl) self.tabs.addTab(self.widgets[name], name) # set up connections self.tabs.currentChanged.connect(self.updateTabs) return self.scrollwidget
def setupUi(self, QgisCloudPlugin): QgisCloudPlugin.setObjectName("QgisCloudPlugin") QgisCloudPlugin.resize(501, 703) QgisCloudPlugin.setLocale( QtCore.QLocale(QtCore.QLocale.English, QtCore.QLocale.UnitedStates)) self.dockWidgetContents = QtWidgets.QWidget() self.dockWidgetContents.setObjectName("dockWidgetContents") self.gridLayout_3 = QtWidgets.QGridLayout(self.dockWidgetContents) self.gridLayout_3.setObjectName("gridLayout_3") self.tabWidget = QtWidgets.QTabWidget(self.dockWidgetContents) self.tabWidget.setObjectName("tabWidget") self.mapTab = QtWidgets.QWidget() self.mapTab.setObjectName("mapTab") self.gridLayout_4 = QtWidgets.QGridLayout(self.mapTab) self.gridLayout_4.setObjectName("gridLayout_4") self.logo_2 = QtWidgets.QLabel(self.mapTab) self.logo_2.setAutoFillBackground(False) self.logo_2.setPixmap(QtGui.QPixmap(":/plugins/qgiscloud/logo.png")) self.logo_2.setScaledContents(False) self.logo_2.setAlignment(QtCore.Qt.AlignCenter) self.logo_2.setObjectName("logo_2") self.gridLayout_4.addWidget(self.logo_2, 0, 0, 1, 1) self.btnBackgroundLayer = QtWidgets.QToolButton(self.mapTab) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.btnBackgroundLayer.sizePolicy().hasHeightForWidth()) self.btnBackgroundLayer.setSizePolicy(sizePolicy) self.btnBackgroundLayer.setPopupMode( QtWidgets.QToolButton.InstantPopup) self.btnBackgroundLayer.setToolButtonStyle( QtCore.Qt.ToolButtonTextOnly) self.btnBackgroundLayer.setArrowType(QtCore.Qt.NoArrow) self.btnBackgroundLayer.setObjectName("btnBackgroundLayer") self.gridLayout_4.addWidget(self.btnBackgroundLayer, 1, 0, 1, 1) self.labelOpenLayersPlugin = QtWidgets.QLabel(self.mapTab) self.labelOpenLayersPlugin.setWordWrap(True) self.labelOpenLayersPlugin.setObjectName("labelOpenLayersPlugin") self.gridLayout_4.addWidget(self.labelOpenLayersPlugin, 2, 0, 1, 1) self.line_2 = QtWidgets.QFrame(self.mapTab) self.line_2.setFrameShape(QtWidgets.QFrame.HLine) self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_2.setObjectName("line_2") self.gridLayout_4.addWidget(self.line_2, 3, 0, 1, 1) self.btnPublishMap = QtWidgets.QPushButton(self.mapTab) self.btnPublishMap.setObjectName("btnPublishMap") self.gridLayout_4.addWidget(self.btnPublishMap, 4, 0, 1, 1) self.line_3 = QtWidgets.QFrame(self.mapTab) self.line_3.setFrameShape(QtWidgets.QFrame.HLine) self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_3.setObjectName("line_3") self.gridLayout_4.addWidget(self.line_3, 5, 0, 1, 1) self.widgetServices = QtWidgets.QWidget(self.mapTab) self.widgetServices.setObjectName("widgetServices") self.gridLayout = QtWidgets.QGridLayout(self.widgetServices) self.gridLayout.setObjectName("gridLayout") self.label = QtWidgets.QLabel(self.widgetServices) self.label.setObjectName("label") self.gridLayout.addWidget(self.label, 1, 0, 1, 1) self.lblWMS = QtWidgets.QLabel(self.widgetServices) self.lblWMS.setOpenExternalLinks(True) self.lblWMS.setObjectName("lblWMS") self.gridLayout.addWidget(self.lblWMS, 1, 1, 1, 1) self.label_5 = QtWidgets.QLabel(self.widgetServices) self.label_5.setObjectName("label_5") self.gridLayout.addWidget(self.label_5, 2, 0, 1, 1) self.lblMaps = QtWidgets.QLabel(self.widgetServices) self.lblMaps.setOpenExternalLinks(True) self.lblMaps.setObjectName("lblMaps") self.gridLayout.addWidget(self.lblMaps, 2, 1, 1, 1) self.label_8 = QtWidgets.QLabel(self.widgetServices) self.label_8.setObjectName("label_8") self.gridLayout.addWidget(self.label_8, 3, 0, 1, 1) self.lblMobileMap_2 = QtWidgets.QLabel(self.widgetServices) self.lblMobileMap_2.setEnabled(True) self.lblMobileMap_2.setOpenExternalLinks(True) self.lblMobileMap_2.setObjectName("lblMobileMap_2") self.gridLayout.addWidget(self.lblMobileMap_2, 3, 1, 1, 1) self.label_3 = QtWidgets.QLabel(self.widgetServices) self.label_3.setObjectName("label_3") self.gridLayout.addWidget(self.label_3, 0, 0, 1, 1) self.lblWebmap = QtWidgets.QLabel(self.widgetServices) self.lblWebmap.setOpenExternalLinks(True) self.lblWebmap.setObjectName("lblWebmap") self.gridLayout.addWidget(self.lblWebmap, 0, 1, 1, 1) self.gridLayout_4.addWidget(self.widgetServices, 6, 0, 1, 1) spacerItem = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Fixed) self.gridLayout_4.addItem(spacerItem, 7, 0, 1, 1) self.frame = QtWidgets.QFrame(self.mapTab) self.frame.setEnabled(True) self.frame.setFrameShape(QtWidgets.QFrame.NoFrame) self.frame.setFrameShadow(QtWidgets.QFrame.Raised) self.frame.setLineWidth(1) self.frame.setObjectName("frame") self.gridLayout_6 = QtWidgets.QGridLayout(self.frame) self.gridLayout_6.setObjectName("gridLayout_6") self.widgetMaps = QtWidgets.QWidget(self.frame) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.widgetMaps.sizePolicy().hasHeightForWidth()) self.widgetMaps.setSizePolicy(sizePolicy) self.widgetMaps.setObjectName("widgetMaps") self.gridLayout_2 = QtWidgets.QGridLayout(self.widgetMaps) self.gridLayout_2.setObjectName("gridLayout_2") self.tabMaps = QtWidgets.QListWidget(self.widgetMaps) self.tabMaps.setObjectName("tabMaps") self.gridLayout_2.addWidget(self.tabMaps, 1, 0, 1, 4) self.btnMapDelete = QtWidgets.QPushButton(self.widgetMaps) self.btnMapDelete.setEnabled(False) self.btnMapDelete.setObjectName("btnMapDelete") self.gridLayout_2.addWidget(self.btnMapDelete, 2, 2, 1, 1) self.lblMaps_3 = QtWidgets.QLabel(self.widgetMaps) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.lblMaps_3.setFont(font) self.lblMaps_3.setObjectName("lblMaps_3") self.gridLayout_2.addWidget(self.lblMaps_3, 0, 0, 1, 1) spacerItem1 = QtWidgets.QSpacerItem(145, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.gridLayout_2.addItem(spacerItem1, 2, 3, 1, 1) self.btnMapLoad = QtWidgets.QPushButton(self.widgetMaps) self.btnMapLoad.setObjectName("btnMapLoad") self.gridLayout_2.addWidget(self.btnMapLoad, 2, 0, 1, 1) self.btnMapEdit = QtWidgets.QPushButton(self.widgetMaps) self.btnMapEdit.setObjectName("btnMapEdit") self.gridLayout_2.addWidget(self.btnMapEdit, 2, 1, 1, 1) self.gridLayout_6.addWidget(self.widgetMaps, 0, 0, 1, 1) self.gridLayout_4.addWidget(self.frame, 8, 0, 1, 1) self.tabWidget.addTab(self.mapTab, "") self.uploadTab = QtWidgets.QWidget() self.uploadTab.setEnabled(True) self.uploadTab.setObjectName("uploadTab") self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.uploadTab) self.verticalLayout_6.setObjectName("verticalLayout_6") self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.label_10 = QtWidgets.QLabel(self.uploadTab) self.label_10.setObjectName("label_10") self.horizontalLayout_3.addWidget(self.label_10) self.cbUploadDatabase = QtWidgets.QComboBox(self.uploadTab) self.cbUploadDatabase.setObjectName("cbUploadDatabase") self.horizontalLayout_3.addWidget(self.cbUploadDatabase) self.verticalLayout_6.addLayout(self.horizontalLayout_3) self.lblDbSizeUpload = QtWidgets.QLabel(self.uploadTab) self.lblDbSizeUpload.setText("") self.lblDbSizeUpload.setObjectName("lblDbSizeUpload") self.verticalLayout_6.addWidget(self.lblDbSizeUpload) self.tblLocalLayers = QtWidgets.QTableWidget(self.uploadTab) self.tblLocalLayers.setSelectionBehavior( QtWidgets.QAbstractItemView.SelectRows) self.tblLocalLayers.setObjectName("tblLocalLayers") self.tblLocalLayers.setColumnCount(0) self.tblLocalLayers.setRowCount(0) self.tblLocalLayers.horizontalHeader().setStretchLastSection(True) self.tblLocalLayers.verticalHeader().setVisible(False) self.verticalLayout_6.addWidget(self.tblLocalLayers) self.horizontalLayout_7 = QtWidgets.QHBoxLayout() self.horizontalLayout_7.setObjectName("horizontalLayout_7") spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_7.addItem(spacerItem2) self.btnRefreshLocalLayers = QtWidgets.QPushButton(self.uploadTab) self.btnRefreshLocalLayers.setObjectName("btnRefreshLocalLayers") self.horizontalLayout_7.addWidget(self.btnRefreshLocalLayers) self.verticalLayout_6.addLayout(self.horizontalLayout_7) self.btnUploadData = QtWidgets.QPushButton(self.uploadTab) self.btnUploadData.setObjectName("btnUploadData") self.verticalLayout_6.addWidget(self.btnUploadData) self.progressWidget = QtWidgets.QWidget(self.uploadTab) self.progressWidget.setObjectName("progressWidget") self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.progressWidget) self.horizontalLayout_6.setObjectName("horizontalLayout_6") self.spinner = Spinner(self.progressWidget) self.spinner.setObjectName("spinner") self.horizontalLayout_6.addWidget(self.spinner) self.lblProgress = QtWidgets.QLabel(self.progressWidget) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.lblProgress.sizePolicy().hasHeightForWidth()) self.lblProgress.setSizePolicy(sizePolicy) self.lblProgress.setText("") self.lblProgress.setObjectName("lblProgress") self.horizontalLayout_6.addWidget(self.lblProgress) self.verticalLayout_6.addWidget(self.progressWidget) self.tabWidget.addTab(self.uploadTab, "") self.accountTab = QtWidgets.QWidget() self.accountTab.setObjectName("accountTab") self.gridLayout_5 = QtWidgets.QGridLayout(self.accountTab) self.gridLayout_5.setObjectName("gridLayout_5") self.horizontalLayout_4 = QtWidgets.QHBoxLayout() self.horizontalLayout_4.setObjectName("horizontalLayout_4") self.label_2 = QtWidgets.QLabel(self.accountTab) self.label_2.setObjectName("label_2") self.horizontalLayout_4.addWidget(self.label_2) self.editServer = QtWidgets.QLineEdit(self.accountTab) self.editServer.setEnabled(True) self.editServer.setObjectName("editServer") self.horizontalLayout_4.addWidget(self.editServer) self.resetUrlBtn = QtWidgets.QToolButton(self.accountTab) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(":/plugins/qgiscloud/icon.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) self.resetUrlBtn.setIcon(icon) self.resetUrlBtn.setObjectName("resetUrlBtn") self.horizontalLayout_4.addWidget(self.resetUrlBtn) self.gridLayout_5.addLayout(self.horizontalLayout_4, 0, 0, 1, 1) self.horizontalLayout_5 = QtWidgets.QHBoxLayout() self.horizontalLayout_5.setObjectName("horizontalLayout_5") self.btnLogin = QtWidgets.QPushButton(self.accountTab) self.btnLogin.setObjectName("btnLogin") self.horizontalLayout_5.addWidget(self.btnLogin) self.lblSignup = QtWidgets.QLabel(self.accountTab) self.lblSignup.setAlignment(QtCore.Qt.AlignCenter) self.lblSignup.setOpenExternalLinks(True) self.lblSignup.setObjectName("lblSignup") self.horizontalLayout_5.addWidget(self.lblSignup) self.lblLoginStatus = QtWidgets.QLabel(self.accountTab) self.lblLoginStatus.setObjectName("lblLoginStatus") self.horizontalLayout_5.addWidget(self.lblLoginStatus) spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_5.addItem(spacerItem3) self.btnLogout = QtWidgets.QPushButton(self.accountTab) self.btnLogout.setObjectName("btnLogout") self.horizontalLayout_5.addWidget(self.btnLogout) self.gridLayout_5.addLayout(self.horizontalLayout_5, 1, 0, 1, 1) self.widgetDatabases = QtWidgets.QWidget(self.accountTab) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.widgetDatabases.sizePolicy().hasHeightForWidth()) self.widgetDatabases.setSizePolicy(sizePolicy) self.widgetDatabases.setObjectName("widgetDatabases") self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.widgetDatabases) self.verticalLayout_3.setContentsMargins(0, 0, 0, 0) self.verticalLayout_3.setObjectName("verticalLayout_3") self.line = QtWidgets.QFrame(self.widgetDatabases) self.line.setFrameShape(QtWidgets.QFrame.HLine) self.line.setFrameShadow(QtWidgets.QFrame.Sunken) self.line.setObjectName("line") self.verticalLayout_3.addWidget(self.line) self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label_29 = QtWidgets.QLabel(self.widgetDatabases) font = QtGui.QFont() font.setBold(True) font.setWeight(75) self.label_29.setFont(font) self.label_29.setObjectName("label_29") self.horizontalLayout_2.addWidget(self.label_29) self.lblDbSize = QtWidgets.QLabel(self.widgetDatabases) self.lblDbSize.setText("") self.lblDbSize.setObjectName("lblDbSize") self.horizontalLayout_2.addWidget(self.lblDbSize) self.verticalLayout_3.addLayout(self.horizontalLayout_2) self.tabDatabases = QtWidgets.QListWidget(self.widgetDatabases) self.tabDatabases.setSelectionBehavior( QtWidgets.QAbstractItemView.SelectRows) self.tabDatabases.setObjectName("tabDatabases") self.verticalLayout_3.addWidget(self.tabDatabases) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.btnDbCreate = QtWidgets.QPushButton(self.widgetDatabases) self.btnDbCreate.setObjectName("btnDbCreate") self.horizontalLayout.addWidget(self.btnDbCreate) self.btnDbDelete = QtWidgets.QPushButton(self.widgetDatabases) self.btnDbDelete.setEnabled(False) self.btnDbDelete.setObjectName("btnDbDelete") self.horizontalLayout.addWidget(self.btnDbDelete) spacerItem4 = QtWidgets.QSpacerItem(37, 17, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem4) self.btnDbRefresh = QtWidgets.QPushButton(self.widgetDatabases) self.btnDbRefresh.setObjectName("btnDbRefresh") self.horizontalLayout.addWidget(self.btnDbRefresh) self.verticalLayout_3.addLayout(self.horizontalLayout) self.gridLayout_5.addWidget(self.widgetDatabases, 2, 0, 1, 1) self.line_4 = QtWidgets.QFrame(self.accountTab) self.line_4.setFrameShape(QtWidgets.QFrame.HLine) self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_4.setObjectName("line_4") self.gridLayout_5.addWidget(self.line_4, 3, 0, 1, 1) self.tabWidget.addTab(self.accountTab, "") self.aboutTab = QtWidgets.QWidget() self.aboutTab.setObjectName("aboutTab") self.verticalLayout = QtWidgets.QVBoxLayout(self.aboutTab) self.verticalLayout.setObjectName("verticalLayout") self.logo = QtWidgets.QLabel(self.aboutTab) self.logo.setAutoFillBackground(False) self.logo.setPixmap(QtGui.QPixmap(":/plugins/qgiscloud/logo.png")) self.logo.setScaledContents(False) self.logo.setAlignment(QtCore.Qt.AlignCenter) self.logo.setObjectName("logo") self.verticalLayout.addWidget(self.logo) self.horizontalLayout_8 = QtWidgets.QHBoxLayout() self.horizontalLayout_8.setObjectName("horizontalLayout_8") self.label_6 = QtWidgets.QLabel(self.aboutTab) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.label_6.sizePolicy().hasHeightForWidth()) self.label_6.setSizePolicy(sizePolicy) self.label_6.setObjectName("label_6") self.horizontalLayout_8.addWidget(self.label_6) self.lblVersionPlugin = QtWidgets.QLabel(self.aboutTab) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.lblVersionPlugin.sizePolicy().hasHeightForWidth()) self.lblVersionPlugin.setSizePolicy(sizePolicy) self.lblVersionPlugin.setText("") self.lblVersionPlugin.setObjectName("lblVersionPlugin") self.horizontalLayout_8.addWidget(self.lblVersionPlugin) self.verticalLayout.addLayout(self.horizontalLayout_8) self.aboutText = QtWidgets.QTextEdit(self.aboutTab) self.aboutText.setObjectName("aboutText") self.verticalLayout.addWidget(self.aboutText) self.tabWidget.addTab(self.aboutTab, "") self.gridLayout_3.addWidget(self.tabWidget, 1, 0, 1, 1) QgisCloudPlugin.setWidget(self.dockWidgetContents) self.label_2.setBuddy(self.editServer) self.retranslateUi(QgisCloudPlugin) self.tabWidget.setCurrentIndex(2) QtCore.QMetaObject.connectSlotsByName(QgisCloudPlugin)