From 4041a5b2efea25fa307877a549403a9ee6efa229 Mon Sep 17 00:00:00 2001 From: Luiz Andrade Date: Mon, 10 Jun 2019 23:38:05 -0300 Subject: [PATCH 1/6] upgrade to qgis 3 --- MultLayerSelection.py | 18 +- MultiLayerRectangleSelection.py | 24 +- MultiLayerSelection.py | 9 +- README.txt | 0 __init__.py | 3 +- help/Makefile | 0 help/make.bat | 0 help/source/conf.py | 0 help/source/index.rst | 0 i18n/af.ts | 0 icon.png | Bin icon_clear.png | Bin icon_rectangle.png | Bin metadata.txt | 8 +- plugin_upload.py | 55 +++-- resources.py | 388 +++++++++++++++++--------------- resources.qrc | 0 17 files changed, 273 insertions(+), 232 deletions(-) mode change 100644 => 100755 MultLayerSelection.py mode change 100644 => 100755 MultiLayerRectangleSelection.py mode change 100644 => 100755 MultiLayerSelection.py mode change 100644 => 100755 README.txt mode change 100644 => 100755 __init__.py mode change 100644 => 100755 help/Makefile mode change 100644 => 100755 help/make.bat mode change 100644 => 100755 help/source/conf.py mode change 100644 => 100755 help/source/index.rst mode change 100644 => 100755 i18n/af.ts mode change 100644 => 100755 icon.png mode change 100644 => 100755 icon_clear.png mode change 100644 => 100755 icon_rectangle.png mode change 100644 => 100755 metadata.txt mode change 100644 => 100755 plugin_upload.py mode change 100644 => 100755 resources.py mode change 100644 => 100755 resources.qrc diff --git a/MultLayerSelection.py b/MultLayerSelection.py old mode 100644 new mode 100755 index 94d2da0..4c8bae0 --- a/MultLayerSelection.py +++ b/MultLayerSelection.py @@ -19,18 +19,20 @@ * * ***************************************************************************/ """ -from PyQt4.QtCore import * -from PyQt4.QtGui import * -from qgis.gui import * -from qgis.core import * -from MultiLayerSelection import MultiLayerSelection -from MultiLayerRectangleSelection import MultiLayerRectangleSelection +from __future__ import absolute_import +from builtins import object +from qgis.PyQt.QtCore import QSettings, QTranslator, QCoreApplication, Qt +from qgis.PyQt.QtWidgets import QToolButton, QAction +from qgis.PyQt.QtGui import QIcon +from qgis.core import QgsMapLayer +from .MultiLayerSelection import MultiLayerSelection +from .MultiLayerRectangleSelection import MultiLayerRectangleSelection # Initialize Qt resources from file resources.py -import resources +from . import resources import os.path -class MultLayerSelection: +class MultLayerSelection(object): """QGIS Plugin Implementation.""" def __init__(self, iface): diff --git a/MultiLayerRectangleSelection.py b/MultiLayerRectangleSelection.py old mode 100644 new mode 100755 index 01f5f51..be3b237 --- a/MultiLayerRectangleSelection.py +++ b/MultiLayerRectangleSelection.py @@ -3,9 +3,9 @@ @author: ferrari ''' -from qgis.gui import * -from qgis.core import * -from PyQt4.Qt import * +from qgis.core import QgsMapLayer, QgsPointXY, QgsRectangle, QgsWkbTypes +from qgis.gui import QgsMapTool, QgsRubberBand +from qgis.PyQt.QtGui import QColor class MultiLayerRectangleSelection(QgsMapTool): @@ -14,7 +14,7 @@ def __init__(self, canvas, action): self.active = False QgsMapTool.__init__(self, self.canvas) self.setAction(action) - self.rubberBand = QgsRubberBand(self.canvas, QGis.Polygon) + self.rubberBand = QgsRubberBand(self.canvas, QgsWkbTypes.PolygonGeometry) mFillColor = QColor( 254, 178, 76, 63 ); self.rubberBand.setColor(mFillColor) self.rubberBand.setWidth(1) @@ -23,7 +23,7 @@ def __init__(self, canvas, action): def reset(self): self.startPoint = self.endPoint = None self.isEmittingPoint = False - self.rubberBand.reset(QGis.Polygon) + self.rubberBand.reset(QgsWkbTypes.PolygonGeometry) def canvasPressEvent(self, e): self.startPoint = self.toMapCoordinates(e.pos()) @@ -40,7 +40,7 @@ def canvasReleaseEvent(self, e): continue if r is not None: lRect = self.canvas.mapSettings().mapToLayerCoordinates(layer, r) - layer.select(lRect, False) + layer.selectByRect(lRect, False) self.rubberBand.hide() @@ -51,13 +51,13 @@ def canvasMoveEvent(self, e): self.showRect(self.startPoint, self.endPoint) def showRect(self, startPoint, endPoint): - self.rubberBand.reset(QGis.Polygon) + self.rubberBand.reset(QgsWkbTypes.PolygonGeometry) if startPoint.x() == endPoint.x() or startPoint.y() == endPoint.y(): return - point1 = QgsPoint(startPoint.x(), startPoint.y()) - point2 = QgsPoint(startPoint.x(), endPoint.y()) - point3 = QgsPoint(endPoint.x(), endPoint.y()) - point4 = QgsPoint(endPoint.x(), startPoint.y()) + point1 = QgsPointXY(startPoint.x(), startPoint.y()) + point2 = QgsPointXY(startPoint.x(), endPoint.y()) + point3 = QgsPointXY(endPoint.x(), endPoint.y()) + point4 = QgsPointXY(endPoint.x(), startPoint.y()) self.rubberBand.addPoint(point1, False) self.rubberBand.addPoint(point2, False) @@ -79,4 +79,4 @@ def deactivate(self): def activate(self): QgsMapTool.activate(self) - \ No newline at end of file + diff --git a/MultiLayerSelection.py b/MultiLayerSelection.py old mode 100644 new mode 100755 index 13819c0..cd164b5 --- a/MultiLayerSelection.py +++ b/MultiLayerSelection.py @@ -3,9 +3,8 @@ @author: ferrari ''' -from qgis.gui import * -from qgis.core import * -from PyQt4.Qt import * +from qgis.core import QgsRectangle, QgsMapLayer +from qgis.gui import QgsMapTool class MultiLayerSelection(QgsMapTool): @@ -24,7 +23,7 @@ def canvasPressEvent(self, e): if layer.type() == QgsMapLayer.RasterLayer: continue lRect = self.canvas.mapSettings().mapToLayerCoordinates(layer, rect) - layer.select(lRect, False) + layer.selectByRect(lRect, False) def deactivate(self): if self is not None: @@ -32,4 +31,4 @@ def deactivate(self): def activate(self): QgsMapTool.activate(self) - \ No newline at end of file + diff --git a/README.txt b/README.txt old mode 100644 new mode 100755 diff --git a/__init__.py b/__init__.py old mode 100644 new mode 100755 index 4064945..51b0151 --- a/__init__.py +++ b/__init__.py @@ -19,6 +19,7 @@ * * ***************************************************************************/ """ +from __future__ import absolute_import # noinspection PyPep8Naming @@ -28,5 +29,5 @@ def classFactory(iface): # pylint: disable=invalid-name :type iface: QgsInterface """ # - from MultLayerSelection import MultLayerSelection + from .MultLayerSelection import MultLayerSelection return MultLayerSelection(iface) diff --git a/help/Makefile b/help/Makefile old mode 100644 new mode 100755 diff --git a/help/make.bat b/help/make.bat old mode 100644 new mode 100755 diff --git a/help/source/conf.py b/help/source/conf.py old mode 100644 new mode 100755 diff --git a/help/source/index.rst b/help/source/index.rst old mode 100644 new mode 100755 diff --git a/i18n/af.ts b/i18n/af.ts old mode 100644 new mode 100755 diff --git a/icon.png b/icon.png old mode 100644 new mode 100755 diff --git a/icon_clear.png b/icon_clear.png old mode 100644 new mode 100755 diff --git a/icon_rectangle.png b/icon_rectangle.png old mode 100644 new mode 100755 diff --git a/metadata.txt b/metadata.txt old mode 100644 new mode 100755 index 5e9ed79..78b8468 --- a/metadata.txt +++ b/metadata.txt @@ -8,9 +8,9 @@ [general] name=Multiple Layer Selection -qgisMinimumVersion=2.0 +qgisMinimumVersion=3.0 description=Allow the selection/deselection of features of multiple layers -version=0.3 +version=1.0 author=Felipe Ferrari and Luiz Andrade email=ferrari@gmail.com @@ -24,8 +24,8 @@ email=ferrari@gmail.com # Tags are comma separated with spaces allowed tags=different,layer,selection,feature,multiple,select,deselect,rectangle,point,click,mouse -homepage=http://hub.qgis.org/projects/multilayerselect -tracker=http://hub.qgis.org/projects/multilayerselect +homepage=https://github.com/felferrari/MultipleLayerSelection +tracker=https://github.com/felferrari/MultipleLayerSelection/issues repository=https://github.com/felferrari/MultipleLayerSelection icon=icon.png # experimental flag diff --git a/plugin_upload.py b/plugin_upload.py old mode 100644 new mode 100755 index 8a23854..8494aa1 --- a/plugin_upload.py +++ b/plugin_upload.py @@ -4,10 +4,14 @@ Authors: A. Pasotti, V. Picavet git sha : $TemplateVCSFormat """ +from __future__ import print_function +from future import standard_library +standard_library.install_aliases() +from builtins import input import sys import getpass -import xmlrpclib +import xmlrpc.client from optparse import OptionParser # Configuration @@ -31,25 +35,36 @@ def main(parameters, arguments): parameters.server, parameters.port, ENDPOINT) - print "Connecting to: %s" % hide_password(address) + # fix_print_with_import + print("Connecting to: %s" % hide_password(address)) - server = xmlrpclib.ServerProxy(address, verbose=VERBOSE) + server = xmlrpc.client.ServerProxy(address, verbose=VERBOSE) try: plugin_id, version_id = server.plugin.upload( - xmlrpclib.Binary(open(arguments[0]).read())) - print "Plugin ID: %s" % plugin_id - print "Version ID: %s" % version_id - except xmlrpclib.ProtocolError, err: - print "A protocol error occurred" - print "URL: %s" % hide_password(err.url, 0) - print "HTTP/HTTPS headers: %s" % err.headers - print "Error code: %d" % err.errcode - print "Error message: %s" % err.errmsg - except xmlrpclib.Fault, err: - print "A fault occurred" - print "Fault code: %d" % err.faultCode - print "Fault string: %s" % err.faultString + xmlrpc.client.Binary(open(arguments[0]).read())) + # fix_print_with_import + print("Plugin ID: %s" % plugin_id) + # fix_print_with_import + print("Version ID: %s" % version_id) + except xmlrpc.client.ProtocolError as err: + # fix_print_with_import + print("A protocol error occurred") + # fix_print_with_import + print("URL: %s" % hide_password(err.url, 0)) + # fix_print_with_import + print("HTTP/HTTPS headers: %s" % err.headers) + # fix_print_with_import + print("Error code: %d" % err.errcode) + # fix_print_with_import + print("Error message: %s" % err.errmsg) + except xmlrpc.client.Fault as err: + # fix_print_with_import + print("A fault occurred") + # fix_print_with_import + print("Fault code: %d" % err.faultCode) + # fix_print_with_import + print("Fault string: %s" % err.faultString) def hide_password(url, start=6): @@ -85,7 +100,8 @@ def hide_password(url, start=6): help="Specify server name", metavar="plugins.qgis.org") options, args = parser.parse_args() if len(args) != 1: - print "Please specify zip file.\n" + # fix_print_with_import + print("Please specify zip file.\n") parser.print_help() sys.exit(1) if not options.server: @@ -95,8 +111,9 @@ def hide_password(url, start=6): if not options.username: # interactive mode username = getpass.getuser() - print "Please enter user name [%s] :" % username, - res = raw_input() + # fix_print_with_import + print("Please enter user name [%s] :" % username, end=' ') + res = input() if res != "": options.username = res else: diff --git a/resources.py b/resources.py old mode 100644 new mode 100755 index b4565f3..6d8c927 --- a/resources.py +++ b/resources.py @@ -2,14 +2,180 @@ # Resource object code # -# Created: ter 14. out 12:51:31 2014 -# by: The Resource Compiler for PyQt (Qt v4.8.5) +# Created by: The Resource Compiler for PyQt5 (Qt v5.12.3) # # WARNING! All changes made in this file will be lost! -from PyQt4 import QtCore +from PyQt5 import QtCore -qt_resource_data = "\ +qt_resource_data = b"\ +\x00\x00\x05\x96\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x05\x5d\x49\x44\x41\x54\x78\xda\xc5\x57\x7b\x4c\x95\x65\ +\x1c\x7e\x3e\x38\xc2\xe1\xe6\x85\xdb\xa6\xa0\x80\x90\xf5\x87\x39\ +\xad\x88\xc6\x52\x21\xa2\xb4\xdc\x28\x8a\x68\x11\x84\x97\x5a\x6d\ +\xb4\x08\x05\x39\xfd\x91\x4e\xb7\x38\x02\x16\xba\xfe\x70\x96\xca\ +\x20\xdd\x88\xc2\xb1\x59\x59\x4a\xa2\x6e\xcc\xb4\xd2\x91\x93\x2e\ +\x20\xa8\xa0\x8e\x9b\x17\xae\xc2\x01\x7a\xde\xc3\xf9\x4e\xef\xf9\ +\x38\xc0\x07\x7f\xd0\xd9\xd9\xce\x77\xde\xef\xfd\x7e\xcf\xf3\x3e\ +\xbf\xeb\xa7\x8c\x00\xfc\x02\x8a\xf5\x3b\x73\x1f\x3b\xae\x7a\x31\ +\x93\x24\x34\x98\x63\x16\x94\x19\x04\x57\x94\xf1\x6e\xe8\x31\xd6\ +\xd2\x82\x6c\xf1\x1b\x14\x84\x82\xe9\x80\xdb\x15\x98\x2a\x89\x1b\ +\x37\x10\x33\x6f\x1e\x3e\xf4\xf0\xc0\xf3\xe2\x7f\x5f\x1f\x7e\xbc\ +\x73\x07\x9f\x2d\x5c\x88\xea\xa9\x80\x8f\x21\x30\x19\x89\x6b\xd7\ +\x10\xeb\xe7\x07\x93\xd1\x88\x78\x57\x57\xc7\xe7\x86\x86\x80\xfe\ +\x7e\x9c\xe8\xe8\x40\x5e\x48\x08\x4e\xe9\xb5\xa9\xe8\x61\x4b\xe0\ +\x95\x04\xfe\x88\xc0\x6b\x54\xe0\xe1\x61\x60\x60\x00\x67\xc5\xb5\ +\x9b\x1b\x56\xba\xb8\x38\x10\x39\x4e\x22\x9f\x90\xc8\xd9\xc9\x54\ +\x55\xf4\x48\x66\x19\x04\x0c\x06\x07\xe0\x0b\x5d\x5d\x30\x07\x06\ +\xa2\x42\xac\xb5\xb6\x22\xd1\xc7\x07\xb9\x24\x12\xa9\x12\xb1\x58\ +\xf8\xcc\x2c\x07\x20\xa7\x58\xca\x38\x3e\x8e\xa2\x8f\x4d\x5e\xde\ +\x48\x50\xd7\x86\x87\xac\xc0\xbf\x77\x77\xc3\x1c\x10\x80\x72\x67\ +\xcf\xb5\xb5\x21\xc9\xdb\xdb\x4a\xe4\x31\x17\xc9\x45\x3d\xdd\xa8\ +\x64\x8c\xe4\x31\x46\x7e\x99\x90\x00\xa5\x8e\xf4\xf5\x45\x2e\xa5\ +\x4e\x54\x4f\x2c\xef\xd0\x9b\x1d\xb2\x7a\xea\x95\x50\x84\xae\xa9\ +\xe8\xec\x84\x99\xae\xb9\x60\xb7\x59\x57\x07\x37\xca\xf7\xe8\x9c\ +\x39\xd8\x4a\xe0\x24\x15\x78\x64\x04\x16\x9e\xb8\xb6\xa7\x07\xbb\ +\x7d\xfd\x70\x58\x2f\x09\x19\xbc\xb3\x03\x29\x5e\x5e\xd8\x4c\x45\ +\x96\x31\xe1\x0d\x12\x91\xf2\x7b\xf7\xb0\xeb\xf6\x6d\xfc\xa1\xb4\ +\xb7\x23\x93\x9b\x76\x10\xdc\xc7\x6e\x84\x26\xe8\xe3\xd3\x85\x85\ +\x78\x71\xe7\x4e\xf4\xe8\x4d\x51\x67\x7b\xb6\x6d\x83\x57\x56\x16\ +\xbe\xe3\x21\x57\x2b\xd2\x53\x24\xd1\x45\x02\x26\xeb\x52\x73\x33\ +\x22\xa8\x40\x0e\x49\xac\xa7\x02\x06\x95\x04\x15\x68\xa4\x02\x7b\ +\x2a\x2b\xb1\x7f\xc3\x06\xf4\x4d\x44\x42\x7b\xef\xe0\x41\x78\x24\ +\x24\xe0\x1d\x1e\xee\x03\x2a\x10\xa6\x82\x53\x01\x0b\xc1\x0f\x51\ +\x81\xfc\xe0\x60\xd4\x3b\x18\x69\x68\xc0\x23\x8c\x6c\x41\x24\x8d\ +\x44\x5c\x25\x22\x4d\xc2\x15\xc5\xc5\xf8\x22\x6b\x33\xfa\xb5\x24\ +\x64\xf0\x4f\x77\xc3\x98\x9e\x8e\xb7\x6d\xd2\x87\x4a\xc0\x43\x04\ +\x2e\x61\xc6\xe4\x87\x87\xe3\xcf\x09\xb3\xa0\xb1\x11\x4b\x19\xe9\ +\x39\xee\xee\x78\x93\x44\x14\x89\x48\x03\xb3\xa0\xc0\xcf\x1f\xfb\ +\x9c\x3d\xd7\xd1\x8e\x77\x99\x05\xd9\x04\x0e\x97\x80\x47\x1e\x3c\ +\xc0\x57\xcc\x90\xfc\xb0\x30\x5c\x1e\x37\x0b\xae\x5f\x47\x08\x4f\ +\x1f\xcf\xd3\x7f\xa9\xae\x35\x35\x61\x99\xbf\xbf\x35\x38\xdf\x50\ +\x0b\x90\x8d\xc8\xdf\xee\x46\x2c\x91\x0d\xf5\xf7\x71\xcd\x1d\x4b\ +\x54\x60\x5b\x41\x3a\xc2\x18\xdb\x15\x1a\x8a\x5a\xc9\xf7\x6f\xdd\ +\xbf\x8f\xf3\xc4\xaa\xb3\x12\x20\xb3\x28\x4f\x4f\xbc\x4e\xd6\x9b\ +\x08\xe2\x4d\xb6\x17\x6d\x45\xe6\x6b\x89\xdc\x0a\x51\x82\x09\x90\ +\x64\x2f\xc1\xca\xd8\x08\x54\x81\x69\xa3\x5c\x94\xe4\x45\x8b\x70\ +\x51\xbd\x4d\xe9\x5f\x13\xc5\x8a\x36\x56\x70\x4f\x2f\x0f\xb1\x9f\ +\xd8\x47\x14\xde\x48\x22\x81\x0c\x9e\x72\x95\xa6\xcc\xfe\x4a\xbf\ +\xe7\x51\x81\x0a\xd5\x08\x83\x35\x52\x14\x28\x4f\x2f\xbc\xec\xcc\ +\x05\xbd\x3d\x38\x2a\x0a\x0e\x83\xcb\x9e\xe7\x54\x20\x91\xf1\x60\ +\xe2\x01\x9f\xd0\x94\xeb\x33\xc4\x2e\x52\x24\xe3\x31\x73\xe7\x5a\ +\x1b\xcd\x73\x1a\x22\xe7\x7a\x7b\x61\xa6\x02\x95\xda\x80\x1b\xb2\ +\x8c\xfe\xba\x1a\xc6\x16\x2b\x2a\x90\xc0\x83\x89\xaa\xf8\x94\x06\ +\xf8\xa7\xbb\x77\xad\x24\xab\x9d\x06\x21\x7b\x7c\x1c\x89\x08\xa9\ +\x9e\xd5\x10\xa9\x31\x7a\x20\x5a\x06\xe2\xde\x18\xdb\x3c\x50\x2d\ +\x13\x63\x3c\xd4\x10\x38\x5a\x06\xa6\x5b\x4e\x12\xd8\xcc\xbd\x55\ +\xba\x9a\xd1\xad\x5b\x88\x9f\x3d\xdb\xea\xf7\x58\x2b\x11\x69\x67\ +\x5b\x2b\x5e\x60\x8c\xfc\x20\xef\xa7\x9c\x6b\x03\x02\xf1\xbd\x1c\ +\x13\x36\xe0\x53\x0c\xba\xbc\xf9\xf3\x71\x62\xdc\x66\xb4\x77\x2f\ +\x8c\x29\x29\x78\x8f\x92\xc5\x52\xba\x22\xca\xf3\xb3\xe4\x9a\x35\ +\x41\xc1\x12\xd8\xc8\xa8\x22\x34\x7c\x9a\x29\xb9\x5d\x2c\x31\xf5\ +\xb6\x93\xe8\x6a\xeb\x89\x25\xa2\x2d\xcd\x58\x4b\x5b\xc7\x25\x5b\ +\xcf\xb0\xd7\xbc\x3f\x38\x88\x73\xa5\xa5\xd8\x93\x91\x81\x7e\x85\ +\xfe\x15\x46\x36\x71\xba\x09\x92\xfb\x39\x9b\x86\x88\xe2\x33\xb2\ +\xb4\x0c\xb2\x1a\x02\x45\xcb\xae\x11\x1f\x8d\xd4\x35\x0c\x52\x07\ +\x57\x31\x8b\x56\x11\xd8\xa4\xce\x13\x22\x95\x39\x45\xb5\xd4\xd6\ +\x62\xab\xc2\x92\x18\xc2\x07\x9f\xe6\xcd\x2d\x34\xbe\x5c\x36\xe6\ +\x2c\xb8\x6e\xde\xc4\x4b\x2c\xdb\xc2\xd8\x93\xea\x5e\x41\x84\xa4\ +\xcf\xd3\x96\x79\xc1\x02\x1c\x75\x16\xac\x32\x69\x92\xbc\xc4\xfd\ +\x85\x57\xae\xe0\xa4\xa2\xf1\x63\x8a\xe8\xe7\x24\xb2\x54\xee\xe7\ +\xdd\x5d\xa8\x64\xce\xe6\x2d\x5e\xfc\x5f\x3f\x67\x8c\xbc\x4a\x22\ +\x1f\x8b\x6b\x02\xef\xa0\x8f\xbf\x51\xef\x5d\xbd\x8a\x28\x56\x52\ +\x93\xb7\x8f\xe3\x3c\x41\xe0\xcb\x62\x9e\x60\xfc\x1c\x9e\x28\x08\ +\xc5\xbb\xc2\xb0\xb3\x7e\x4e\xd9\xbe\x15\x44\x58\xcb\x7f\x73\x16\ +\x50\xec\x25\x8f\x0b\x60\xba\xf3\x95\x71\xe6\x09\x17\xc8\xb3\xc2\ +\x64\x43\x69\x7b\x1b\x36\x52\x91\x1c\xa6\xd4\xc3\xf2\xa8\x45\x22\ +\x65\x54\xcb\x1c\x11\x81\x4b\x62\xad\xbe\x1e\xcb\x79\xaa\x5c\x02\ +\x27\x6b\x46\xb7\xbf\x78\xe2\x7c\xff\x00\x1c\xd0\x35\x94\x3a\x6b\ +\xb7\x71\x71\x30\x94\x95\x61\x3d\xab\x99\x68\x32\x0f\xc9\x44\xe8\ +\xc7\x62\x71\xcd\x78\x48\xd7\x00\xff\xc3\x2a\x5a\x90\x9c\x8c\x43\ +\x55\x55\xb0\xe8\x1a\xcb\x27\x1b\x38\x72\x73\x31\x2b\x3b\x1b\x1b\ +\x49\x64\x8b\xdc\xed\xe4\x21\x46\x74\x4b\x02\x17\x16\x14\xe0\x80\ +\xd9\x8c\x41\xdd\x2f\x26\x53\x79\x2b\x2a\x2a\x82\x5b\x5a\x1a\x52\ +\x45\xff\x10\xa3\x96\x58\x13\xa3\x1b\xd3\xf9\xf3\x92\x12\x94\x66\ +\x66\x62\x60\x4a\xaf\x66\xd3\x7d\x2f\x64\x21\xf1\x59\xb7\x6e\xb4\ +\x51\x1d\x3b\x86\xc4\xd4\x54\x74\x4d\xeb\xfd\xf0\xff\x7e\x3d\xff\ +\x17\x7a\xb3\x7d\x88\xf8\x58\x30\x70\x00\x00\x00\x00\x49\x45\x4e\ +\x44\xae\x42\x60\x82\ +\x00\x00\x04\x89\ +\x89\ +\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ +\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ +\x00\x00\x04\x50\x49\x44\x41\x54\x78\xda\xed\x57\x6b\x48\x54\x41\ +\x18\x3d\xd7\xcc\x47\x29\x59\x56\x50\x46\x46\xda\x0b\x32\xb4\x90\ +\x1e\x54\x14\x56\x10\x2c\x49\x96\x18\x8a\xe6\xa3\x82\xc0\x40\x30\ +\x75\x85\x88\xe8\xcf\x5e\xdd\x84\x2d\xfa\x11\x3d\x54\x94\x04\xb1\ +\x07\xc6\x42\x10\x09\x51\x50\x96\x94\x62\x91\x3d\x34\x2a\xb2\xa2\ +\x77\x59\xbe\xcb\xce\xac\x77\x6a\xbc\xa9\x65\x6d\x45\xd0\xfd\xb3\ +\xbb\xb3\x33\x73\xce\x9c\xef\x7c\xdf\x37\x57\xc3\x5f\x7e\xb4\xff\ +\x04\x7e\x65\x71\x73\x33\xb2\xc4\x67\x50\x10\xec\xee\x26\xd0\xf3\ +\xa7\x0e\xfc\x9f\xc0\x77\x09\xbc\x7f\x0f\xa7\xb7\x37\x2c\x9e\x9e\ +\xbd\xbf\x3f\x7d\x02\x3a\x3b\x51\xd3\xd2\x02\x7d\xfc\x78\x9c\x10\ +\x63\xcf\x9e\x21\xc6\xdf\x1f\x56\x2f\x2f\x44\x7a\x78\xf4\xce\xeb\ +\xee\x06\x3a\x3a\xe0\xf4\xf3\x83\xe5\x97\x08\xf4\xf4\xf4\x01\xbe\ +\x46\x42\xfa\xb8\x71\xa8\xe8\x6f\xd1\xf3\xe7\x88\x25\xa0\x20\x32\ +\x57\x12\xd1\xb4\x21\x28\xf0\xe0\x01\x22\xc7\x8c\x81\x95\xa7\x89\ +\x91\x63\x1f\x3f\xba\x80\xeb\x3e\x7c\x80\x3e\x76\x2c\xca\x7f\x44\ +\xe7\x17\x2f\x10\x37\x72\xa4\x8b\x48\xf8\xb0\x61\x5f\xc7\xa9\xda\ +\x89\x57\xaf\xa0\x07\x07\xa3\xe6\x0b\x81\x86\x06\x78\x11\x30\x6c\ +\xd4\x28\xe4\xf8\xf8\x20\x56\x48\xad\xb2\x7e\xf9\x12\x09\x81\x81\ +\x28\xfb\x99\x80\x73\x6d\x3c\xd7\x1e\x55\xd5\x14\xa1\x69\x6f\x47\ +\xc5\xdb\xb7\xc8\x7b\xfa\x14\xd7\x35\xb2\xcd\x20\xdb\xdd\x04\xf7\ +\xff\xc2\x4a\x73\x6b\xb1\xfa\x26\x9c\xe2\x21\x89\x16\x12\xc8\x75\ +\x6d\xfe\xe8\x11\x42\xa9\x40\x36\x49\xa4\x50\x01\x4f\x93\x02\x19\ +\x95\x95\x38\x98\x9a\x8a\xb6\xa1\xa0\x16\x16\xc2\x37\x3a\x1a\x5b\ +\xa8\x80\xc3\xa4\x40\x37\xc1\x8b\xa8\x40\xfe\xa4\x49\x68\xec\x73\ +\xba\xa6\x26\xcc\xa4\xb3\xb3\x19\x92\x14\x39\x66\x98\xef\x3e\x3d\ +\x50\x50\x5c\x8c\x43\x99\x99\xe8\x18\x0c\xb8\xa0\x00\xde\xc9\xc9\ +\xd8\x4c\x55\x33\xe9\x81\x29\xd2\x8c\x86\x07\x8a\x98\x31\xf9\x21\ +\x21\xb8\x35\xe4\x2c\x10\x9f\x24\xd2\xc4\x2c\xb0\xef\xd8\x81\xc2\ +\x03\x07\xd0\xa5\x2e\x48\x4b\xc3\xf0\xbc\x3c\xa4\x32\x0b\xb2\x08\ +\x1c\x22\x55\xfc\xe1\x2c\x78\xf8\x10\xc1\x3c\xfd\x4a\x86\xe1\xb0\ +\xa9\x0e\x94\x71\x2c\x5e\xba\xd9\x20\x72\x87\xa7\xc9\x67\x3a\x1e\ +\x31\xd2\x2f\x8d\xc0\xd9\xac\x17\xd3\x25\xa0\xc8\x1e\x4a\x5d\xc6\ +\xf1\x78\x15\x8f\x63\x1b\xdf\xbd\xc3\x15\x62\x35\xb8\x06\xb8\x78\ +\xfe\x88\x11\xd8\x40\xd6\x9b\x08\xe2\xc7\xe2\x51\xeb\xeb\x8b\x08\ +\x75\x11\xc9\x45\x30\x96\xb9\x04\x88\x55\x89\x70\xb3\xeb\xe2\x3b\ +\x09\x86\xa9\xc0\xdc\xa3\x82\xde\xb1\x4d\x9e\x8c\x5a\xf5\x30\x6d\ +\x6d\xa8\xe5\x1e\x11\x9c\xd3\xca\x43\x1c\x24\x76\x99\xc6\x98\xc4\ +\x92\x40\x3a\x37\x59\x2a\x37\x1f\x48\x36\x9a\x35\x72\xf4\x68\x17\ +\x91\xb5\x6a\x7e\x2b\xc0\x27\x5f\xbf\x86\x8d\xe6\xaa\x19\x2c\x9c\ +\x86\x3a\xe7\x89\xed\x50\x37\x5f\x16\x10\x80\x5c\x12\x59\x25\xcb\ +\xae\xc1\xba\xba\xb5\x15\x3a\x15\xa8\x94\x63\x8f\x1f\x63\x21\xb3\ +\xc6\x4a\x22\x6b\xc4\x6f\x02\x9f\xa2\xab\xf5\x89\x13\x71\x49\xc9\ +\x9e\x68\x1e\xcc\x4a\x35\x17\xc8\x31\xa3\x06\x9c\x79\xf3\xc6\x45\ +\xf2\x5c\xbf\xa6\x60\x8f\x8f\x62\x7f\x3f\xab\xb2\x36\x32\xe1\x22\ +\xfd\x60\x63\xdc\x9d\xca\xdc\x65\xc6\x7d\xe0\x9c\x52\x8e\x2d\x8c\ +\x7b\x2e\x43\xba\x48\x64\x80\xaa\x26\xe7\xaf\xe0\xdc\xaa\x21\xf5\ +\x02\xc1\x5a\xca\x6d\x10\xb9\x40\x03\xda\x68\xa2\xd3\xea\x02\xca\ +\xb9\x9a\xe9\x2b\x80\x97\xc8\xd4\x13\x52\xab\x6a\x0e\x98\x05\xfb\ +\xf6\xc1\x27\x21\x01\x5b\x29\xd9\x72\x4a\xe7\xa0\x3c\x55\xbf\xa3\ +\x17\x33\xcc\x51\xec\x35\xdb\xba\xba\x50\x5d\x5a\x8a\xbd\xe9\xe9\ +\x68\xd7\x18\xdf\x5d\xfc\x6f\x13\x63\x15\x34\x00\x6b\xb7\x3d\x52\ +\x4d\x11\x56\x7a\xab\xb9\xbe\x1e\x39\x1a\xcd\x13\x4c\xd0\xc5\x34\ +\xdf\x76\x9a\x2a\xdc\x1c\x37\x77\x3e\xd2\x4f\x34\x6d\x1d\xcd\xb8\ +\xe7\xe6\x4d\x9c\xd5\x4c\x71\x4c\x10\xfd\x9c\x44\x66\xab\x17\x0b\ +\x4e\xae\xa4\xb9\x6c\x53\xa7\xe2\xb2\x9c\xfb\xe4\x09\xd6\x33\x13\ +\x76\x8a\xef\x3c\xc4\xee\x09\x13\x70\x4c\xfe\x77\xef\x1e\xe6\xd3\ +\xac\x22\xa3\xa2\xd5\x8b\x0c\x81\x6f\x88\xfb\x04\xfd\x73\x74\x30\ +\x13\x8a\xda\x90\x44\x43\xe5\xd0\x50\xb3\x54\x22\x94\xed\xb8\x20\ +\xc2\x5a\x7e\xb5\xbf\x13\xb2\x97\xcc\x13\xc0\x0c\xe7\x3a\xd3\x0d\ +\xaa\x81\xc6\xcd\x23\x70\x89\xf9\xba\x37\x98\xd8\x1e\x04\x4b\x16\ +\x25\x96\x44\x66\x98\x88\x94\x93\xa4\x1e\x1a\x8a\x3a\x31\xd6\xd8\ +\x88\x70\x6e\x2e\x72\x3e\xce\x04\x7c\x9b\x27\x16\x25\xbb\x58\x0c\ +\xfd\xd4\x7b\x41\x54\x14\x3c\xcb\xcb\x91\xc2\xee\x26\x9a\xcc\x34\ +\x53\x68\x8a\x8d\x52\x9c\x6c\x02\xbe\xcb\xee\x69\x8f\x8b\x43\x51\ +\x55\x15\xba\xdd\xf2\x62\x62\xb5\x62\x78\x56\x16\xd2\x48\x64\xbb\ +\xda\xed\x54\x83\x89\x6e\x49\xe0\x3d\x76\x3b\x8e\xe8\x7a\xdf\x6e\ +\xe9\xb6\x37\x23\x87\x03\x5e\x49\x49\x48\x14\xfd\x83\x44\xe6\x88\ +\x31\x02\xd7\x33\x9d\xf7\x97\x94\xa0\x34\x23\x03\x9d\x7f\xe4\xd5\ +\x8c\x85\xc4\xdf\x62\xe9\xbd\x96\x3b\x9d\x88\x49\x4c\x44\xcb\x3f\ +\xf9\x72\xfa\x19\x69\x07\xdf\x81\xc6\xb7\x2d\xa9\x00\x00\x00\x00\ +\x49\x45\x4e\x44\xae\x42\x60\x82\ \x00\x00\xc4\xc5\ \x89\ \x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ @@ -3161,176 +3327,9 @@ \x76\x96\xd1\xc1\x41\x36\xae\xd4\x4f\xd3\x5c\xc0\xfd\xb0\xef\x5f\ \xb0\x9c\x5b\xa1\x26\x3d\xed\xe9\x00\x00\x00\x00\x49\x45\x4e\x44\ \xae\x42\x60\x82\ -\x00\x00\x04\x89\ -\x89\ -\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ -\x00\x00\x04\x50\x49\x44\x41\x54\x78\xda\xed\x57\x6b\x48\x54\x41\ -\x18\x3d\xd7\xcc\x47\x29\x59\x56\x50\x46\x46\xda\x0b\x32\xb4\x90\ -\x1e\x54\x14\x56\x10\x2c\x49\x96\x18\x8a\xe6\xa3\x82\xc0\x40\x30\ -\x75\x85\x88\xe8\xcf\x5e\xdd\x84\x2d\xfa\x11\x3d\x54\x94\x04\xb1\ -\x07\xc6\x42\x10\x09\x51\x50\x96\x94\x62\x91\x3d\x34\x2a\xb2\xa2\ -\x77\x59\xbe\xcb\xce\xac\x77\x6a\xbc\xa9\x65\x6d\x45\xd0\xfd\xb3\ -\xbb\xb3\x33\x73\xce\x9c\xef\x7c\xdf\x37\x57\xc3\x5f\x7e\xb4\xff\ -\x04\x7e\x65\x71\x73\x33\xb2\xc4\x67\x50\x10\xec\xee\x26\xd0\xf3\ -\xa7\x0e\xfc\x9f\xc0\x77\x09\xbc\x7f\x0f\xa7\xb7\x37\x2c\x9e\x9e\ -\xbd\xbf\x3f\x7d\x02\x3a\x3b\x51\xd3\xd2\x02\x7d\xfc\x78\x9c\x10\ -\x63\xcf\x9e\x21\xc6\xdf\x1f\x56\x2f\x2f\x44\x7a\x78\xf4\xce\xeb\ -\xee\x06\x3a\x3a\xe0\xf4\xf3\x83\xe5\x97\x08\xf4\xf4\xf4\x01\xbe\ -\x46\x42\xfa\xb8\x71\xa8\xe8\x6f\xd1\xf3\xe7\x88\x25\xa0\x20\x32\ -\x57\x12\xd1\xb4\x21\x28\xf0\xe0\x01\x22\xc7\x8c\x81\x95\xa7\x89\ -\x91\x63\x1f\x3f\xba\x80\xeb\x3e\x7c\x80\x3e\x76\x2c\xca\x7f\x44\ -\xe7\x17\x2f\x10\x37\x72\xa4\x8b\x48\xf8\xb0\x61\x5f\xc7\xa9\xda\ -\x89\x57\xaf\xa0\x07\x07\xa3\xe6\x0b\x81\x86\x06\x78\x11\x30\x6c\ -\xd4\x28\xe4\xf8\xf8\x20\x56\x48\xad\xb2\x7e\xf9\x12\x09\x81\x81\ -\x28\xfb\x99\x80\x73\x6d\x3c\xd7\x1e\x55\xd5\x14\xa1\x69\x6f\x47\ -\xc5\xdb\xb7\xc8\x7b\xfa\x14\xd7\x35\xb2\xcd\x20\xdb\xdd\x04\xf7\ -\xff\xc2\x4a\x73\x6b\xb1\xfa\x26\x9c\xe2\x21\x89\x16\x12\xc8\x75\ -\x6d\xfe\xe8\x11\x42\xa9\x40\x36\x49\xa4\x50\x01\x4f\x93\x02\x19\ -\x95\x95\x38\x98\x9a\x8a\xb6\xa1\xa0\x16\x16\xc2\x37\x3a\x1a\x5b\ -\xa8\x80\xc3\xa4\x40\x37\xc1\x8b\xa8\x40\xfe\xa4\x49\x68\xec\x73\ -\xba\xa6\x26\xcc\xa4\xb3\xb3\x19\x92\x14\x39\x66\x98\xef\x3e\x3d\ -\x50\x50\x5c\x8c\x43\x99\x99\xe8\x18\x0c\xb8\xa0\x00\xde\xc9\xc9\ -\xd8\x4c\x55\x33\xe9\x81\x29\xd2\x8c\x86\x07\x8a\x98\x31\xf9\x21\ -\x21\xb8\x35\xe4\x2c\x10\x9f\x24\xd2\xc4\x2c\xb0\xef\xd8\x81\xc2\ -\x03\x07\xd0\xa5\x2e\x48\x4b\xc3\xf0\xbc\x3c\xa4\x32\x0b\xb2\x08\ -\x1c\x22\x55\xfc\xe1\x2c\x78\xf8\x10\xc1\x3c\xfd\x4a\x86\xe1\xb0\ -\xa9\x0e\x94\x71\x2c\x5e\xba\xd9\x20\x72\x87\xa7\xc9\x67\x3a\x1e\ -\x31\xd2\x2f\x8d\xc0\xd9\xac\x17\xd3\x25\xa0\xc8\x1e\x4a\x5d\xc6\ -\xf1\x78\x15\x8f\x63\x1b\xdf\xbd\xc3\x15\x62\x35\xb8\x06\xb8\x78\ -\xfe\x88\x11\xd8\x40\xd6\x9b\x08\xe2\xc7\xe2\x51\xeb\xeb\x8b\x08\ -\x75\x11\xc9\x45\x30\x96\xb9\x04\x88\x55\x89\x70\xb3\xeb\xe2\x3b\ -\x09\x86\xa9\xc0\xdc\xa3\x82\xde\xb1\x4d\x9e\x8c\x5a\xf5\x30\x6d\ -\x6d\xa8\xe5\x1e\x11\x9c\xd3\xca\x43\x1c\x24\x76\x99\xc6\x98\xc4\ -\x92\x40\x3a\x37\x59\x2a\x37\x1f\x48\x36\x9a\x35\x72\xf4\x68\x17\ -\x91\xb5\x6a\x7e\x2b\xc0\x27\x5f\xbf\x86\x8d\xe6\xaa\x19\x2c\x9c\ -\x86\x3a\xe7\x89\xed\x50\x37\x5f\x16\x10\x80\x5c\x12\x59\x25\xcb\ -\xae\xc1\xba\xba\xb5\x15\x3a\x15\xa8\x94\x63\x8f\x1f\x63\x21\xb3\ -\xc6\x4a\x22\x6b\xc4\x6f\x02\x9f\xa2\xab\xf5\x89\x13\x71\x49\xc9\ -\x9e\x68\x1e\xcc\x4a\x35\x17\xc8\x31\xa3\x06\x9c\x79\xf3\xc6\x45\ -\xf2\x5c\xbf\xa6\x60\x8f\x8f\x62\x7f\x3f\xab\xb2\x36\x32\xe1\x22\ -\xfd\x60\x63\xdc\x9d\xca\xdc\x65\xc6\x7d\xe0\x9c\x52\x8e\x2d\x8c\ -\x7b\x2e\x43\xba\x48\x64\x80\xaa\x26\xe7\xaf\xe0\xdc\xaa\x21\xf5\ -\x02\xc1\x5a\xca\x6d\x10\xb9\x40\x03\xda\x68\xa2\xd3\xea\x02\xca\ -\xb9\x9a\xe9\x2b\x80\x97\xc8\xd4\x13\x52\xab\x6a\x0e\x98\x05\xfb\ -\xf6\xc1\x27\x21\x01\x5b\x29\xd9\x72\x4a\xe7\xa0\x3c\x55\xbf\xa3\ -\x17\x33\xcc\x51\xec\x35\xdb\xba\xba\x50\x5d\x5a\x8a\xbd\xe9\xe9\ -\x68\xd7\x18\xdf\x5d\xfc\x6f\x13\x63\x15\x34\x00\x6b\xb7\x3d\x52\ -\x4d\x11\x56\x7a\xab\xb9\xbe\x1e\x39\x1a\xcd\x13\x4c\xd0\xc5\x34\ -\xdf\x76\x9a\x2a\xdc\x1c\x37\x77\x3e\xd2\x4f\x34\x6d\x1d\xcd\xb8\ -\xe7\xe6\x4d\x9c\xd5\x4c\x71\x4c\x10\xfd\x9c\x44\x66\xab\x17\x0b\ -\x4e\xae\xa4\xb9\x6c\x53\xa7\xe2\xb2\x9c\xfb\xe4\x09\xd6\x33\x13\ -\x76\x8a\xef\x3c\xc4\xee\x09\x13\x70\x4c\xfe\x77\xef\x1e\xe6\xd3\ -\xac\x22\xa3\xa2\xd5\x8b\x0c\x81\x6f\x88\xfb\x04\xfd\x73\x74\x30\ -\x13\x8a\xda\x90\x44\x43\xe5\xd0\x50\xb3\x54\x22\x94\xed\xb8\x20\ -\xc2\x5a\x7e\xb5\xbf\x13\xb2\x97\xcc\x13\xc0\x0c\xe7\x3a\xd3\x0d\ -\xaa\x81\xc6\xcd\x23\x70\x89\xf9\xba\x37\x98\xd8\x1e\x04\x4b\x16\ -\x25\x96\x44\x66\x98\x88\x94\x93\xa4\x1e\x1a\x8a\x3a\x31\xd6\xd8\ -\x88\x70\x6e\x2e\x72\x3e\xce\x04\x7c\x9b\x27\x16\x25\xbb\x58\x0c\ -\xfd\xd4\x7b\x41\x54\x14\x3c\xcb\xcb\x91\xc2\xee\x26\x9a\xcc\x34\ -\x53\x68\x8a\x8d\x52\x9c\x6c\x02\xbe\xcb\xee\x69\x8f\x8b\x43\x51\ -\x55\x15\xba\xdd\xf2\x62\x62\xb5\x62\x78\x56\x16\xd2\x48\x64\xbb\ -\xda\xed\x54\x83\x89\x6e\x49\xe0\x3d\x76\x3b\x8e\xe8\x7a\xdf\x6e\ -\xe9\xb6\x37\x23\x87\x03\x5e\x49\x49\x48\x14\xfd\x83\x44\xe6\x88\ -\x31\x02\xd7\x33\x9d\xf7\x97\x94\xa0\x34\x23\x03\x9d\x7f\xe4\xd5\ -\x8c\x85\xc4\xdf\x62\xe9\xbd\x96\x3b\x9d\x88\x49\x4c\x44\xcb\x3f\ -\xf9\x72\xfa\x19\x69\x07\xdf\x81\xc6\xb7\x2d\xa9\x00\x00\x00\x00\ -\x49\x45\x4e\x44\xae\x42\x60\x82\ -\x00\x00\x05\x96\ -\x89\ -\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x00\x20\x00\x00\x00\x20\x08\x06\x00\x00\x00\x73\x7a\x7a\xf4\ -\x00\x00\x05\x5d\x49\x44\x41\x54\x78\xda\xc5\x57\x7b\x4c\x95\x65\ -\x1c\x7e\x3e\x38\xc2\xe1\xe6\x85\xdb\xa6\xa0\x80\x90\xf5\x87\x39\ -\xad\x88\xc6\x52\x21\xa2\xb4\xdc\x28\x8a\x68\x11\x84\x97\x5a\x6d\ -\xb4\x08\x05\x39\xfd\x91\x4e\xb7\x38\x02\x16\xba\xfe\x70\x96\xca\ -\x20\xdd\x88\xc2\xb1\x59\x59\x4a\xa2\x6e\xcc\xb4\xd2\x91\x93\x2e\ -\x20\xa8\xa0\x8e\x9b\x17\xae\xc2\x01\x7a\xde\xc3\xf9\x4e\xef\xf9\ -\x38\xc0\x07\x7f\xd0\xd9\xd9\xce\x77\xde\xef\xfd\x7e\xcf\xf3\x3e\ -\xbf\xeb\xa7\x8c\x00\xfc\x02\x8a\xf5\x3b\x73\x1f\x3b\xae\x7a\x31\ -\x93\x24\x34\x98\x63\x16\x94\x19\x04\x57\x94\xf1\x6e\xe8\x31\xd6\ -\xd2\x82\x6c\xf1\x1b\x14\x84\x82\xe9\x80\xdb\x15\x98\x2a\x89\x1b\ -\x37\x10\x33\x6f\x1e\x3e\xf4\xf0\xc0\xf3\xe2\x7f\x5f\x1f\x7e\xbc\ -\x73\x07\x9f\x2d\x5c\x88\xea\xa9\x80\x8f\x21\x30\x19\x89\x6b\xd7\ -\x10\xeb\xe7\x07\x93\xd1\x88\x78\x57\x57\xc7\xe7\x86\x86\x80\xfe\ -\x7e\x9c\xe8\xe8\x40\x5e\x48\x08\x4e\xe9\xb5\xa9\xe8\x61\x4b\xe0\ -\x95\x04\xfe\x88\xc0\x6b\x54\xe0\xe1\x61\x60\x60\x00\x67\xc5\xb5\ -\x9b\x1b\x56\xba\xb8\x38\x10\x39\x4e\x22\x9f\x90\xc8\xd9\xc9\x54\ -\x55\xf4\x48\x66\x19\x04\x0c\x06\x07\xe0\x0b\x5d\x5d\x30\x07\x06\ -\xa2\x42\xac\xb5\xb6\x22\xd1\xc7\x07\xb9\x24\x12\xa9\x12\xb1\x58\ -\xf8\xcc\x2c\x07\x20\xa7\x58\xca\x38\x3e\x8e\xa2\x8f\x4d\x5e\xde\ -\x48\x50\xd7\x86\x87\xac\xc0\xbf\x77\x77\xc3\x1c\x10\x80\x72\x67\ -\xcf\xb5\xb5\x21\xc9\xdb\xdb\x4a\xe4\x31\x17\xc9\x45\x3d\xdd\xa8\ -\x64\x8c\xe4\x31\x46\x7e\x99\x90\x00\xa5\x8e\xf4\xf5\x45\x2e\xa5\ -\x4e\x54\x4f\x2c\xef\xd0\x9b\x1d\xb2\x7a\xea\x95\x50\x84\xae\xa9\ -\xe8\xec\x84\x99\xae\xb9\x60\xb7\x59\x57\x07\x37\xca\xf7\xe8\x9c\ -\x39\xd8\x4a\xe0\x24\x15\x78\x64\x04\x16\x9e\xb8\xb6\xa7\x07\xbb\ -\x7d\xfd\x70\x58\x2f\x09\x19\xbc\xb3\x03\x29\x5e\x5e\xd8\x4c\x45\ -\x96\x31\xe1\x0d\x12\x91\xf2\x7b\xf7\xb0\xeb\xf6\x6d\xfc\xa1\xb4\ -\xb7\x23\x93\x9b\x76\x10\xdc\xc7\x6e\x84\x26\xe8\xe3\xd3\x85\x85\ -\x78\x71\xe7\x4e\xf4\xe8\x4d\x51\x67\x7b\xb6\x6d\x83\x57\x56\x16\ -\xbe\xe3\x21\x57\x2b\xd2\x53\x24\xd1\x45\x02\x26\xeb\x52\x73\x33\ -\x22\xa8\x40\x0e\x49\xac\xa7\x02\x06\x95\x04\x15\x68\xa4\x02\x7b\ -\x2a\x2b\xb1\x7f\xc3\x06\xf4\x4d\x44\x42\x7b\xef\xe0\x41\x78\x24\ -\x24\xe0\x1d\x1e\xee\x03\x2a\x10\xa6\x82\x53\x01\x0b\xc1\x0f\x51\ -\x81\xfc\xe0\x60\xd4\x3b\x18\x69\x68\xc0\x23\x8c\x6c\x41\x24\x8d\ -\x44\x5c\x25\x22\x4d\xc2\x15\xc5\xc5\xf8\x22\x6b\x33\xfa\xb5\x24\ -\x64\xf0\x4f\x77\xc3\x98\x9e\x8e\xb7\x6d\xd2\x87\x4a\xc0\x43\x04\ -\x2e\x61\xc6\xe4\x87\x87\xe3\xcf\x09\xb3\xa0\xb1\x11\x4b\x19\xe9\ -\x39\xee\xee\x78\x93\x44\x14\x89\x48\x03\xb3\xa0\xc0\xcf\x1f\xfb\ -\x9c\x3d\xd7\xd1\x8e\x77\x99\x05\xd9\x04\x0e\x97\x80\x47\x1e\x3c\ -\xc0\x57\xcc\x90\xfc\xb0\x30\x5c\x1e\x37\x0b\xae\x5f\x47\x08\x4f\ -\x1f\xcf\xd3\x7f\xa9\xae\x35\x35\x61\x99\xbf\xbf\x35\x38\xdf\x50\ -\x0b\x90\x8d\xc8\xdf\xee\x46\x2c\x91\x0d\xf5\xf7\x71\xcd\x1d\x4b\ -\x54\x60\x5b\x41\x3a\xc2\x18\xdb\x15\x1a\x8a\x5a\xc9\xf7\x6f\xdd\ -\xbf\x8f\xf3\xc4\xaa\xb3\x12\x20\xb3\x28\x4f\x4f\xbc\x4e\xd6\x9b\ -\x08\xe2\x4d\xb6\x17\x6d\x45\xe6\x6b\x89\xdc\x0a\x51\x82\x09\x90\ -\x64\x2f\xc1\xca\xd8\x08\x54\x81\x69\xa3\x5c\x94\xe4\x45\x8b\x70\ -\x51\xbd\x4d\xe9\x5f\x13\xc5\x8a\x36\x56\x70\x4f\x2f\x0f\xb1\x9f\ -\xd8\x47\x14\xde\x48\x22\x81\x0c\x9e\x72\x95\xa6\xcc\xfe\x4a\xbf\ -\xe7\x51\x81\x0a\xd5\x08\x83\x35\x52\x14\x28\x4f\x2f\xbc\xec\xcc\ -\x05\xbd\x3d\x38\x2a\x0a\x0e\x83\xcb\x9e\xe7\x54\x20\x91\xf1\x60\ -\xe2\x01\x9f\xd0\x94\xeb\x33\xc4\x2e\x52\x24\xe3\x31\x73\xe7\x5a\ -\x1b\xcd\x73\x1a\x22\xe7\x7a\x7b\x61\xa6\x02\x95\xda\x80\x1b\xb2\ -\x8c\xfe\xba\x1a\xc6\x16\x2b\x2a\x90\xc0\x83\x89\xaa\xf8\x94\x06\ -\xf8\xa7\xbb\x77\xad\x24\xab\x9d\x06\x21\x7b\x7c\x1c\x89\x08\xa9\ -\x9e\xd5\x10\xa9\x31\x7a\x20\x5a\x06\xe2\xde\x18\xdb\x3c\x50\x2d\ -\x13\x63\x3c\xd4\x10\x38\x5a\x06\xa6\x5b\x4e\x12\xd8\xcc\xbd\x55\ -\xba\x9a\xd1\xad\x5b\x88\x9f\x3d\xdb\xea\xf7\x58\x2b\x11\x69\x67\ -\x5b\x2b\x5e\x60\x8c\xfc\x20\xef\xa7\x9c\x6b\x03\x02\xf1\xbd\x1c\ -\x13\x36\xe0\x53\x0c\xba\xbc\xf9\xf3\x71\x62\xdc\x66\xb4\x77\x2f\ -\x8c\x29\x29\x78\x8f\x92\xc5\x52\xba\x22\xca\xf3\xb3\xe4\x9a\x35\ -\x41\xc1\x12\xd8\xc8\xa8\x22\x34\x7c\x9a\x29\xb9\x5d\x2c\x31\xf5\ -\xb6\x93\xe8\x6a\xeb\x89\x25\xa2\x2d\xcd\x58\x4b\x5b\xc7\x25\x5b\ -\xcf\xb0\xd7\xbc\x3f\x38\x88\x73\xa5\xa5\xd8\x93\x91\x81\x7e\x85\ -\xfe\x15\x46\x36\x71\xba\x09\x92\xfb\x39\x9b\x86\x88\xe2\x33\xb2\ -\xb4\x0c\xb2\x1a\x02\x45\xcb\xae\x11\x1f\x8d\xd4\x35\x0c\x52\x07\ -\x57\x31\x8b\x56\x11\xd8\xa4\xce\x13\x22\x95\x39\x45\xb5\xd4\xd6\ -\x62\xab\xc2\x92\x18\xc2\x07\x9f\xe6\xcd\x2d\x34\xbe\x5c\x36\xe6\ -\x2c\xb8\x6e\xde\xc4\x4b\x2c\xdb\xc2\xd8\x93\xea\x5e\x41\x84\xa4\ -\xcf\xd3\x96\x79\xc1\x02\x1c\x75\x16\xac\x32\x69\x92\xbc\xc4\xfd\ -\x85\x57\xae\xe0\xa4\xa2\xf1\x63\x8a\xe8\xe7\x24\xb2\x54\xee\xe7\ -\xdd\x5d\xa8\x64\xce\xe6\x2d\x5e\xfc\x5f\x3f\x67\x8c\xbc\x4a\x22\ -\x1f\x8b\x6b\x02\xef\xa0\x8f\xbf\x51\xef\x5d\xbd\x8a\x28\x56\x52\ -\x93\xb7\x8f\xe3\x3c\x41\xe0\xcb\x62\x9e\x60\xfc\x1c\x9e\x28\x08\ -\xc5\xbb\xc2\xb0\xb3\x7e\x4e\xd9\xbe\x15\x44\x58\xcb\x7f\x73\x16\ -\x50\xec\x25\x8f\x0b\x60\xba\xf3\x95\x71\xe6\x09\x17\xc8\xb3\xc2\ -\x64\x43\x69\x7b\x1b\x36\x52\x91\x1c\xa6\xd4\xc3\xf2\xa8\x45\x22\ -\x65\x54\xcb\x1c\x11\x81\x4b\x62\xad\xbe\x1e\xcb\x79\xaa\x5c\x02\ -\x27\x6b\x46\xb7\xbf\x78\xe2\x7c\xff\x00\x1c\xd0\x35\x94\x3a\x6b\ -\xb7\x71\x71\x30\x94\x95\x61\x3d\xab\x99\x68\x32\x0f\xc9\x44\xe8\ -\xc7\x62\x71\xcd\x78\x48\xd7\x00\xff\xc3\x2a\x5a\x90\x9c\x8c\x43\ -\x55\x55\xb0\xe8\x1a\xcb\x27\x1b\x38\x72\x73\x31\x2b\x3b\x1b\x1b\ -\x49\x64\x8b\xdc\xed\xe4\x21\x46\x74\x4b\x02\x17\x16\x14\xe0\x80\ -\xd9\x8c\x41\xdd\x2f\x26\x53\x79\x2b\x2a\x2a\x82\x5b\x5a\x1a\x52\ -\x45\xff\x10\xa3\x96\x58\x13\xa3\x1b\xd3\xf9\xf3\x92\x12\x94\x66\ -\x66\x62\x60\x4a\xaf\x66\xd3\x7d\x2f\x64\x21\xf1\x59\xb7\x6e\xb4\ -\x51\x1d\x3b\x86\xc4\xd4\x54\x74\x4d\xeb\xfd\xf0\xff\x7e\x3d\xff\ -\x17\x7a\xb3\x7d\x88\xf8\x58\x30\x70\x00\x00\x00\x00\x49\x45\x4e\ -\x44\xae\x42\x60\x82\ " -qt_resource_name = "\ +qt_resource_name = b"\ \x00\x07\ \x07\x3b\xe0\xb3\ \x00\x70\ @@ -3340,34 +3339,57 @@ \x00\x4d\ \x00\x75\x00\x6c\x00\x74\x00\x69\x00\x70\x00\x6c\x00\x65\x00\x4c\x00\x61\x00\x79\x00\x65\x00\x72\x00\x53\x00\x65\x00\x6c\x00\x65\ \x00\x63\x00\x74\x00\x69\x00\x6f\x00\x6e\ -\x00\x08\ -\x0a\x61\x5a\xa7\ +\x00\x0e\ +\x0f\x4d\xf8\xe7\ \x00\x69\ -\x00\x63\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x63\x00\x6f\x00\x6e\x00\x5f\x00\x63\x00\x6c\x00\x65\x00\x61\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ \x00\x12\ \x08\xbc\xb6\x47\ \x00\x69\ \x00\x63\x00\x6f\x00\x6e\x00\x5f\x00\x72\x00\x65\x00\x63\x00\x74\x00\x61\x00\x6e\x00\x67\x00\x6c\x00\x65\x00\x2e\x00\x70\x00\x6e\ \x00\x67\ -\x00\x0e\ -\x0f\x4d\xf8\xe7\ +\x00\x08\ +\x0a\x61\x5a\xa7\ \x00\x69\ -\x00\x63\x00\x6f\x00\x6e\x00\x5f\x00\x63\x00\x6c\x00\x65\x00\x61\x00\x72\x00\x2e\x00\x70\x00\x6e\x00\x67\ +\x00\x63\x00\x6f\x00\x6e\x00\x2e\x00\x70\x00\x6e\x00\x67\ " -qt_resource_struct = "\ +qt_resource_struct_v1 = b"\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ \x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\ \x00\x00\x00\x14\x00\x02\x00\x00\x00\x03\x00\x00\x00\x03\ -\x00\x00\x00\x5c\x00\x00\x00\x00\x00\x01\x00\x00\xc4\xc9\ +\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x05\x9a\ +\x00\x00\x00\x92\x00\x00\x00\x00\x00\x01\x00\x00\x0a\x27\ \x00\x00\x00\x46\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x00\x86\x00\x00\x00\x00\x00\x01\x00\x00\xc9\x56\ " +qt_resource_struct_v2 = b"\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x02\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x14\x00\x02\x00\x00\x00\x03\x00\x00\x00\x03\ +\x00\x00\x00\x00\x00\x00\x00\x00\ +\x00\x00\x00\x68\x00\x00\x00\x00\x00\x01\x00\x00\x05\x9a\ +\x00\x00\x01\x4d\x00\x88\xb1\xe0\ +\x00\x00\x00\x92\x00\x00\x00\x00\x00\x01\x00\x00\x0a\x27\ +\x00\x00\x01\x4d\x00\x88\xb1\xe0\ +\x00\x00\x00\x46\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ +\x00\x00\x01\x4d\x00\x88\xb1\xe0\ +" + +qt_version = [int(v) for v in QtCore.qVersion().split('.')] +if qt_version < [5, 8, 0]: + rcc_version = 1 + qt_resource_struct = qt_resource_struct_v1 +else: + rcc_version = 2 + qt_resource_struct = qt_resource_struct_v2 + def qInitResources(): - QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) def qCleanupResources(): - QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) + QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) qInitResources() diff --git a/resources.qrc b/resources.qrc old mode 100644 new mode 100755 From fe2e6f333613a199101f42d1623a0e28523439cb Mon Sep 17 00:00:00 2001 From: Luiz Andrade Date: Mon, 10 Jun 2019 23:51:02 -0300 Subject: [PATCH 2/6] gitignore --- .gitignore | 55 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 31 insertions(+), 24 deletions(-) diff --git a/.gitignore b/.gitignore index 58bcbf8..4925b63 100644 --- a/.gitignore +++ b/.gitignore @@ -1,32 +1,33 @@ -# Windows image file caches -Thumbs.db -ehthumbs.db - -# Folder config file -Desktop.ini - -# Recycle Bin used on file shares -$RECYCLE.BIN/ - -# Windows Installer files -*.cab -*.msi -*.msm -*.msp - -# ========================= -# Operating System Files -# ========================= - -# OSX -# ========================= - +# Windows image file caches +Thumbs.db +ehthumbs.db + +# Folder config file +Desktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msm +*.msp + +# ========================= +# Operating System Files +# ========================= + +# OSX +# ========================= + .DS_Store .AppleDouble .LSOverride # Icon must end with two \r -Icon +Icon + # Thumbnails ._* @@ -41,3 +42,9 @@ Icon Network Trash Folder Temporary Items .apdisk + +# Python +.pyc +.*.pyc +.pydevproject +.project From e1729adf5939a6c3d2edb82cec414ee6e95c6b74 Mon Sep 17 00:00:00 2001 From: Luiz Andrade Date: Mon, 10 Jun 2019 23:55:53 -0300 Subject: [PATCH 3/6] gitignore --- .gitignore | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.gitignore b/.gitignore index 4925b63..eb6f9bd 100644 --- a/.gitignore +++ b/.gitignore @@ -44,7 +44,7 @@ Temporary Items .apdisk # Python -.pyc -.*.pyc -.pydevproject -.project +*.pyc +__pycache__/ +*.pydevproject +*.project From 1c5e7ccd75b17aa0cc5da5f5406bc02c5ac8af95 Mon Sep 17 00:00:00 2001 From: Luiz Andrade Date: Tue, 11 Jun 2019 00:05:37 -0300 Subject: [PATCH 4/6] gitignore --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index eb6f9bd..a33d4ae 100644 --- a/.gitignore +++ b/.gitignore @@ -48,3 +48,6 @@ Temporary Items __pycache__/ *.pydevproject *.project + +# VSCode +*.json \ No newline at end of file From 3b0a8401c3eb17fd86c40c3b164ee283af8363df Mon Sep 17 00:00:00 2001 From: Luiz Andrade Date: Wed, 25 Sep 2019 11:35:44 -0300 Subject: [PATCH 5/6] adjusting action management --- .gitignore | 5 ++- MultLayerSelection.py | 54 +++++++++++++++++++-------------- MultiLayerRectangleSelection.py | 11 +++++-- MultiLayerSelection.py | 14 +++++++-- 4 files changed, 57 insertions(+), 27 deletions(-) diff --git a/.gitignore b/.gitignore index a33d4ae..c53f803 100644 --- a/.gitignore +++ b/.gitignore @@ -50,4 +50,7 @@ __pycache__/ *.project # VSCode -*.json \ No newline at end of file +*.json + +#Linux +.directory \ No newline at end of file diff --git a/MultLayerSelection.py b/MultLayerSelection.py index 4c8bae0..189f5c7 100755 --- a/MultLayerSelection.py +++ b/MultLayerSelection.py @@ -63,6 +63,7 @@ def __init__(self, iface): self.toolbar = self.iface.addToolBar(u'MultipleSelection') self.toolbar.setObjectName(u'MultipleSelection') + self.actionList = [] def createToolButton(self, parent, text): button = QToolButton(parent) @@ -72,24 +73,19 @@ def createToolButton(self, parent, text): parent.addWidget(button) return button - def createAction(self, icon_path, text, callback): + def createAction(self, icon_path, text, callback, checkable=True): action = QAction( QIcon(icon_path), text, self.iface.mainWindow()) # connect the action to the run method - action.setCheckable(True) - action.toggled.connect(callback) - return action - - def createClearAction(self, icon_path, text): - action = QAction( - QIcon(icon_path), - text, - self.iface.mainWindow()) - # connect the action to the run method - action.setCheckable(False) - action.triggered.connect(self.clear) + action.setCheckable(checkable) + if checkable: + action.toggled.connect(callback) + else: + action.triggered.connect(callback) + self.iface.registerMainWindowAction(action, '') + self.actionList.append(action) return action def initGui(self): @@ -104,8 +100,10 @@ def initGui(self): self.runRectangle) # Create action that will start plugin configuration - self.actionClear = self.createClearAction(":/plugins/MultipleLayerSelection/icon_clear.png", - u"Clear selections") + self.actionClear = self.createAction(":/plugins/MultipleLayerSelection/icon_clear.png", + u"Clear selections", + self.clear, + checkable=False) self.tool = MultiLayerSelection(self.iface.mapCanvas(), self.actionCriar) self.toolRectangle = MultiLayerRectangleSelection(self.iface.mapCanvas(), self.actionCriarRectangle) @@ -120,11 +118,19 @@ def initGui(self): def unload(self): # Remove the plugin menu item and icon self.iface.mainWindow().removeToolBar(self.toolbar) + for action in self.actionList: + try: + self.iface.unregisterMainWindowAction(action) + except: + pass + self.tool.deactivate() + self.toolRectangle.deactivate() def clear(self): - self.actionCriar.setChecked(False) - self.actionCriarRectangle.setChecked(False) - self.selectionButton.setDefaultAction(self.selectionButton.sender()) + try: + self.selectionButton.setDefaultAction(self.actionClear) + except: + pass layers = self.iface.mapCanvas().layers() for layer in layers: if layer.type() == QgsMapLayer.RasterLayer: @@ -132,17 +138,21 @@ def clear(self): layer.removeSelection() def run(self, b): - self.actionCriarRectangle.setChecked(False) - self.selectionButton.setDefaultAction(self.selectionButton.sender()) if b: + try: + self.selectionButton.setDefaultAction(self.actionCriar) + except: + pass self.iface.mapCanvas().setMapTool(self.tool) else: self.iface.mapCanvas().unsetMapTool(self.tool) def runRectangle(self, b): - self.actionCriar.setChecked(False) - self.selectionButton.setDefaultAction(self.selectionButton.sender()) if b: + try: + self.selectionButton.setDefaultAction(self.actionCriarRectangle) + except: + pass self.iface.mapCanvas().setMapTool(self.toolRectangle) else: self.iface.mapCanvas().unsetMapTool(self.toolRectangle) diff --git a/MultiLayerRectangleSelection.py b/MultiLayerRectangleSelection.py index be3b237..54bdeac 100755 --- a/MultiLayerRectangleSelection.py +++ b/MultiLayerRectangleSelection.py @@ -74,9 +74,16 @@ def rectangle(self): return QgsRectangle(self.startPoint, self.endPoint) def deactivate(self): - self.rubberBand.hide() - QgsMapTool.deactivate(self) + self.rubberBand.reset() + try: + if self is not None: + QgsMapTool.deactivate(self) + except: + pass def activate(self): QgsMapTool.activate(self) + + def unload(self): + self.deactivate() diff --git a/MultiLayerSelection.py b/MultiLayerSelection.py index cd164b5..39ec4cd 100755 --- a/MultiLayerSelection.py +++ b/MultiLayerSelection.py @@ -26,9 +26,19 @@ def canvasPressEvent(self, e): layer.selectByRect(lRect, False) def deactivate(self): - if self is not None: - QgsMapTool.deactivate(self) + try: + if self is not None: + QgsMapTool.deactivate(self) + except: + pass def activate(self): QgsMapTool.activate(self) + try: + self.selectionButton.setDefaultAction(self.sender()) + except: + pass + + def unload(self): + self.deactivate() From e506e2a82ed100be9db8f0bd6e64a15a76c7bf3c Mon Sep 17 00:00:00 2001 From: Luiz Andrade Date: Wed, 25 Sep 2019 11:37:44 -0300 Subject: [PATCH 6/6] metadata update --- metadata.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/metadata.txt b/metadata.txt index 78b8468..2e210f1 100755 --- a/metadata.txt +++ b/metadata.txt @@ -10,7 +10,7 @@ name=Multiple Layer Selection qgisMinimumVersion=3.0 description=Allow the selection/deselection of features of multiple layers -version=1.0 +version=2.0 author=Felipe Ferrari and Luiz Andrade email=ferrari@gmail.com