Esempio n. 1
0
    def initGui(self):
        self.workerExt = NGQManagerClient()
        self.workerExt.commandResived.connect(self.tryProcessCommand)

        self._iface.projectRead.connect(self.workerExt.setProjectFile)
        self._iface.newProjectCreated.connect(self.workerExt.setProjectFile)
        self.workerExt.setProjectFile()

        self._iface.mapCanvas().layersChanged.connect(self.updateLayersHandle)

        self.actionRun = QtGui.QAction("Select object",
                                       self._iface.mainWindow())
        self.actionRun.setIcon(
            QtGui.QIcon(":/plugins/ipcplugin/icons/info.png"))
        self.actionRun.setEnabled(False)
        self.actionSettings = QtGui.QAction('Settings',
                                            self._iface.mainWindow())
        self.actionSettings.setIcon(
            QtGui.QIcon(':/plugins/ipcplugin/icons/settings.png'))

        # self._iface.addPluginToMenu(self.getPluginName(), self.actionSettings)
        self._iface.addToolBarIcon(self.actionRun)

        self.actionRun.triggered.connect(self.run)
        self.actionSettings.triggered.connect(self.showSettings)

        self.mapTool = IdentifyTool(self._iface)
        self.mapTool.identified.connect(self.identifyResultProcess)
        self.mapTool.avalableChanged.connect(self.actionRun.setEnabled)

        self.updateLayersHandle()
Esempio n. 2
0
    def initGui(self):
        self.workerExt = NGQManagerClient()
        self.workerExt.commandResived.connect(self.tryProcessCommand)

        self._iface.projectRead.connect(
            self.workerExt.setProjectFile
        )
        self._iface.newProjectCreated.connect(
            self.workerExt.setProjectFile
        )
        self.workerExt.setProjectFile()

        self._iface.mapCanvas().layersChanged.connect(self.updateLayersHandle)

        self.actionRun = QtGui.QAction("Select object", self._iface.mainWindow())
        self.actionRun.setIcon(QtGui.QIcon(":/plugins/ipcplugin/icons/info.png"))
        self.actionRun.setEnabled(False)
        self.actionSettings = QtGui.QAction('Settings', self._iface.mainWindow())
        self.actionSettings.setIcon(QtGui.QIcon(':/plugins/ipcplugin/icons/settings.png'))

        # self._iface.addPluginToMenu(self.getPluginName(), self.actionSettings)
        self._iface.addToolBarIcon(self.actionRun)

        self.actionRun.triggered.connect(self.run)
        self.actionSettings.triggered.connect(self.showSettings)

        self.mapTool = IdentifyTool(self._iface)
        self.mapTool.identified.connect(self.identifyResultProcess)
        self.mapTool.avalableChanged.connect(self.actionRun.setEnabled)

        self.updateLayersHandle()
Esempio n. 3
0
class IPCPlugin(Plugin):
    def __init__(self, iface):
        super(IPCPlugin, self).__init__(iface, "IPC Plugin")
        self.scaleFactor = 100000

    def initGui(self):
        self.workerExt = NGQManagerClient()
        self.workerExt.commandResived.connect(self.tryProcessCommand)

        self._iface.projectRead.connect(
            self.workerExt.setProjectFile
        )
        self._iface.newProjectCreated.connect(
            self.workerExt.setProjectFile
        )
        self.workerExt.setProjectFile()

        self._iface.mapCanvas().layersChanged.connect(self.updateLayersHandle)

        self.actionRun = QtGui.QAction("Select object", self._iface.mainWindow())
        self.actionRun.setIcon(QtGui.QIcon(":/plugins/ipcplugin/icons/info.png"))
        self.actionRun.setEnabled(False)
        self.actionSettings = QtGui.QAction('Settings', self._iface.mainWindow())
        self.actionSettings.setIcon(QtGui.QIcon(':/plugins/ipcplugin/icons/settings.png'))

        # self._iface.addPluginToMenu(self.getPluginName(), self.actionSettings)
        self._iface.addToolBarIcon(self.actionRun)

        self.actionRun.triggered.connect(self.run)
        self.actionSettings.triggered.connect(self.showSettings)

        self.mapTool = IdentifyTool(self._iface)
        self.mapTool.identified.connect(self.identifyResultProcess)
        self.mapTool.avalableChanged.connect(self.actionRun.setEnabled)

        self.updateLayersHandle()

    def unload(self):
        self._iface.mapCanvas().layersChanged.disconnect(self.updateLayersHandle)

        self._iface.removeToolBarIcon(self.actionRun)
        # self.iface.removePluginMenu(self.getPluginName(), self.actionSettings)

        if self._iface.mapCanvas().mapTool() == self.mapTool:
            self.mapTool.disconnectAll()
            self._iface.mapCanvas().unsetMapTool(self.mapTool)

        self.workerExt.disconnect()
        self.workerExt = None
    # def getCSLayers(self):
    #     csLayerName = getCSLayerName()
    #     return QgsMapLayerRegistry.instance().mapLayersByName(csLayerName)

    # def getRZLayers(self):
    #     rzLayerName = getRZLayerName()
    #     return QgsMapLayerRegistry.instance().mapLayersByName(rzLayerName)

    def getTargetLayersForIdentification(self):
        # layers = []
        # layers.extend(
        #     self.getCSLayers()
        # )
        # layers.extend(
        #     self.getRZLayers()
        # )

        # layers = [layer for layer in layers if layer.type() == layer.VectorLayer]
        layers = QgsMapLayerRegistry.instance().mapLayers().values()
        layers = [layer for layer in layers if layer.type() == layer.VectorLayer]
        # layers = [layer for layer in layers if layer.geometryType() == QGis.Point]
        return layers

    def updateLayersHandle(self):
        targetLayers = self.getTargetLayersForIdentification()
        self.mapTool.setLayers(targetLayers)

    def tryProcessCommand(self, command):
        Plugin().plPrint("tryProcessCommand: " + str(command))

        if command.get("name") == u'activate':
            self.activateMainWindow()
        elif command.get("name") == u'position':
            self.zoomTo(command.get("args"))
        else:
            Plugin().plPrint("Warnning: Unknown command: " + unicode(command.get("name")))

    def getTargetLayersForPosition(self):
        layers = QgsMapLayerRegistry.instance().mapLayers().values()
        layers = [layer for layer in layers if layer.type() == layer.VectorLayer]
        return layers

    def zoomTo(self, args):
        Plugin().plPrint("Zoom to object: " + str(args))

        expr = " and ".join(['"%s" = \'%s\'' % (unicode(k), unicode(v)) for k, v in args.items()])
        Plugin().plPrint("expr: " + expr)
        expr = QgsExpression(expr)
        req = QgsFeatureRequest(expr)

        qgsFeaturesCount = 0
        qgsFeatures = []
        for targetLayer in self.getTargetLayersForPosition():
            Plugin().plPrint("Searche in " + targetLayer.name() + " layer")
            qgsFeatureIterator = targetLayer.getFeatures(req)
            for qgsFeature in qgsFeatureIterator:
                qgsFeatures.append([qgsFeature, targetLayer])
                qgsFeaturesCount += 1

            Plugin().plPrint("qgsFeatures: " + str(qgsFeatures))

        if qgsFeaturesCount == 0:
            self.showMessageForUser("No object is found!", QgsMessageBar.WARNING)
            Plugin().plPrint("There is no feature with args %s" % str(args), QgsMessageLog.WARNING)
        elif qgsFeaturesCount == 1:
            self.zoom2feature(
                qgsFeatures[0][1],
                qgsFeatures[0][0]
            )
        else:
            self.showMessageForUser("Found more then one object!", QgsMessageBar.WARNING)
            Plugin().plPrint("There are %d features with %s" % (qgsFeaturesCount, args,), QgsMessageLog.WARNING)
            self.zoom2feature(
                qgsFeatures[0][1],
                qgsFeatures[0][0]
            )

        self.activateMainWindow()

    def zoom2feature(self, qgsLayer, qgsFeature):
        qgsLayer.setSelectedFeatures([qgsFeature.id()])

        self._iface.mapCanvas().zoomToSelected(qgsLayer)

        if self._iface.mapCanvas().scale() > self.scaleFactor:
            self._iface.mapCanvas().zoomScale(self.scaleFactor)

    def activateMainWindow(self):

        # self._iface.mainWindow().setWindowState(
        #     self._iface.mainWindow().windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive
        # )
        # setWindowFlags(Qt::WindowStaysOnTopHint);

        # self._iface.mainWindow().activateWindow()
        # self._iface.mainWindow().raise_()
        window = self._iface.mainWindow()
        window.showMinimized()
        window.showMaximized()

    def run(self):
        self._iface.mapCanvas().setMapTool(self.mapTool)

    def showSettings(self):
        # dlg = SettingsDialog(self._iface.mainWindow())
        # dlg.exec_()
        # self.updateLayersHandle()
        pass

    def identifyResultProcess(self, identifyResults):
        Plugin().plPrint("Identification results: " + str(identifyResults))

        guids = []
        layers = []
        for result in identifyResults:
            try:
                guid = result.mFeature.attribute(u"GUID")
                guids.append(guid)
                layers.append(result.mLayer.name())
            except KeyError:
                pass

        guidsCount = len(guids)

        if guidsCount == 0:
            self.showMessageForUser("No object is identified!", QgsMessageBar.WARNING, 0)
            Plugin().plPrint("There is no identifyed features", QgsMessageLog.WARNING)
        elif guidsCount == 1:
            self.getActionMenu(guids[0]).exec_(QtGui.QCursor.pos())
        else:
            resultsView = QtGui.QListWidget()
            resultsView.setWindowTitle("Identification results")
            resultsView.setAlternatingRowColors(True)
            resultsView.setResizeMode(QtGui.QListView.Adjust)
            resultsView.setSpacing(1)
            for guidIndex in range(0, len(guids)):
                resultsView.addItem("%s [%s]" % (guids[guidIndex], layers[guidIndex], ))

            resultsView.setMinimumWidth(
                resultsView.sizeHintForColumn(0) + 10
            )
            resultsView.setMinimumHeight(
                resultsView.sizeHintForRow(0) * resultsView.count() + 10
            )

            resultsView.itemClicked.connect(
                lambda item: self.getActionMenu(
                    guids[resultsView.row(item)]
                ).exec_(QtGui.QCursor.pos())
            )
            resultsView.show()
            # self.showMessageForUser("Identified more then one object!", QgsMessageBar.WARNING, 0)
            # Plugin().plPrint("There are %d features found. Only first got" % guidsCount, QgsMessageLog.WARNING)

    def getActionMenu(self, guid):
        menu = QtGui.QMenu()
        showObjectCard = QtGui.QAction("Show object card", menu)
        showObjectCard.setEnabled(False)
        showBalanceedDocument = QtGui.QAction("Show balanced document", menu)
        showBalanceedDocument.setEnabled(False)

        showObjectCard.setEnabled(True)
        showObjectCard.triggered.connect(
            functools.partial(self.sendShowcardURI, guid)
        )
        showBalanceedDocument.setEnabled(True)
        showBalanceedDocument.triggered.connect(
            functools.partial(self.showBalanceedDocumentActionProcess, guid)
        )

        menu.addAction(showObjectCard)
        menu.addAction(showBalanceedDocument)

        return menu

    def sendShowcardURI(self, guid):
        uri = "visidata:showcard?id=96094?guid=%s" % str(guid)
        self.workerExt.sendURICommand(uri)

    def showBalanceedDocumentActionProcess(self, guid):
        uri = "visidata:showcard?guid=58414BD65C3BBED34D89769A2607DD4A?guid=%s" % str(guid)
        self.workerExt.sendURICommand(uri)
Esempio n. 4
0
class IPCPlugin(Plugin):
    def __init__(self, iface):
        super(IPCPlugin, self).__init__(iface, "IPC Plugin")
        self.scaleFactor = 100000

    def initGui(self):
        self.workerExt = NGQManagerClient()
        self.workerExt.commandResived.connect(self.tryProcessCommand)

        self._iface.projectRead.connect(self.workerExt.setProjectFile)
        self._iface.newProjectCreated.connect(self.workerExt.setProjectFile)
        self.workerExt.setProjectFile()

        self._iface.mapCanvas().layersChanged.connect(self.updateLayersHandle)

        self.actionRun = QtGui.QAction("Select object",
                                       self._iface.mainWindow())
        self.actionRun.setIcon(
            QtGui.QIcon(":/plugins/ipcplugin/icons/info.png"))
        self.actionRun.setEnabled(False)
        self.actionSettings = QtGui.QAction('Settings',
                                            self._iface.mainWindow())
        self.actionSettings.setIcon(
            QtGui.QIcon(':/plugins/ipcplugin/icons/settings.png'))

        # self._iface.addPluginToMenu(self.getPluginName(), self.actionSettings)
        self._iface.addToolBarIcon(self.actionRun)

        self.actionRun.triggered.connect(self.run)
        self.actionSettings.triggered.connect(self.showSettings)

        self.mapTool = IdentifyTool(self._iface)
        self.mapTool.identified.connect(self.identifyResultProcess)
        self.mapTool.avalableChanged.connect(self.actionRun.setEnabled)

        self.updateLayersHandle()

    def unload(self):
        self._iface.mapCanvas().layersChanged.disconnect(
            self.updateLayersHandle)

        self._iface.removeToolBarIcon(self.actionRun)
        # self.iface.removePluginMenu(self.getPluginName(), self.actionSettings)

        if self._iface.mapCanvas().mapTool() == self.mapTool:
            self.mapTool.disconnectAll()
            self._iface.mapCanvas().unsetMapTool(self.mapTool)

        self.workerExt.disconnect()
        self.workerExt = None

    # def getCSLayers(self):
    #     csLayerName = getCSLayerName()
    #     return QgsMapLayerRegistry.instance().mapLayersByName(csLayerName)

    # def getRZLayers(self):
    #     rzLayerName = getRZLayerName()
    #     return QgsMapLayerRegistry.instance().mapLayersByName(rzLayerName)

    def getTargetLayersForIdentification(self):
        # layers = []
        # layers.extend(
        #     self.getCSLayers()
        # )
        # layers.extend(
        #     self.getRZLayers()
        # )

        # layers = [layer for layer in layers if layer.type() == layer.VectorLayer]
        layers = QgsMapLayerRegistry.instance().mapLayers().values()
        layers = [
            layer for layer in layers if layer.type() == layer.VectorLayer
        ]
        # layers = [layer for layer in layers if layer.geometryType() == QGis.Point]
        return layers

    def updateLayersHandle(self):
        targetLayers = self.getTargetLayersForIdentification()
        self.mapTool.setLayers(targetLayers)

    def tryProcessCommand(self, command):
        Plugin().plPrint("tryProcessCommand: " + str(command))

        if command.get("name") == u'activate':
            self.activateMainWindow()
        elif command.get("name") == u'position':
            self.zoomTo(command.get("args"))
        else:
            Plugin().plPrint("Warnning: Unknown command: " +
                             unicode(command.get("name")))

    def getTargetLayersForPosition(self):
        layers = QgsMapLayerRegistry.instance().mapLayers().values()
        layers = [
            layer for layer in layers if layer.type() == layer.VectorLayer
        ]
        return layers

    def zoomTo(self, args):
        Plugin().plPrint("Zoom to object: " + str(args))

        expr = " and ".join([
            '"%s" = \'%s\'' % (unicode(k), unicode(v))
            for k, v in args.items()
        ])
        Plugin().plPrint("expr: " + expr)
        expr = QgsExpression(expr)
        req = QgsFeatureRequest(expr)

        qgsFeaturesCount = 0
        qgsFeatures = []
        for targetLayer in self.getTargetLayersForPosition():
            Plugin().plPrint("Searche in " + targetLayer.name() + " layer")
            qgsFeatureIterator = targetLayer.getFeatures(req)
            for qgsFeature in qgsFeatureIterator:
                qgsFeatures.append([qgsFeature, targetLayer])
                qgsFeaturesCount += 1

            Plugin().plPrint("qgsFeatures: " + str(qgsFeatures))

        if qgsFeaturesCount == 0:
            self.showMessageForUser("No object is found!",
                                    QgsMessageBar.WARNING)
            Plugin().plPrint("There is no feature with args %s" % str(args),
                             QgsMessageLog.WARNING)
        elif qgsFeaturesCount == 1:
            self.zoom2feature(qgsFeatures[0][1], qgsFeatures[0][0])
        else:
            self.showMessageForUser("Found more then one object!",
                                    QgsMessageBar.WARNING)
            Plugin().plPrint(
                "There are %d features with %s" % (
                    qgsFeaturesCount,
                    args,
                ), QgsMessageLog.WARNING)
            self.zoom2feature(qgsFeatures[0][1], qgsFeatures[0][0])

        self.activateMainWindow()

    def zoom2feature(self, qgsLayer, qgsFeature):
        qgsLayer.setSelectedFeatures([qgsFeature.id()])

        self._iface.mapCanvas().zoomToSelected(qgsLayer)

        if self._iface.mapCanvas().scale() > self.scaleFactor:
            self._iface.mapCanvas().zoomScale(self.scaleFactor)

    def activateMainWindow(self):

        # self._iface.mainWindow().setWindowState(
        #     self._iface.mainWindow().windowState() & ~QtCore.Qt.WindowMinimized | QtCore.Qt.WindowActive
        # )
        # setWindowFlags(Qt::WindowStaysOnTopHint);

        # self._iface.mainWindow().activateWindow()
        # self._iface.mainWindow().raise_()
        window = self._iface.mainWindow()
        window.showMinimized()
        window.showMaximized()

    def run(self):
        self._iface.mapCanvas().setMapTool(self.mapTool)

    def showSettings(self):
        # dlg = SettingsDialog(self._iface.mainWindow())
        # dlg.exec_()
        # self.updateLayersHandle()
        pass

    def identifyResultProcess(self, identifyResults):
        Plugin().plPrint("Identification results: " + str(identifyResults))

        guids = []
        layers = []
        for result in identifyResults:
            try:
                guid = result.mFeature.attribute(u"GUID")
                guids.append(guid)
                layers.append(result.mLayer.name())
            except KeyError:
                pass

        guidsCount = len(guids)

        if guidsCount == 0:
            self.showMessageForUser("No object is identified!",
                                    QgsMessageBar.WARNING, 0)
            Plugin().plPrint("There is no identifyed features",
                             QgsMessageLog.WARNING)
        elif guidsCount == 1:
            self.getActionMenu(guids[0]).exec_(QtGui.QCursor.pos())
        else:
            resultsView = QtGui.QListWidget()
            resultsView.setWindowTitle("Identification results")
            resultsView.setAlternatingRowColors(True)
            resultsView.setResizeMode(QtGui.QListView.Adjust)
            resultsView.setSpacing(1)
            for guidIndex in range(0, len(guids)):
                resultsView.addItem("%s [%s]" % (
                    guids[guidIndex],
                    layers[guidIndex],
                ))

            resultsView.setMinimumWidth(resultsView.sizeHintForColumn(0) + 10)
            resultsView.setMinimumHeight(
                resultsView.sizeHintForRow(0) * resultsView.count() + 10)

            resultsView.itemClicked.connect(lambda item: self.getActionMenu(
                guids[resultsView.row(item)]).exec_(QtGui.QCursor.pos()))
            resultsView.show()
            # self.showMessageForUser("Identified more then one object!", QgsMessageBar.WARNING, 0)
            # Plugin().plPrint("There are %d features found. Only first got" % guidsCount, QgsMessageLog.WARNING)

    def getActionMenu(self, guid):
        menu = QtGui.QMenu()
        showObjectCard = QtGui.QAction("Show object card", menu)
        showObjectCard.setEnabled(False)
        showBalanceedDocument = QtGui.QAction("Show balanced document", menu)
        showBalanceedDocument.setEnabled(False)

        showObjectCard.setEnabled(True)
        showObjectCard.triggered.connect(
            functools.partial(self.sendShowcardURI, guid))
        showBalanceedDocument.setEnabled(True)
        showBalanceedDocument.triggered.connect(
            functools.partial(self.showBalanceedDocumentActionProcess, guid))

        menu.addAction(showObjectCard)
        menu.addAction(showBalanceedDocument)

        return menu

    def sendShowcardURI(self, guid):
        uri = "visidata:showcard?id=96094?guid=%s" % str(guid)
        self.workerExt.sendURICommand(uri)

    def showBalanceedDocumentActionProcess(self, guid):
        uri = "visidata:showcard?guid=58414BD65C3BBED34D89769A2607DD4A?guid=%s" % str(
            guid)
        self.workerExt.sendURICommand(uri)