Source code for svir.test.qgis_interface

# 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

"""

import logging
from mock import Mock
from PyQt4.QtCore import QObject, pyqtSlot, pyqtSignal
from qgis.core import QgsMapLayerRegistry
from qgis.gui import QgsMapCanvasLayer
LOGGER = logging.getLogger('IRMT')

__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'
)


# noinspection PyMethodMayBeStatic,PyPep8Naming
[docs]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 self._messageBar = None # 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')
[docs] 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')
[docs] 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()
[docs] def removeAllLayers(self): """Remove layers from the canvas before they get deleted.""" self.canvas.setLayerSet([])
[docs] def newProject(self): """Create new project.""" # noinspection PyArgumentList QgsMapLayerRegistry.instance().removeAllMapLayers()
# ---------------- API Mock for QgsInterface follows -------------------
[docs] def zoomFull(self): """Zoom to the map full extent.""" pass
[docs] def zoomToPrevious(self): """Zoom to previous view extent.""" pass
[docs] def zoomToNext(self): """Zoom to next view extent.""" pass
[docs] def zoomToActiveLayer(self): """Zoom to extent of active layer.""" pass
[docs] 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
[docs] 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
[docs] 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]
[docs] def addToolBarIcon(self, action): """Add an icon to the plugins toolbar. :param action: Action to add to the toolbar. :type action: QAction """ pass
[docs] def removeToolBarIcon(self, action): """Remove an action (icon) from the plugin toolbar. :param action: Action to add to the toolbar. :type action: QAction """ pass
[docs] def addToolBar(self, name): """Add toolbar with specified name. :param name: Name for the toolbar. :type name: str """ pass
[docs] def mapCanvas(self): """Return a pointer to the map canvas.""" return self.canvas
[docs] def mainWindow(self): """Return a pointer to the main window. In case of QGIS it returns an instance of QgisApp. """ pass
[docs] 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
[docs] def legendInterface(self): """Get the legend.""" # FIXME: this should return the legend interface instead of the canvas, # otherwise it breaks things like setting the active layer or # refreshing the layer symbology. return self.canvas
[docs] def messageBar(self): """Get the message bar.""" if self._messageBar is None: self._messageBar = Mock() # avoid creating GUI by QgsMessageBar() return self._messageBar
[docs] def setActiveLayer(self, layer): """ .. note: The QgsInterface api does not include this method; it is added here as a helper to facilitate testing. When we have multiple layers in the map registy, it might be tricky to identify which of them should be considered as the active one. """ pass