def initGui(self): self.setWindowTitle('Import to GeoGig') verticalLayout = QVBoxLayout() if self.repo is None: repos = repository.repos layerLabel = QLabel('Repository') verticalLayout.addWidget(layerLabel) self.repoCombo = QComboBox() self.repoCombo.addItems( ["%s - %s" % (r.group, r.title) for r in repos]) self.repoCombo.currentIndexChanged.connect(self.updateBranches) verticalLayout.addWidget(self.repoCombo) if self.layer is None: layerLabel = QLabel('Layer') verticalLayout.addWidget(layerLabel) self.layerCombo = QComboBox() layerNames = [ layer.name() for layer in vectorLayers() if layer.source().lower().split("|")[0].split(".")[-1] in ["gpkg", "geopkg"] and not isRepoLayer(layer) ] self.layerCombo.addItems(layerNames) verticalLayout.addWidget(self.layerCombo) self.branchLabel = QLabel("Branch") verticalLayout.addWidget(self.branchLabel) self.branchCombo = QComboBox() self.branches = self.repo.branches( ) if self.repo is not None else repos[0].branches() self.branchCombo.addItems(self.branches) verticalLayout.addWidget(self.branchCombo) messageLabel = QLabel('Message to describe this update') verticalLayout.addWidget(messageLabel) self.messageBox = QPlainTextEdit() verticalLayout.addWidget(self.messageBox) self.buttonBox = QDialogButtonBox(QDialogButtonBox.Cancel) self.importButton = QPushButton("Add layer") self.importButton.clicked.connect(self.importClicked) self.buttonBox.addButton(self.importButton, QDialogButtonBox.ApplyRole) self.buttonBox.rejected.connect(self.cancelPressed) verticalLayout.addWidget(self.buttonBox) self.setLayout(verticalLayout) self.resize(600, 300) self.messageBox.setFocus()
def initGui(self): self.setWindowTitle('Import to GeoGig') verticalLayout = QVBoxLayout() if self.repo is None: repos = repository.repos layerLabel = QLabel('Repository') verticalLayout.addWidget(layerLabel) self.repoCombo = QComboBox() self.repoCombo.addItems(["%s - %s" % (r.group, r.title) for r in repos]) self.repoCombo.currentIndexChanged.connect(self.updateBranches) verticalLayout.addWidget(self.repoCombo) if self.layer is None: layerLabel = QLabel('Layer') verticalLayout.addWidget(layerLabel) self.layerCombo = QComboBox() layerNames = [layer.name() for layer in vectorLayers() if layer.source().lower().split("|")[0].split(".")[-1] in["gpkg", "geopkg"] and not isRepoLayer(layer)] self.layerCombo.addItems(layerNames) verticalLayout.addWidget(self.layerCombo) self.branchLabel = QLabel("Branch") verticalLayout.addWidget(self.branchLabel) self.branchCombo = QComboBox() self.branches = self.repo.branches() if self.repo is not None else repos[0].branches() self.branchCombo.addItems(self.branches) verticalLayout.addWidget(self.branchCombo) messageLabel = QLabel('Message to describe this update') verticalLayout.addWidget(messageLabel) self.messageBox = QPlainTextEdit() verticalLayout.addWidget(self.messageBox) self.buttonBox = QDialogButtonBox(QDialogButtonBox.Cancel) self.importButton = QPushButton("Add layer") self.importButton.clicked.connect(self.importClicked) self.buttonBox.addButton(self.importButton, QDialogButtonBox.ApplyRole) self.buttonBox.rejected.connect(self.cancelPressed) verticalLayout.addWidget(self.buttonBox) self.setLayout(verticalLayout) self.resize(600, 300) self.messageBox.setFocus()
def canvasPressEvent(self, e): layer = config.iface.activeLayer() if layer is None or not isinstance(layer, QgsVectorLayer): config.iface.messageBar().pushMessage("No layer selected or the current active layer is not a valid vector layer", level = QgsMessageBar.WARNING, duration = 5) return if not layertracking.isRepoLayer(layer): config.iface.messageBar().pushMessage("The current active layer is not being tracked as part of a GeoGig repo", level = QgsMessageBar.WARNING, duration = 5) return trackedlayer = layertracking.getTrackingInfo(layer) point = self.toMapCoordinates(e.pos()) searchRadius = self.canvas().extent().width() * .01; r = QgsRectangle() r.setXMinimum(point.x() - searchRadius); r.setXMaximum(point.x() + searchRadius); r.setYMinimum(point.y() - searchRadius); r.setYMaximum(point.y() + searchRadius); r = self.toLayerCoordinates(layer, r); fit = layer.getFeatures(QgsFeatureRequest().setFilterRect(r).setFlags(QgsFeatureRequest.ExactIntersect)); fid = None try: feature = next(fit) fid = feature.id() fid = geogigFidFromGpkgFid(trackedlayer, fid) if fid is None: return except StopIteration as e: return repo = Repository(trackedlayer.repoUrl) menu = QMenu() versionsAction = QAction("Show all versions of this feature...", None) versionsAction.triggered.connect(lambda: self.versions(repo, trackedlayer.layername, fid)) menu.addAction(versionsAction) blameAction = QAction("Show authorship...", None) blameAction.triggered.connect(lambda: self.blame(repo, trackedlayer.layername, fid)) menu.addAction(blameAction) point = config.iface.mapCanvas().mapToGlobal(e.pos()) menu.exec_(point)
def addLayer(self): layers = [ layer for layer in getVectorLayers() if layer.source().lower().split("|")[0].split(".")[-1] in ["gpkg", "geopkg"] and not isRepoLayer(layer) ] if layers: dlg = ImportDialog(self, repo=self.currentRepo) dlg.exec_() if dlg.ok: #self.versionsTree.updateCurrentBranchItem() setAsRepoLayer(dlg.layer) repoWatcher.repoChanged.emit(self.currentRepo) else: QMessageBox.warning( self, 'Cannot add layer', "No suitable layers can be found in your current QGIS project.\n" "Only Geopackage layers that do not already belong to a repository can be added.", QMessageBox.Ok)
def trackLayer(layer): if isRepoLayer(layer): setAsRepoLayer(layer) else: setAsNonRepoLayer(layer)