| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205 |
- # coding=utf-8
- """QGIS plugin implementation.
- .. note:: This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
- .. note:: This source code was copied from the 'postgis viewer' application
- with original authors:
- Copyright (c) 2010 by Ivan Mincik, ivan.mincik@gista.sk
- Copyright (c) 2011 German Carrillo, geotux_tuxman@linuxmail.org
- Copyright (c) 2014 Tim Sutton, tim@linfiniti.com
- """
- __author__ = 'tim@linfiniti.com'
- __revision__ = '$Format:%H$'
- __date__ = '10/01/2011'
- __copyright__ = (
- 'Copyright (c) 2010 by Ivan Mincik, ivan.mincik@gista.sk and '
- 'Copyright (c) 2011 German Carrillo, geotux_tuxman@linuxmail.org'
- 'Copyright (c) 2014 Tim Sutton, tim@linfiniti.com'
- )
- import logging
- from PyQt5.QtCore import QObject, pyqtSlot, pyqtSignal
- from qgis.core import QgsMapLayerRegistry
- from qgis.gui import QgsMapCanvasLayer
- LOGGER = logging.getLogger('QGIS')
- #noinspection PyMethodMayBeStatic,PyPep8Naming
- class QgisInterface(QObject):
- """Class to expose QGIS objects and functions to plugins.
- This class is here for enabling us to run unit tests only,
- so most methods are simply stubs.
- """
- currentLayerChanged = pyqtSignal(QgsMapCanvasLayer)
- def __init__(self, canvas):
- """Constructor
- :param canvas:
- """
- QObject.__init__(self)
- self.canvas = canvas
- # Set up slots so we can mimic the behaviour of QGIS when layers
- # are added.
- LOGGER.debug('Initialising canvas...')
- # noinspection PyArgumentList
- QgsMapLayerRegistry.instance().layersAdded.connect(self.addLayers)
- # noinspection PyArgumentList
- QgsMapLayerRegistry.instance().layerWasAdded.connect(self.addLayer)
- # noinspection PyArgumentList
- QgsMapLayerRegistry.instance().removeAll.connect(self.removeAllLayers)
- # For processing module
- self.destCrs = None
- @pyqtSlot('QStringList')
- def addLayers(self, layers):
- """Handle layers being added to the registry so they show up in canvas.
- :param layers: list<QgsMapLayer> list of map layers that were added
- .. note:: The QgsInterface api does not include this method,
- it is added here as a helper to facilitate testing.
- """
- #LOGGER.debug('addLayers called on qgis_interface')
- #LOGGER.debug('Number of layers being added: %s' % len(layers))
- #LOGGER.debug('Layer Count Before: %s' % len(self.canvas.layers()))
- current_layers = self.canvas.layers()
- final_layers = []
- for layer in current_layers:
- final_layers.append(QgsMapCanvasLayer(layer))
- for layer in layers:
- final_layers.append(QgsMapCanvasLayer(layer))
- self.canvas.setLayerSet(final_layers)
- #LOGGER.debug('Layer Count After: %s' % len(self.canvas.layers()))
- @pyqtSlot('QgsMapLayer')
- def addLayer(self, layer):
- """Handle a layer being added to the registry so it shows up in canvas.
- :param layer: list<QgsMapLayer> list of map layers that were added
- .. note: The QgsInterface api does not include this method, it is added
- here as a helper to facilitate testing.
- .. note: The addLayer method was deprecated in QGIS 1.8 so you should
- not need this method much.
- """
- pass
- @pyqtSlot()
- def removeAllLayers(self):
- """Remove layers from the canvas before they get deleted."""
- self.canvas.setLayerSet([])
- def newProject(self):
- """Create new project."""
- # noinspection PyArgumentList
- QgsMapLayerRegistry.instance().removeAllMapLayers()
- # ---------------- API Mock for QgsInterface follows -------------------
- def zoomFull(self):
- """Zoom to the map full extent."""
- pass
- def zoomToPrevious(self):
- """Zoom to previous view extent."""
- pass
- def zoomToNext(self):
- """Zoom to next view extent."""
- pass
- def zoomToActiveLayer(self):
- """Zoom to extent of active layer."""
- pass
- def addVectorLayer(self, path, base_name, provider_key):
- """Add a vector layer.
- :param path: Path to layer.
- :type path: str
- :param base_name: Base name for layer.
- :type base_name: str
- :param provider_key: Provider key e.g. 'ogr'
- :type provider_key: str
- """
- pass
- def addRasterLayer(self, path, base_name):
- """Add a raster layer given a raster layer file name
- :param path: Path to layer.
- :type path: str
- :param base_name: Base name for layer.
- :type base_name: str
- """
- pass
- def activeLayer(self):
- """Get pointer to the active layer (layer selected in the legend)."""
- # noinspection PyArgumentList
- layers = QgsMapLayerRegistry.instance().mapLayers()
- for item in layers:
- return layers[item]
- def addToolBarIcon(self, action):
- """Add an icon to the plugins toolbar.
- :param action: Action to add to the toolbar.
- :type action: QAction
- """
- pass
- def removeToolBarIcon(self, action):
- """Remove an action (icon) from the plugin toolbar.
- :param action: Action to add to the toolbar.
- :type action: QAction
- """
- pass
- def addToolBar(self, name):
- """Add toolbar with specified name.
- :param name: Name for the toolbar.
- :type name: str
- """
- pass
- def mapCanvas(self):
- """Return a pointer to the map canvas."""
- return self.canvas
- def mainWindow(self):
- """Return a pointer to the main window.
- In case of QGIS it returns an instance of QgisApp.
- """
- pass
- def addDockWidget(self, area, dock_widget):
- """Add a dock widget to the main window.
- :param area: Where in the ui the dock should be placed.
- :type area:
- :param dock_widget: A dock widget to add to the UI.
- :type dock_widget: QDockWidget
- """
- pass
- def legendInterface(self):
- """Get the legend."""
- return self.canvas
|