예제 #1
0
 def run(self):
     """Run method that initialises and starts the user interface"""
     # Create the dialog (after translation) and keep reference
     self.dlg = NNJoinDialog(self.iface)
     # Intitalise the components
     self.dlg.progressBar.setValue(0.0)
     self.dlg.outputDataset.setText('Result')
     # Populate the input and join layer combo boxes
     self.dlg.inputVectorLayer.clear()
     for alayer in self.iface.legendInterface().layers():
         if alayer.type() == QgsMapLayer.VectorLayer:
             self.dlg.inputVectorLayer.addItem(alayer.name(), alayer.id())
     self.dlg.joinVectorLayer.clear()
     for alayer in self.iface.legendInterface().layers():
         if alayer.type() == QgsMapLayer.VectorLayer:
             self.dlg.joinVectorLayer.addItem(alayer.name(), alayer.id())
     # show the dialog (needed for the messagebar cancel button)
     self.dlg.show()
     # Run the dialog event loop
     self.dlg.exec_()
예제 #2
0
class NNJoin(object):
    """QGIS NNJoin Plugin Implementation."""

    def __init__(self, iface):
        """Constructor.

        :param iface: An interface instance that will be passed to this class
            which provides the hook by which you can manipulate the QGIS
            application at run time.
        :type iface: QgsInterface
        """
        # Save reference to the QGIS interface
        self.iface = iface
        # initialize plugin directory
        self.plugin_dir = os.path.dirname(__file__)
        # initialize locale
        locale = QSettings().value('locale/userLocale')[0:2]
        locale_path = os.path.join(
            self.plugin_dir,
            'i18n',
            'NNJoin_{}.qm'.format(locale))

        if os.path.exists(locale_path):
            self.translator = QTranslator()
            self.translator.load(locale_path)

            if qVersion() > '4.3.3':
                QCoreApplication.installTranslator(self.translator)

        # Declare instance attributes
        self.actions = []
        self.NNJOIN = self.tr('NNJoin')
        self.NNJOINAMP = self.tr('&NNJoin')
        self.menu = self.NNJOIN
        self.toolbar = None
        # Separate toolbar for NNJoin:
        #self.toolbar = self.iface.addToolBar(self.NNJOIN)
        #self.toolbar.setObjectName(self.NNJOIN)

        # noinspection PyMethodMayBeStatic
    def tr(self, message):
        """Get the translation for a string using Qt translation API.

        We implement this ourselves since we do not inherit QObject.

        :param message: String for translation.
        :type message: str, QString

        :returns: Translated version of message.
        :rtype: QString
        """
        # noinspection PyTypeChecker,PyArgumentList,PyCallByClass
        return QCoreApplication.translate('NNJoin', message)

    def add_action(self,
                   icon_path,
                   text,
                   callback,
                   enabled_flag=True,
                   add_to_menu=True,
                   add_to_toolbar=True,
                   status_tip=None,
                   whats_this=None,
                   parent=None):
        """Add a toolbar icon to the InaSAFE toolbar.

        :param icon_path: Path to the icon for this action. Can be a resource
            path (e.g. ':/plugins/foo/bar.png') or a normal file system path.
        :type icon_path: str

        :param text: Text that should be shown in menu items for this action.
        :type text: str

        :param callback: Function to be called when the action is triggered.
        :type callback: function

        :param enabled_flag: A flag indicating if the action should be enabled
            by default. Defaults to True.
        :type enabled_flag: bool

        :param add_to_menu: Flag indicating whether the action should also
            be added to the menu. Defaults to True.
        :type add_to_menu: bool

        :param add_to_toolbar: Flag indicating whether the action should also
            be added to the toolbar. Defaults to True.
        :type add_to_toolbar: bool

        :param status_tip: Optional text to show in a popup when mouse pointer
            hovers over the action.
        :type status_tip: str

        :param parent: Parent widget for the new action. Defaults None.
        :type parent: QWidget

        :param whats_this: Optional text to show in the status bar when the
            mouse pointer hovers over the action.

        :returns: The action that was created. Note that the action is also
            added to self.actions list.
        :rtype: QAction
        """

        icon = QIcon(icon_path)
        action = QAction(icon, text, parent)
        action.triggered.connect(callback)
        action.setEnabled(enabled_flag)

        if status_tip is not None:
            action.setStatusTip(status_tip)

        if whats_this is not None:
            action.setWhatsThis(whats_this)

        if add_to_toolbar and self.toolbar is not None:
            self.toolbar.addAction(action)

        if add_to_menu:
            self.iface.addPluginToMenu(
                self.menu,
                action)

        # Add the plugin to the plugins toolbar of QGIS
        self.iface.addToolBarIcon(action)
        # Add the plugin to the vector toolbar of QGIS
        #self.iface.addVectorToolBarIcon(action)
        # Add the plugin to the vector menu of QGIS
        self.iface.addPluginToVectorMenu(self.tr(self.NNJOINAMP), action)
        self.actions.append(action)

    def initGui(self):
        """Create the menu entries and toolbar icons inside the QGIS GUI."""
        icon_path = ':/plugins/NNJoin/nnjoin.png'
        self.add_action(
            icon_path,
            text=self.NNJOIN,
            callback=self.run,
            parent=self.iface.mainWindow())

    def unload(self):
        """Removes the plugin menu item and icon from QGIS GUI."""
        for action in self.actions:
            self.iface.removePluginMenu(
                self.menu,
                action)
            #if self.toolbar != None:
            #    self.iface.removeToolBarIcon(action)
            self.iface.removePluginVectorMenu(self.NNJOINAMP, action)
            #self.iface.removeVectorToolBarIcon(action)
            self.iface.removeToolBarIcon(action)

    def run(self):
        """Run method that initialises and starts the user interface"""
        # Create the dialog (after translation) and keep reference
        self.dlg = NNJoinDialog(self.iface)
        # Intitalise the components
        self.dlg.progressBar.setValue(0.0)
        self.dlg.outputDataset.setText('Result')
        # Populate the input and join layer combo boxes
        self.dlg.inputVectorLayer.clear()
        for alayer in self.iface.legendInterface().layers():
            if alayer.type() == QgsMapLayer.VectorLayer:
                self.dlg.inputVectorLayer.addItem(alayer.name(), alayer.id())
        self.dlg.joinVectorLayer.clear()
        for alayer in self.iface.legendInterface().layers():
            if alayer.type() == QgsMapLayer.VectorLayer:
                self.dlg.joinVectorLayer.addItem(alayer.name(), alayer.id())
        # show the dialog (needed for the messagebar cancel button)
        self.dlg.show()
        # Run the dialog event loop
        self.dlg.exec_()