From 70232ac4c7a6bab864ae9339fa1f82c590c0694f Mon Sep 17 00:00:00 2001 From: Tom LAVEILLE Date: Tue, 22 Oct 2024 15:30:09 +0200 Subject: [PATCH] Refont du code de CenRa_COPIE --- CenRa_COPIE/CenRa_Copie.py | 100 ++++ CenRa_COPIE/Makefile | 226 --------- CenRa_COPIE/README.html | 41 -- CenRa_COPIE/README.md | 5 + CenRa_COPIE/README.txt | 33 -- CenRa_COPIE/__init__.py | 37 +- CenRa_COPIE/{forms => }/about_form.py | 8 +- CenRa_COPIE/copie.py.bak | 360 -------------- CenRa_COPIE/copie_dialog.py | 42 -- CenRa_COPIE/copie_dialog.py.bak | 41 -- CenRa_COPIE/copie_dialog_base.py | 107 ----- CenRa_COPIE/copie_dialog_base.py.bak | 106 ----- CenRa_COPIE/{copie.py => copie_editor.py} | 254 ++-------- CenRa_COPIE/help/Makefile | 130 ------ CenRa_COPIE/help/make.bat | 155 ------ CenRa_COPIE/help/source/conf.py | 216 --------- CenRa_COPIE/help/source/index.rst | 20 - CenRa_COPIE/i18n/af.ts | 11 - CenRa_COPIE/{cenra.png => icon.png} | Bin CenRa_COPIE/issues.py | 88 ++++ CenRa_COPIE/metadata.txt | 4 +- CenRa_COPIE/pb_tool.cfg | 74 --- CenRa_COPIE/plugin_upload.py | 134 ------ CenRa_COPIE/plugin_upload.py.bak | 107 ----- CenRa_COPIE/pylintrc | 281 ----------- CenRa_COPIE/resources_rc.py | 441 ------------------ CenRa_COPIE/resources_rc.py.bak | 102 ---- CenRa_COPIE/resources_rc.qrc | 6 - CenRa_COPIE/scripts/compile-strings.sh | 12 - CenRa_COPIE/scripts/run-env-linux.sh | 28 -- CenRa_COPIE/scripts/update-strings.sh | 56 --- .../{table_copie.png => tools/icons/icon.png} | Bin CenRa_COPIE/tools/resources.py | 2 +- .../ui/CenRa_Copie_base.ui} | 0 CenRa_COPIE/tools/ui/CenRa_IssuesSend.ui | 332 +++++++++++++ .../ui/CenRa_about_form.ui} | 2 +- CenRa_POSTGIS/README.md | 2 +- README.md | 5 +- plugins.xml | 25 +- 39 files changed, 606 insertions(+), 2987 deletions(-) create mode 100644 CenRa_COPIE/CenRa_Copie.py delete mode 100644 CenRa_COPIE/Makefile delete mode 100644 CenRa_COPIE/README.html create mode 100644 CenRa_COPIE/README.md delete mode 100644 CenRa_COPIE/README.txt rename CenRa_COPIE/{forms => }/about_form.py (85%) delete mode 100644 CenRa_COPIE/copie.py.bak delete mode 100644 CenRa_COPIE/copie_dialog.py delete mode 100644 CenRa_COPIE/copie_dialog.py.bak delete mode 100644 CenRa_COPIE/copie_dialog_base.py delete mode 100644 CenRa_COPIE/copie_dialog_base.py.bak rename CenRa_COPIE/{copie.py => copie_editor.py} (55%) delete mode 100644 CenRa_COPIE/help/Makefile delete mode 100644 CenRa_COPIE/help/make.bat delete mode 100644 CenRa_COPIE/help/source/conf.py delete mode 100644 CenRa_COPIE/help/source/index.rst delete mode 100644 CenRa_COPIE/i18n/af.ts rename CenRa_COPIE/{cenra.png => icon.png} (100%) create mode 100644 CenRa_COPIE/issues.py delete mode 100644 CenRa_COPIE/pb_tool.cfg delete mode 100644 CenRa_COPIE/plugin_upload.py delete mode 100644 CenRa_COPIE/plugin_upload.py.bak delete mode 100644 CenRa_COPIE/pylintrc delete mode 100644 CenRa_COPIE/resources_rc.py delete mode 100644 CenRa_COPIE/resources_rc.py.bak delete mode 100644 CenRa_COPIE/resources_rc.qrc delete mode 100644 CenRa_COPIE/scripts/compile-strings.sh delete mode 100644 CenRa_COPIE/scripts/run-env-linux.sh delete mode 100644 CenRa_COPIE/scripts/update-strings.sh rename CenRa_COPIE/{table_copie.png => tools/icons/icon.png} (100%) rename CenRa_COPIE/{copie_dialog_base.ui => tools/ui/CenRa_Copie_base.ui} (100%) create mode 100644 CenRa_COPIE/tools/ui/CenRa_IssuesSend.ui rename CenRa_COPIE/{forms/copie_about_form.ui => tools/ui/CenRa_about_form.ui} (98%) diff --git a/CenRa_COPIE/CenRa_Copie.py b/CenRa_COPIE/CenRa_Copie.py new file mode 100644 index 00000000..0da1f969 --- /dev/null +++ b/CenRa_COPIE/CenRa_Copie.py @@ -0,0 +1,100 @@ +__copyright__ = "Copyright 2021, 3Liz" +__license__ = "GPL version 3" +__email__ = "info@3liz.org" + + +from qgis.core import QgsApplication +from qgis.PyQt.QtCore import QCoreApplication, Qt, QTranslator, QUrl +from qgis.PyQt.QtGui import QDesktopServices, QIcon +from qgis.PyQt.QtWidgets import QAction, QMessageBox +from qgis.utils import iface +import qgis + + +#include + +import os +from .tools.resources import ( + plugin_path, + resources_path, + maj_verif, +) +from .copie_editor import Copie_Editor +from .about_form import CopieAboutDialog + +from PyQt5.QtCore import * + +class PgCopie: + def __init__(self): + """ Constructor. """ + self.action_editor = None + self.issues = None + self.provider = None + self.locator_filter = None + self.dock_action = None + self.help_action = None + plugin_dir = os.path.dirname(__file__) + end_find = plugin_dir.rfind('\\')+1 + global NAME + NAME = plugin_dir[end_find:] + maj_verif(NAME) + + # Display About window on first use + version = qgis.utils.pluginMetadata('CenRa_Copie','version') + s = QSettings() + versionUse = s.value("copie/version", 1, type=str) + if str(versionUse) != str(version) : + s.setValue("copie/version", str(version)) + print(versionUse,version) + self.open_about_dialog() + + def initGui(self): + """ Build the plugin GUI. """ + + self.toolBar = iface.addToolBar("CenRa_Copie") + self.toolBar.setObjectName("CenRa_Copie") + + icon = QIcon(resources_path('icons', 'icon.png')) + + # Open the online help + self.help_action = QAction(icon, "CenRa_Copie", iface.mainWindow()) + iface.pluginHelpMenu().addAction(self.help_action) + self.help_action.triggered.connect(self.open_help) + if not self.action_editor: + self.action_editor = Copie_Editor() + + self.copie_editor = QAction(icon, 'Copie',None) + self.toolBar.addAction(self.copie_editor) + self.copie_editor.triggered.connect(self.open_editor) + + def open_about_dialog(self): + """ + About dialog + """ + dialog = CopieAboutDialog(iface) + dialog.exec_() + def open_help(): + """ Open the online help. """ + QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/')) + + def open_editor(self): + self.action_editor.show() + self.action_editor.raise_() + + def unload(self): + """ Unload the plugin. """ + if self.action_editor: + iface.removePluginMenu('CenRa_Copie',self.copie_editor) + + + if self.provider: + QgsApplication.processingRegistry().removeProvider(self.provider) + del self.provider + + if self.locator_filter: + iface.deregisterLocatorFilter(self.locator_filter) + del self.locator_filter + + if self.help_action: + iface.pluginHelpMenu().removeAction(self.help_action) + del self.help_action diff --git a/CenRa_COPIE/Makefile b/CenRa_COPIE/Makefile deleted file mode 100644 index 83240465..00000000 --- a/CenRa_COPIE/Makefile +++ /dev/null @@ -1,226 +0,0 @@ -#/*************************************************************************** -# Copie -# -# Permet la copie d'une table dans une base PostGis -# ------------------- -# begin : 2015-04-13 -# git sha : $Format:%H$ -# copyright : (C) 2015 by Guillaume COSTES - CEN Rhône-Alpes -# email : guillaume.costes@espaces-naturels.fr -# ***************************************************************************/ -# -#/*************************************************************************** -# * * -# * 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. * -# * * -# ***************************************************************************/ - -################################################# -# Edit the following to match your sources lists -################################################# - - -#Add iso code for any locales you want to support here (space separated) -# default is no locales -# LOCALES = af -LOCALES = - -# If locales are enabled, set the name of the lrelease binary on your system. If -# you have trouble compiling the translations, you may have to specify the full path to -# lrelease -#LRELEASE = lrelease -#LRELEASE = lrelease-qt4 - - -# translation -SOURCES = \ - __init__.py \ - copie.py \ - copie_dialog.py - -PLUGINNAME = Copie - -PY_FILES = \ - copie.py \ - copie_dialog.py \ - __init__.py - -UI_FILES = copie_dialog_base.ui - -EXTRAS = icon.png metadata.txt - -COMPILED_RESOURCE_FILES = resources_rc.py - -PEP8EXCLUDE=pydev,resources_rc.py,conf.py,third_party,ui - - -################################################# -# Normally you would not need to edit below here -################################################# - -HELP = help/build/html - -PLUGIN_UPLOAD = $(c)/plugin_upload.py - -RESOURCE_SRC=$(shell grep '^ *@@g;s/.*>//g' | tr '\n' ' ') - -QGISDIR=.qgis2 - -default: compile - -compile: $(COMPILED_RESOURCE_FILES) - -%_rc.py : %.qrc $(RESOURCES_SRC) - pyrcc4 -o $*_rc.py $< - -%.qm : %.ts - $(LRELEASE) $< - -test: compile transcompile - @echo - @echo "----------------------" - @echo "Regression Test Suite" - @echo "----------------------" - - @# Preceding dash means that make will continue in case of errors - @-export PYTHONPATH=`pwd`:$(PYTHONPATH); \ - export QGIS_DEBUG=0; \ - export QGIS_LOG_FILE=/dev/null; \ - nosetests -v --with-id --with-coverage --cover-package=. \ - 3>&1 1>&2 2>&3 3>&- || true - @echo "----------------------" - @echo "If you get a 'no module named qgis.core error, try sourcing" - @echo "the helper script we have provided first then run make test." - @echo "e.g. source run-env-linux.sh ; make test" - @echo "----------------------" - -deploy: compile doc transcompile - @echo - @echo "------------------------------------------" - @echo "Deploying plugin to your .qgis2 directory." - @echo "------------------------------------------" - # The deploy target only works on unix like operating system where - # the Python plugin directory is located at: - # $HOME/$(QGISDIR)/python/plugins - mkdir -p $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME) - cp -vf $(PY_FILES) $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME) - cp -vf $(UI_FILES) $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME) - cp -vf $(COMPILED_RESOURCE_FILES) $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME) - cp -vf $(EXTRAS) $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME) - cp -vfr i18n $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME) - cp -vfr $(HELP) $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME)/help - -# The dclean target removes compiled python files from plugin directory -# also deletes any .git entry -dclean: - @echo - @echo "-----------------------------------" - @echo "Removing any compiled python files." - @echo "-----------------------------------" - find $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME) -iname "*.pyc" -delete - find $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME) -iname ".git" -prune -exec rm -Rf {} \; - - -derase: - @echo - @echo "-------------------------" - @echo "Removing deployed plugin." - @echo "-------------------------" - rm -Rf $(HOME)/$(QGISDIR)/python/plugins/$(PLUGINNAME) - -zip: deploy dclean - @echo - @echo "---------------------------" - @echo "Creating plugin zip bundle." - @echo "---------------------------" - # The zip target deploys the plugin and creates a zip file with the deployed - # content. You can then upload the zip file on http://plugins.qgis.org - rm -f $(PLUGINNAME).zip - cd $(HOME)/$(QGISDIR)/python/plugins; zip -9r $(CURDIR)/$(PLUGINNAME).zip $(PLUGINNAME) - -package: compile - # Create a zip package of the plugin named $(PLUGINNAME).zip. - # This requires use of git (your plugin development directory must be a - # git repository). - # To use, pass a valid commit or tag as follows: - # make package VERSION=Version_0.3.2 - @echo - @echo "------------------------------------" - @echo "Exporting plugin to zip package. " - @echo "------------------------------------" - rm -f $(PLUGINNAME).zip - git archive --prefix=$(PLUGINNAME)/ -o $(PLUGINNAME).zip $(VERSION) - echo "Created package: $(PLUGINNAME).zip" - -upload: zip - @echo - @echo "-------------------------------------" - @echo "Uploading plugin to QGIS Plugin repo." - @echo "-------------------------------------" - $(PLUGIN_UPLOAD) $(PLUGINNAME).zip - -transup: - @echo - @echo "------------------------------------------------" - @echo "Updating translation files with any new strings." - @echo "------------------------------------------------" - @chmod +x scripts/update-strings.sh - @scripts/update-strings.sh $(LOCALES) - -transcompile: - @echo - @echo "----------------------------------------" - @echo "Compiled translation files to .qm files." - @echo "----------------------------------------" - @chmod +x scripts/compile-strings.sh - @scripts/compile-strings.sh $(LRELEASE) $(LOCALES) - -transclean: - @echo - @echo "------------------------------------" - @echo "Removing compiled translation files." - @echo "------------------------------------" - rm -f i18n/*.qm - -clean: - @echo - @echo "------------------------------------" - @echo "Removing uic and rcc generated files" - @echo "------------------------------------" - rm $(COMPILED_UI_FILES) $(COMPILED_RESOURCE_FILES) - -doc: - @echo - @echo "------------------------------------" - @echo "Building documentation using sphinx." - @echo "------------------------------------" - cd help; make html - -pylint: - @echo - @echo "-----------------" - @echo "Pylint violations" - @echo "-----------------" - @pylint --reports=n --rcfile=pylintrc . || true - @echo - @echo "----------------------" - @echo "If you get a 'no module named qgis.core' error, try sourcing" - @echo "the helper script we have provided first then run make pylint." - @echo "e.g. source run-env-linux.sh ; make pylint" - @echo "----------------------" - - -# Run pep8 style checking -#http://pypi.python.org/pypi/pep8 -pep8: - @echo - @echo "-----------" - @echo "PEP8 issues" - @echo "-----------" - @pep8 --repeat --ignore=E203,E121,E122,E123,E124,E125,E126,E127,E128 --exclude $(PEP8EXCLUDE) . || true - @echo "-----------" - @echo "Ignored in PEP8 check:" - @echo $(PEP8EXCLUDE) diff --git a/CenRa_COPIE/README.html b/CenRa_COPIE/README.html deleted file mode 100644 index b67f7f70..00000000 --- a/CenRa_COPIE/README.html +++ /dev/null @@ -1,41 +0,0 @@ - - -

Plugin Builder Results

- -Congratulations! You just built a plugin for QGIS!

- -
-Your plugin Copie was created in:
-  C:\Users\gcostes\.qgis2\python\plugins\Copie -

-Your QGIS plugin directory is located at:
-  C:/Users/gcostes/.qgis2/python/plugins -

-

What's Next

-
    -
  1. In your plugin directory, compile the resources file using pyrcc4 (simply run make if you have automake or use pb_tool) -
  2. Test the generated sources using make test (or run tests from your IDE) -
  3. Copy the entire directory containing your new plugin to the QGIS plugin directory (see Notes below) -
  4. Test the plugin by enabling it in the QGIS plugin manager -
  5. Customize it by editing the implementation file copie.py -
  6. Create your own custom icon, replacing the default icon.png -
  7. Modify your user interface by opening copie_dialog_base.ui in Qt Designer -
-Notes: -
    -
  • You can use the Makefile to compile and deploy when you - make changes. This requires GNU make (gmake). The Makefile is ready to use, however you - will have to edit it to add addional Python source files, dialogs, and translations. -
  • You can also use pb_tool to compile and deploy your plugin. Tweak the pb_tool.cfg file included with your plugin as you add files. Install pb_tool using - pip or easy_install. See http://loc8.cc/pb_tool for more information. -
-
-
-

-For information on writing PyQGIS code, see http://loc8.cc/pyqgis_resources for a list of resources. -

-
-GeoApt LLC -©2011-2015 GeoApt LLC - geoapt.com - - diff --git a/CenRa_COPIE/README.md b/CenRa_COPIE/README.md new file mode 100644 index 00000000..652f0b4f --- /dev/null +++ b/CenRa_COPIE/README.md @@ -0,0 +1,5 @@ +# Plugin_COPIE +--- +## Objectif ! +Vise à faciliter la création table dans PostgreSQL en utilisant des table déja existant, +tout en utilisant des modèles homogènes pour la saisie. diff --git a/CenRa_COPIE/README.txt b/CenRa_COPIE/README.txt deleted file mode 100644 index b966603a..00000000 --- a/CenRa_COPIE/README.txt +++ /dev/null @@ -1,33 +0,0 @@ -Plugin Builder Results - -Your plugin Copie was created in: - C:\Users\gcostes\.qgis2\python\plugins\Copie - -Your QGIS plugin directory is located at: - C:/Users/gcostes/.qgis2/python/plugins - -What's Next: - - * Copy the entire directory containing your new plugin to the QGIS plugin - directory - - * Compile the resources file using pyrcc4 - - * Run the tests (``make test``) - - * Test the plugin by enabling it in the QGIS plugin manager - - * Customize it by editing the implementation file: ``copie.py`` - - * Create your own custom icon, replacing the default icon.png - - * Modify your user interface by opening Copie.ui in Qt Designer - - * You can use the Makefile to compile your Ui and resource files when - you make changes. This requires GNU make (gmake) - -For more information, see the PyQGIS Developer Cookbook at: -http://www.qgis.org/pyqgis-cookbook/index.html - -(C) 2011-2014 GeoApt LLC - geoapt.com -Git revision : $Format:%H$ diff --git a/CenRa_COPIE/__init__.py b/CenRa_COPIE/__init__.py index 72443b8f..6328ac0f 100644 --- a/CenRa_COPIE/__init__.py +++ b/CenRa_COPIE/__init__.py @@ -1,35 +1,6 @@ # -*- coding: utf-8 -*- -""" -/*************************************************************************** - Copie - A QGIS plugin - Permet la copie d'une table dans une base PostGis - ------------------- - begin : 2015-04-13 - copyright : (C) 2015 by Guillaume COSTES - CEN Rhône-Alpes - email : guillaume.costes@espaces-naturels.fr - git sha : $Format:%H$ - ***************************************************************************/ -/*************************************************************************** - * * - * 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. * - * * - ***************************************************************************/ - This script initializes the plugin, making it known to QGIS. -""" - - -# noinspection PyPep8Naming -def classFactory(iface): # pylint: disable=invalid-name - """Load Copie class from file Copie. - - :param iface: A QGIS interface instance. - :type iface: QgsInterface - """ - # - from .copie import Copie - return Copie(iface) +def classFactory(iface): + _ = iface + from CenRa_COPIE.CenRa_Copie import PgCopie + return PgCopie() diff --git a/CenRa_COPIE/forms/about_form.py b/CenRa_COPIE/about_form.py similarity index 85% rename from CenRa_COPIE/forms/about_form.py rename to CenRa_COPIE/about_form.py index 4e9790d7..cb0794bc 100644 --- a/CenRa_COPIE/forms/about_form.py +++ b/CenRa_COPIE/about_form.py @@ -6,13 +6,13 @@ from qgis.PyQt import uic from qgis.PyQt.QtGui import QPixmap from qgis.PyQt.QtWidgets import QDialog -from ..tools.resources import devlog +from .tools.resources import devlog ABOUT_FORM_CLASS, _ = uic.loadUiType( os.path.join( - str(Path(__file__).resolve().parent.parent), - 'forms', - 'copie_about_form.ui' + str(Path(__file__).resolve().parent), + 'tools/ui', + 'CenRa_about_form.ui' ) ) diff --git a/CenRa_COPIE/copie.py.bak b/CenRa_COPIE/copie.py.bak deleted file mode 100644 index 057d5db1..00000000 --- a/CenRa_COPIE/copie.py.bak +++ /dev/null @@ -1,360 +0,0 @@ -# -*- coding: utf-8 -*- -""" -/*************************************************************************** - Copie - A QGIS plugin - Permet la copie d'une table dans une base PostGis - ------------------- - begin : 2015-04-13 - git sha : $Format:%H$ - copyright : (C) 2015 by Guillaume COSTES - CEN Rhône-Alpes - email : guillaume.costes@espaces-naturels.fr - ***************************************************************************/ - -/*************************************************************************** - * * - * 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. * - * * - ***************************************************************************/ -""" -#from PyQt4.QtCore import * -#from PyQt4.QtGui import * -from qgis.core import * -from qgis.gui import * -# Initialize Qt resources from file resources.py -import resources_rc -# Import the code for the dialog -from copie_dialog import CopieDialog -import os.path - - -class Copie: - """QGIS 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', - 'Copie_{}.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) - - # Create the dialog (after translation) and keep reference - self.dlg = CopieDialog() - - # Declare instance attributes - self.actions = [] - self.menu = self.tr(u'&Copie') - # TODO: We are going to let the user set this up in a future iteration - self.toolbar = self.iface.addToolBar(u'Copie') - self.toolbar.setObjectName(u'Copie') - - # 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('Copie', 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 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: - self.toolbar.addAction(action) - - if add_to_menu: - self.iface.addPluginToMenu( - self.menu, - action) - - self.actions.append(action) - - return action - - def initGui(self): - """Create the menu entries and toolbar icons inside the QGIS GUI.""" - - icon_path = ':/plugins/Copie/table_copie.png' - self.add_action( - icon_path, - text=self.tr(u'Copie'), - 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.tr(u'&Copie'), - action) - self.iface.removeToolBarIcon(action) - # remove the toolbar - del self.toolbar - - - def run(self): - """Run method that performs all the real work""" - layer = self.iface.activeLayer() - - if layer == None : - self.iface.messageBar().pushMessage(u"Vous devez sélectionner une table !", level=QgsMessageBar.WARNING, duration=5) - - else : - # Récupération des sources de la couche active - list_sources = layer.source().split(" ") - # dbname - source_db = [s for s in list_sources if "dbname" in s][0].split("'")[1] - # schema - source_schema = [s for s in list_sources if "table" in s][0].split('"')[1] - # tablename - source_tablename = [s for s in list_sources if "table" in s][0].split('"')[3] - - if source_db != 'sig4269': - self.iface.messageBar().pushMessage(u"Un référentiel ne peut être copié, utilisez les filtres !", level=QgsMessageBar.CRITICAL, duration=10) - - else : - import psycopg2 - - config = "//100.100.100.100/bd_sig/z_QGIS/config.txt" # Chemin du fichier config - # Fonction de lecture des lignes du fichier config - def readline(n): - with open(config, "r") as f: - for lineno, line in enumerate(f): - if lineno == n: - return line.strip() # Permet d'enlever les retours chariots - - host = readline(10) - port = readline(12) - dbname = readline(14) - user = readline(16) - password = readline(18) - - con = psycopg2.connect("dbname="+ dbname + " user=" + user + " host=" + host + " password=" + password) - cur = con.cursor() - # Creation de la liste des schemas de la base de donnees - SQL = """WITH list_schema AS ( - SELECT catalog_name, schema_name - FROM information_schema.schemata - WHERE schema_name <> 'information_schema' - AND schema_name !~ E'^pg_' - ORDER BY schema_name - ) - - SELECT string_agg(schema_name,',') - FROM list_schema - GROUP BY catalog_name""" - - cur.execute(SQL) - - list_brut = str(cur.next()) - - list = list_brut [3:-3] - listItems = list.split(",") - - con.close() - - self.dlg.schema.clear() - self.dlg.schema.addItems(listItems) - self.dlg.schema.setCurrentIndex(-1) # Pour ne pas commencer la liste au premier schema - - - self.dlg.table_source.setText(source_schema + "." + source_tablename) # Affiche le nom de la table source - # show the dialog - self.dlg.show() - # Run the dialog event loop - result = self.dlg.exec_() - # See if OK was pressed - if result: - #******************************debut script********************************* - ### config.txt - config = "//100.100.100.100/bd_sig/z_QGIS/config.txt" # Chemin du fichier config - - # Fonction de lecture des lignes du fichier config - def readline(n): - with open(config, "r") as f: - for lineno, line in enumerate(f): - if lineno == n: - return line.strip() # Permet d'enlever les retours chariots - - # Recuperation des donnees - host = readline(10) - port = readline(12) - dbname = readline(14) - user = readline(16) - password = readline(18) - - con = psycopg2.connect("dbname="+ dbname + " user=" + user + " host=" + host + " password=" + password) - cur = con.cursor() - - # Récupération de la couche active - layer = self.iface.activeLayer() - - # Récupération des sources de la couche active - list_sources = layer.source().split(" ") - # dbname - source_db = [s for s in list_sources if "dbname" in s][0].split("'")[1] - # schema - source_schema = [s for s in list_sources if "table" in s][0].split('"')[1] - # tablename - source_tablename = [s for s in list_sources if "table" in s][0].split('"')[3] - - if self.dlg.schema.currentIndex() == -1 : - QMessageBox.warning(None, "Oups :", "Veuillez choisir un dossier de destination.") - return - - schema = self.dlg.schema.currentText() - - if self.dlg.table_destination.text() == '' : - QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de destination.") - return - - if self.dlg.annee.text() == 'aaaa' or self.dlg.annee.text() == '': - tablename = schema + "_" + self.dlg.table_destination.text().lower() - else : - tablename = schema + "_" + self.dlg.table_destination.text().lower() + "_" + self.dlg.annee.text() - - tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis - - geom = readline(6) - - if self.dlg.table_vide.isChecked() == 1 : - SQL_table = "CREATE TABLE " + schema + "." + tablename + " AS SELECT * FROM " + source_schema + "." + source_tablename + " LIMIT 0;" - else : - SQL_table = "CREATE TABLE " + schema + "." + tablename + " AS SELECT * FROM " + source_schema + "." + source_tablename - - - SQL_pkey = "ALTER TABLE " + schema + "." + tablename + " ADD CONSTRAINT " + tablename + "_pkey" + " PRIMARY KEY (gid)" - SQL_sequence_01 = "CREATE SEQUENCE " + schema + "." + tablename + "_gid_seq" + " INCREMENT 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 CACHE 1;" - SQL_sequence_02 = "ALTER TABLE " + schema + "." + tablename + " ALTER COLUMN gid SET DEFAULT nextval(\'" + schema + "." + tablename + "_gid_seq\'::regclass);" - SQL_sequence_03 = "SELECT setval(\'" + schema + "." + tablename + "_gid_seq\'::regclass, (SELECT max(gid) AS max_gid FROM " + schema + "." + tablename + "));" - SQL_sequence_04 = "ALTER SEQUENCE " + schema + "." + tablename + "_gid_seq" + " OWNED BY " + schema + "." + tablename + ".gid;" - - SQL_trigger_area_m2 = "CREATE TRIGGER area_m2" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_m2();" - SQL_trigger_area_ha = "CREATE TRIGGER area_ha" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.area_ha();" - SQL_trigger_length_m = "CREATE TRIGGER length_m" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_m();" - SQL_trigger_length_km = "CREATE TRIGGER length_km" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.length_km();" - SQL_trigger_coordonnees = "CREATE TRIGGER coordonnees" + tablename + " BEFORE INSERT OR UPDATE ON " + schema + "." + tablename + " FOR EACH ROW EXECUTE PROCEDURE ref.coordonnees();" - - cur.execute(SQL_table) - cur.execute(SQL_pkey) - cur.execute(SQL_sequence_01) - cur.execute(SQL_sequence_02) - cur.execute(SQL_sequence_03) - cur.execute(SQL_sequence_04) - - if layer.wkbType() == QGis.WKBPoint : - cur.execute(SQL_trigger_coordonnees) - - if layer.wkbType() == QGis.WKBMultiLineString : - cur.execute(SQL_trigger_length_m) - cur.execute(SQL_trigger_length_km) - - if layer.wkbType() == QGis.WKBMultiPolygon : - cur.execute(SQL_trigger_area_m2) - cur.execute(SQL_trigger_area_ha) - - con.commit() - - ### Affichage de la table - uri = QgsDataSourceURI() - # set host name, port, database name, username and password - uri.setConnection(host ,port ,dbname ,user ,password) - # set database schema, table name, geometry column and optionaly subset (WHERE clause) - uri.setDataSource(schema, tablename, geom) - - layer = self.iface.addVectorLayer(uri.uri(), tablename_qgis, "postgres") - - con.commit() - con.close() - - self.iface.messageBar().pushMessage("Table \"" + source_schema + "." + source_tablename + u"\" copiée dans \"" + schema + "." + tablename + "\"." , level=QgsMessageBar.INFO, duration=10) - pass diff --git a/CenRa_COPIE/copie_dialog.py b/CenRa_COPIE/copie_dialog.py deleted file mode 100644 index 95c2d782..00000000 --- a/CenRa_COPIE/copie_dialog.py +++ /dev/null @@ -1,42 +0,0 @@ -# -*- coding: utf-8 -*- -""" -/*************************************************************************** - CopieDialog - A QGIS plugin - Permet la copie d'une table dans une base PostGis - ------------------- - begin : 2015-04-13 - git sha : $Format:%H$ - copyright : (C) 2015 by Guillaume COSTES - CEN Rhône-Alpes - email : guillaume.costes@espaces-naturels.fr - ***************************************************************************/ - -/*************************************************************************** - * * - * 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. * - * * - ***************************************************************************/ -""" - -import os - -from qgis.PyQt import QtCore, QtGui, QtGui, uic -from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog - -FORM_CLASS, _ = uic.loadUiType(os.path.join( - os.path.dirname(__file__), 'copie_dialog_base.ui')) - - -class CopieDialog(QDialog, FORM_CLASS): - def __init__(self, parent=None): - """Constructor.""" - super(CopieDialog, self).__init__(parent) - # Set up the user interface from Designer. - # After setupUI you can access any designer object by doing - # self., and you can use autoconnect slots - see - # http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html - # #widgets-and-dialogs-with-auto-connect - self.setupUi(self) diff --git a/CenRa_COPIE/copie_dialog.py.bak b/CenRa_COPIE/copie_dialog.py.bak deleted file mode 100644 index a951555c..00000000 --- a/CenRa_COPIE/copie_dialog.py.bak +++ /dev/null @@ -1,41 +0,0 @@ -# -*- coding: utf-8 -*- -""" -/*************************************************************************** - CopieDialog - A QGIS plugin - Permet la copie d'une table dans une base PostGis - ------------------- - begin : 2015-04-13 - git sha : $Format:%H$ - copyright : (C) 2015 by Guillaume COSTES - CEN Rhône-Alpes - email : guillaume.costes@espaces-naturels.fr - ***************************************************************************/ - -/*************************************************************************** - * * - * 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. * - * * - ***************************************************************************/ -""" - -import os - -from PyQt4 import QtGui, uic - -FORM_CLASS, _ = uic.loadUiType(os.path.join( - os.path.dirname(__file__), 'copie_dialog_base.ui')) - - -class CopieDialog(QtGui.QDialog, FORM_CLASS): - def __init__(self, parent=None): - """Constructor.""" - super(CopieDialog, self).__init__(parent) - # Set up the user interface from Designer. - # After setupUI you can access any designer object by doing - # self., and you can use autoconnect slots - see - # http://qt-project.org/doc/qt-4.8/designer-using-a-ui-file.html - # #widgets-and-dialogs-with-auto-connect - self.setupUi(self) diff --git a/CenRa_COPIE/copie_dialog_base.py b/CenRa_COPIE/copie_dialog_base.py deleted file mode 100644 index 1310a4e3..00000000 --- a/CenRa_COPIE/copie_dialog_base.py +++ /dev/null @@ -1,107 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'copie_dialog_base.ui' -# -# Created: Tue Apr 14 11:48:04 2015 -# by: PyQt4 UI code generator 4.10.2 -# -# WARNING! All changes made in this file will be lost! - -from builtins import object -from qgis.PyQt import QtCore, QtGui - -try: - _fromUtf8 = QtCore.QString.fromUtf8 -except AttributeError: - def _fromUtf8(s): - return s - -try: - _encoding = QtGui.QApplication.UnicodeUTF8 - def _translate(context, text, disambig): - return QtGui.QApplication.translate(context, text, disambig, _encoding) -except AttributeError: - def _translate(context, text, disambig): - return QtGui.QApplication.translate(context, text, disambig) - -class Ui_CopieDialogBase(object): - def setupUi(self, CopieDialogBase): - CopieDialogBase.setObjectName(_fromUtf8("CopieDialogBase")) - CopieDialogBase.resize(386, 290) - self.button_box = QtGui.QDialogButtonBox(CopieDialogBase) - self.button_box.setGeometry(QtCore.QRect(100, 250, 161, 32)) - self.button_box.setOrientation(QtCore.Qt.Horizontal) - self.button_box.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) - self.button_box.setObjectName(_fromUtf8("button_box")) - self.schema_label = QtGui.QLabel(CopieDialogBase) - self.schema_label.setGeometry(QtCore.QRect(20, 100, 121, 29)) - self.schema_label.setMaximumSize(QtCore.QSize(10000, 16777215)) - self.schema_label.setObjectName(_fromUtf8("schema_label")) - self.label_nom_table = QtGui.QLabel(CopieDialogBase) - self.label_nom_table.setGeometry(QtCore.QRect(20, 150, 131, 29)) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.label_nom_table.setFont(font) - self.label_nom_table.setObjectName(_fromUtf8("label_nom_table")) - self.schema = QtGui.QComboBox(CopieDialogBase) - self.schema.setGeometry(QtCore.QRect(20, 130, 351, 20)) - self.schema.setObjectName(_fromUtf8("schema")) - self.table_destination = QtGui.QLineEdit(CopieDialogBase) - self.table_destination.setGeometry(QtCore.QRect(20, 180, 291, 20)) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.table_destination.setFont(font) - self.table_destination.setObjectName(_fromUtf8("table_destination")) - self.annee = QtGui.QLineEdit(CopieDialogBase) - self.annee.setGeometry(QtCore.QRect(320, 180, 50, 20)) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.annee.setFont(font) - self.annee.setAlignment(QtCore.Qt.AlignCenter) - self.annee.setObjectName(_fromUtf8("annee")) - self.table_vide = QtGui.QCheckBox(CopieDialogBase) - self.table_vide.setGeometry(QtCore.QRect(60, 220, 271, 20)) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.table_vide.setFont(font) - self.table_vide.setObjectName(_fromUtf8("table_vide")) - self.table_source = QtGui.QLineEdit(CopieDialogBase) - self.table_source.setEnabled(False) - self.table_source.setGeometry(QtCore.QRect(20, 60, 351, 20)) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.table_source.setFont(font) - self.table_source.setObjectName(_fromUtf8("table_source")) - self.Titre = QtGui.QLabel(CopieDialogBase) - self.Titre.setGeometry(QtCore.QRect(0, 0, 381, 31)) - font = QtGui.QFont() - font.setPointSize(14) - font.setBold(True) - font.setWeight(75) - self.Titre.setFont(font) - self.Titre.setAlignment(QtCore.Qt.AlignCenter) - self.Titre.setObjectName(_fromUtf8("Titre")) - self.table_source_label = QtGui.QLabel(CopieDialogBase) - self.table_source_label.setGeometry(QtCore.QRect(20, 30, 75, 29)) - self.table_source_label.setMaximumSize(QtCore.QSize(75, 16777215)) - self.table_source_label.setObjectName(_fromUtf8("table_source_label")) - - self.retranslateUi(CopieDialogBase) - QtCore.QObject.connect(self.button_box, QtCore.SIGNAL(_fromUtf8("accepted()")), CopieDialogBase.accept) - QtCore.QObject.connect(self.button_box, QtCore.SIGNAL(_fromUtf8("rejected()")), CopieDialogBase.reject) - QtCore.QMetaObject.connectSlotsByName(CopieDialogBase) - - def retranslateUi(self, CopieDialogBase): - CopieDialogBase.setWindowTitle(_translate("CopieDialogBase", "Copie", None)) - self.schema_label.setText(_translate("CopieDialogBase", "Dossier de destination ", None)) - self.label_nom_table.setText(_translate("CopieDialogBase", "Nom de la nouvelle table", None)) - self.annee.setText(_translate("CopieDialogBase", "aaaa", None)) - self.table_vide.setText(_translate("CopieDialogBase", "Cocher cette case pour vider la table de destination", None)) - self.Titre.setText(_translate("CopieDialogBase", "Copie d\'une table", None)) - self.table_source_label.setText(_translate("CopieDialogBase", "Table source ", None)) - diff --git a/CenRa_COPIE/copie_dialog_base.py.bak b/CenRa_COPIE/copie_dialog_base.py.bak deleted file mode 100644 index 14a5847d..00000000 --- a/CenRa_COPIE/copie_dialog_base.py.bak +++ /dev/null @@ -1,106 +0,0 @@ -# -*- coding: utf-8 -*- - -# Form implementation generated from reading ui file 'copie_dialog_base.ui' -# -# Created: Tue Apr 14 11:48:04 2015 -# by: PyQt4 UI code generator 4.10.2 -# -# WARNING! All changes made in this file will be lost! - -from PyQt4 import QtCore, QtGui - -try: - _fromUtf8 = QtCore.QString.fromUtf8 -except AttributeError: - def _fromUtf8(s): - return s - -try: - _encoding = QtGui.QApplication.UnicodeUTF8 - def _translate(context, text, disambig): - return QtGui.QApplication.translate(context, text, disambig, _encoding) -except AttributeError: - def _translate(context, text, disambig): - return QtGui.QApplication.translate(context, text, disambig) - -class Ui_CopieDialogBase(object): - def setupUi(self, CopieDialogBase): - CopieDialogBase.setObjectName(_fromUtf8("CopieDialogBase")) - CopieDialogBase.resize(386, 290) - self.button_box = QtGui.QDialogButtonBox(CopieDialogBase) - self.button_box.setGeometry(QtCore.QRect(100, 250, 161, 32)) - self.button_box.setOrientation(QtCore.Qt.Horizontal) - self.button_box.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok) - self.button_box.setObjectName(_fromUtf8("button_box")) - self.schema_label = QtGui.QLabel(CopieDialogBase) - self.schema_label.setGeometry(QtCore.QRect(20, 100, 121, 29)) - self.schema_label.setMaximumSize(QtCore.QSize(10000, 16777215)) - self.schema_label.setObjectName(_fromUtf8("schema_label")) - self.label_nom_table = QtGui.QLabel(CopieDialogBase) - self.label_nom_table.setGeometry(QtCore.QRect(20, 150, 131, 29)) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.label_nom_table.setFont(font) - self.label_nom_table.setObjectName(_fromUtf8("label_nom_table")) - self.schema = QtGui.QComboBox(CopieDialogBase) - self.schema.setGeometry(QtCore.QRect(20, 130, 351, 20)) - self.schema.setObjectName(_fromUtf8("schema")) - self.table_destination = QtGui.QLineEdit(CopieDialogBase) - self.table_destination.setGeometry(QtCore.QRect(20, 180, 291, 20)) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.table_destination.setFont(font) - self.table_destination.setObjectName(_fromUtf8("table_destination")) - self.annee = QtGui.QLineEdit(CopieDialogBase) - self.annee.setGeometry(QtCore.QRect(320, 180, 50, 20)) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.annee.setFont(font) - self.annee.setAlignment(QtCore.Qt.AlignCenter) - self.annee.setObjectName(_fromUtf8("annee")) - self.table_vide = QtGui.QCheckBox(CopieDialogBase) - self.table_vide.setGeometry(QtCore.QRect(60, 220, 271, 20)) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.table_vide.setFont(font) - self.table_vide.setObjectName(_fromUtf8("table_vide")) - self.table_source = QtGui.QLineEdit(CopieDialogBase) - self.table_source.setEnabled(False) - self.table_source.setGeometry(QtCore.QRect(20, 60, 351, 20)) - font = QtGui.QFont() - font.setBold(False) - font.setWeight(50) - self.table_source.setFont(font) - self.table_source.setObjectName(_fromUtf8("table_source")) - self.Titre = QtGui.QLabel(CopieDialogBase) - self.Titre.setGeometry(QtCore.QRect(0, 0, 381, 31)) - font = QtGui.QFont() - font.setPointSize(14) - font.setBold(True) - font.setWeight(75) - self.Titre.setFont(font) - self.Titre.setAlignment(QtCore.Qt.AlignCenter) - self.Titre.setObjectName(_fromUtf8("Titre")) - self.table_source_label = QtGui.QLabel(CopieDialogBase) - self.table_source_label.setGeometry(QtCore.QRect(20, 30, 75, 29)) - self.table_source_label.setMaximumSize(QtCore.QSize(75, 16777215)) - self.table_source_label.setObjectName(_fromUtf8("table_source_label")) - - self.retranslateUi(CopieDialogBase) - QtCore.QObject.connect(self.button_box, QtCore.SIGNAL(_fromUtf8("accepted()")), CopieDialogBase.accept) - QtCore.QObject.connect(self.button_box, QtCore.SIGNAL(_fromUtf8("rejected()")), CopieDialogBase.reject) - QtCore.QMetaObject.connectSlotsByName(CopieDialogBase) - - def retranslateUi(self, CopieDialogBase): - CopieDialogBase.setWindowTitle(_translate("CopieDialogBase", "Copie", None)) - self.schema_label.setText(_translate("CopieDialogBase", "Dossier de destination ", None)) - self.label_nom_table.setText(_translate("CopieDialogBase", "Nom de la nouvelle table", None)) - self.annee.setText(_translate("CopieDialogBase", "aaaa", None)) - self.table_vide.setText(_translate("CopieDialogBase", "Cocher cette case pour vider la table de destination", None)) - self.Titre.setText(_translate("CopieDialogBase", "Copie d\'une table", None)) - self.table_source_label.setText(_translate("CopieDialogBase", "Table source ", None)) - diff --git a/CenRa_COPIE/copie.py b/CenRa_COPIE/copie_editor.py similarity index 55% rename from CenRa_COPIE/copie.py rename to CenRa_COPIE/copie_editor.py index 2f9b075b..0a659212 100644 --- a/CenRa_COPIE/copie.py +++ b/CenRa_COPIE/copie_editor.py @@ -1,218 +1,50 @@ # -*- coding: utf-8 -*- -""" -/*************************************************************************** - Copie - A QGIS plugin - Permet la copie d'une table dans une base PostGis - ------------------- - begin : 2015-04-13 - git sha : $Format:%H$ - copyright : (C) 2015 by Guillaume COSTES - CEN Rhône-Alpes - email : guillaume.costes@espaces-naturels.fr - ***************************************************************************/ -/*************************************************************************** - * * - * 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. * - * * - ***************************************************************************/ -""" from __future__ import absolute_import -#from PyQt4.QtCore import * -#from PyQt4.QtGui import * +# Import the PyQt and QGIS libraries +from builtins import next +from builtins import str +from builtins import object +import qgis from qgis.PyQt.QtCore import QSettings -from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog, QMessageBox +from qgis.PyQt.QtWidgets import QAction, QMenu, QDialog from qgis.PyQt.QtGui import QIcon from PyQt5.QtCore import * from PyQt5.QtGui import * -from qgis.core import QgsDataSourceUri -from builtins import str -from builtins import object +from PyQt5 import QtGui from qgis.core import * -from qgis.gui import * -# Initialize Qt resources from file resources.py -from . import resources_rc -# Import the code for the dialog -import qgis -from .forms.about_form import CopieAboutDialog -from .copie_dialog import CopieDialog -import os.path +from qgis.core import QgsDataSourceUri + from .tools.PythonSQL import * -from .tools.resources import maj_verif +from .tools.resources import ( + load_ui, + resources_path, + login_base, + send_issues, +) +from .issues import CenRa_Issues + +from qgis.utils import iface +import os.path +import webbrowser, os import psycopg2 import psycopg2.extras import base64 -#import socket -import os -#import sys -class Copie(object): - """QGIS Plugin Implementation.""" +EDITOR_CLASS = load_ui('CenRa_Copie_base.ui') - def __init__(self, iface): - """Constructor. +class Copie_Editor(QDialog, EDITOR_CLASS): - :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 + def __init__(self, parent=None): + _ = parent + super().__init__() + self.setupUi(self) + self.settings = QgsSettings() + self.s = QSettings() + self.setWindowIcon(QtGui.QIcon(resources_path('icons','icon.png'))) 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', - 'Copie_{}.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) - - # Create the dialog (after translation) and keep reference - self.dlg = CopieDialog() - maj_verif('CenRa_COPIE') - - version = qgis.utils.pluginMetadata('CenRa_COPIE','version') - # Display About window on first use - s = QSettings() - versionUse = s.value("copie/version", 1, type=str) - if str(versionUse) != str(version) : - s.setValue("copie/version", str(version)) - self.open_about_dialog() - - # Declare instance attributes - self.actions = [] - self.menu = self.tr(u'&Copie') - # TODO: We are going to let the user set this up in a future iteration - self.toolbar = self.iface.addToolBar(u'Copie') - self.toolbar.setObjectName(u'Copie') - - def open_about_dialog(self): - dialog = CopieAboutDialog(self.iface) - dialog.exec_() - - # 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('Copie', 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 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: - self.toolbar.addAction(action) - - if add_to_menu: - self.iface.addPluginToMenu( - self.menu, - action) - - self.actions.append(action) - - return action - - def initGui(self): - """Create the menu entries and toolbar icons inside the QGIS GUI.""" - - icon_path = ':/plugins/Copie/table_copie.png' - self.add_action( - icon_path, - text=self.tr(u'Copie'), - 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.tr(u'&Copie'), - action) - self.iface.removeToolBarIcon(action) - # remove the toolbar - del self.toolbar - - - def run(self): + def raise_(self): """Run method that performs all the real work""" layer = self.iface.activeLayer() @@ -268,16 +100,16 @@ class Copie(object): con.close() - self.dlg.schema.clear() - self.dlg.schema.addItems(listItems) - self.dlg.schema.setCurrentIndex(-1) # Pour ne pas commencer la liste au premier schema + self.schema.clear() + self.schema.addItems(listItems) + self.schema.setCurrentIndex(-1) # Pour ne pas commencer la liste au premier schema - self.dlg.table_source.setText(source_schema + "." + source_tablename) # Affiche le nom de la table source + self.table_source.setText(source_schema + "." + source_tablename) # Affiche le nom de la table source # show the dialog - self.dlg.show() + self.show() # Run the dialog event loop - result = self.dlg.exec_() + result = self.exec_() # See if OK was pressed if result: #******************************debut script********************************* @@ -304,24 +136,24 @@ class Copie(object): # tablename source_tablename = [s for s in list_sources if "table" in s][0].split('"')[3] - if self.dlg.schema.currentIndex() == -1 : + if self.schema.currentIndex() == -1 : QMessageBox.warning(None, "Oups :", "Veuillez choisir un dossier de destination.") return - schema = self.dlg.schema.currentText() + schema = self.schema.currentText() - if self.dlg.table_destination.text() == '' : + if self.table_destination.text() == '' : QMessageBox.warning(None, "Oups :", "Veuillez choisir un nom de destination.") return - if self.dlg.annee.text() == 'aaaa' or self.dlg.annee.text() == '': - tablename = schema + "_" + self.dlg.table_destination.text().lower() + if self.annee.text() == 'aaaa' or self.annee.text() == '': + tablename = schema + "_" + self.table_destination.text().lower() else : - tablename = schema + "_" + self.dlg.table_destination.text().lower() + "_" + self.dlg.annee.text() + tablename = schema + "_" + self.table_destination.text().lower() + "_" + self.annee.text() tablename_qgis = tablename[1:] # Permet d'enlever le "_", ajouter a la premiere etape, dans qgis - if self.dlg.table_vide.isChecked() == 1 : + if self.table_vide.isChecked() == 1 : SQL_table = "CREATE TABLE " + schema + "." + tablename + " AS SELECT * FROM " + source_schema + "." + source_tablename + " LIMIT 0;" else : SQL_table = "CREATE TABLE " + schema + "." + tablename + " AS SELECT * FROM " + source_schema + "." + source_tablename diff --git a/CenRa_COPIE/help/Makefile b/CenRa_COPIE/help/Makefile deleted file mode 100644 index 9def777d..00000000 --- a/CenRa_COPIE/help/Makefile +++ /dev/null @@ -1,130 +0,0 @@ -# Makefile for Sphinx documentation -# - -# You can set these variables from the command line. -SPHINXOPTS = -SPHINXBUILD = sphinx-build -PAPER = -BUILDDIR = build - -# Internal variables. -PAPEROPT_a4 = -D latex_paper_size=a4 -PAPEROPT_letter = -D latex_paper_size=letter -ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source - -.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest - -help: - @echo "Please use \`make ' where is one of" - @echo " html to make standalone HTML files" - @echo " dirhtml to make HTML files named index.html in directories" - @echo " singlehtml to make a single large HTML file" - @echo " pickle to make pickle files" - @echo " json to make JSON files" - @echo " htmlhelp to make HTML files and a HTML help project" - @echo " qthelp to make HTML files and a qthelp project" - @echo " devhelp to make HTML files and a Devhelp project" - @echo " epub to make an epub" - @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" - @echo " latexpdf to make LaTeX files and run them through pdflatex" - @echo " text to make text files" - @echo " man to make manual pages" - @echo " changes to make an overview of all changed/added/deprecated items" - @echo " linkcheck to check all external links for integrity" - @echo " doctest to run all doctests embedded in the documentation (if enabled)" - -clean: - -rm -rf $(BUILDDIR)/* - -html: - $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." - -dirhtml: - $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml - @echo - @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." - -singlehtml: - $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml - @echo - @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." - -pickle: - $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle - @echo - @echo "Build finished; now you can process the pickle files." - -json: - $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json - @echo - @echo "Build finished; now you can process the JSON files." - -htmlhelp: - $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp - @echo - @echo "Build finished; now you can run HTML Help Workshop with the" \ - ".hhp project file in $(BUILDDIR)/htmlhelp." - -qthelp: - $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp - @echo - @echo "Build finished; now you can run "qcollectiongenerator" with the" \ - ".qhcp project file in $(BUILDDIR)/qthelp, like this:" - @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/template_class.qhcp" - @echo "To view the help file:" - @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/template_class.qhc" - -devhelp: - $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp - @echo - @echo "Build finished." - @echo "To view the help file:" - @echo "# mkdir -p $$HOME/.local/share/devhelp/template_class" - @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/template_class" - @echo "# devhelp" - -epub: - $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub - @echo - @echo "Build finished. The epub file is in $(BUILDDIR)/epub." - -latex: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo - @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." - @echo "Run \`make' in that directory to run these through (pdf)latex" \ - "(use \`make latexpdf' here to do that automatically)." - -latexpdf: - $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex - @echo "Running LaTeX files through pdflatex..." - make -C $(BUILDDIR)/latex all-pdf - @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." - -text: - $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text - @echo - @echo "Build finished. The text files are in $(BUILDDIR)/text." - -man: - $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man - @echo - @echo "Build finished. The manual pages are in $(BUILDDIR)/man." - -changes: - $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes - @echo - @echo "The overview file is in $(BUILDDIR)/changes." - -linkcheck: - $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck - @echo - @echo "Link check complete; look for any errors in the above output " \ - "or in $(BUILDDIR)/linkcheck/output.txt." - -doctest: - $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest - @echo "Testing of doctests in the sources finished, look at the " \ - "results in $(BUILDDIR)/doctest/output.txt." diff --git a/CenRa_COPIE/help/make.bat b/CenRa_COPIE/help/make.bat deleted file mode 100644 index 33776100..00000000 --- a/CenRa_COPIE/help/make.bat +++ /dev/null @@ -1,155 +0,0 @@ -@ECHO OFF - -REM Command file for Sphinx documentation - -if "%SPHINXBUILD%" == "" ( - set SPHINXBUILD=sphinx-build -) -set BUILDDIR=build -set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source -if NOT "%PAPER%" == "" ( - set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% -) - -if "%1" == "" goto help - -if "%1" == "help" ( - :help - echo.Please use `make ^` where ^ is one of - echo. html to make standalone HTML files - echo. dirhtml to make HTML files named index.html in directories - echo. singlehtml to make a single large HTML file - echo. pickle to make pickle files - echo. json to make JSON files - echo. htmlhelp to make HTML files and a HTML help project - echo. qthelp to make HTML files and a qthelp project - echo. devhelp to make HTML files and a Devhelp project - echo. epub to make an epub - echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter - echo. text to make text files - echo. man to make manual pages - echo. changes to make an overview over all changed/added/deprecated items - echo. linkcheck to check all external links for integrity - echo. doctest to run all doctests embedded in the documentation if enabled - goto end -) - -if "%1" == "clean" ( - for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i - del /q /s %BUILDDIR%\* - goto end -) - -if "%1" == "html" ( - %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/html. - goto end -) - -if "%1" == "dirhtml" ( - %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. - goto end -) - -if "%1" == "singlehtml" ( - %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml - echo. - echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. - goto end -) - -if "%1" == "pickle" ( - %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle - echo. - echo.Build finished; now you can process the pickle files. - goto end -) - -if "%1" == "json" ( - %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json - echo. - echo.Build finished; now you can process the JSON files. - goto end -) - -if "%1" == "htmlhelp" ( - %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp - echo. - echo.Build finished; now you can run HTML Help Workshop with the ^ -.hhp project file in %BUILDDIR%/htmlhelp. - goto end -) - -if "%1" == "qthelp" ( - %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp - echo. - echo.Build finished; now you can run "qcollectiongenerator" with the ^ -.qhcp project file in %BUILDDIR%/qthelp, like this: - echo.^> qcollectiongenerator %BUILDDIR%\qthelp\template_class.qhcp - echo.To view the help file: - echo.^> assistant -collectionFile %BUILDDIR%\qthelp\template_class.ghc - goto end -) - -if "%1" == "devhelp" ( - %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp - echo. - echo.Build finished. - goto end -) - -if "%1" == "epub" ( - %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub - echo. - echo.Build finished. The epub file is in %BUILDDIR%/epub. - goto end -) - -if "%1" == "latex" ( - %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex - echo. - echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. - goto end -) - -if "%1" == "text" ( - %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text - echo. - echo.Build finished. The text files are in %BUILDDIR%/text. - goto end -) - -if "%1" == "man" ( - %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man - echo. - echo.Build finished. The manual pages are in %BUILDDIR%/man. - goto end -) - -if "%1" == "changes" ( - %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes - echo. - echo.The overview file is in %BUILDDIR%/changes. - goto end -) - -if "%1" == "linkcheck" ( - %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck - echo. - echo.Link check complete; look for any errors in the above output ^ -or in %BUILDDIR%/linkcheck/output.txt. - goto end -) - -if "%1" == "doctest" ( - %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest - echo. - echo.Testing of doctests in the sources finished, look at the ^ -results in %BUILDDIR%/doctest/output.txt. - goto end -) - -:end diff --git a/CenRa_COPIE/help/source/conf.py b/CenRa_COPIE/help/source/conf.py deleted file mode 100644 index 0c9c79a3..00000000 --- a/CenRa_COPIE/help/source/conf.py +++ /dev/null @@ -1,216 +0,0 @@ -# -*- coding: utf-8 -*- -# -# Copie documentation build configuration file, created by -# sphinx-quickstart on Sun Feb 12 17:11:03 2012. -# -# This file is execfile()d with the current directory set to its containing dir. -# -# Note that not all possible configuration values are present in this -# autogenerated file. -# -# All configuration values have a default; values that are commented out -# serve to show the default. - -import sys, os - -# If extensions (or modules to document with autodoc) are in another directory, -# add these directories to sys.path here. If the directory is relative to the -# documentation root, use os.path.abspath to make it absolute, like shown here. -#sys.path.insert(0, os.path.abspath('.')) - -# -- General configuration ----------------------------------------------------- - -# If your documentation needs a minimal Sphinx version, state it here. -#needs_sphinx = '1.0' - -# Add any Sphinx extension module names here, as strings. They can be extensions -# coming with Sphinx (named 'sphinx.ext.*') or your custom ones. -extensions = ['sphinx.ext.todo', 'sphinx.ext.pngmath', 'sphinx.ext.viewcode'] - -# Add any paths that contain templates here, relative to this directory. -templates_path = ['_templates'] - -# The suffix of source filenames. -source_suffix = '.rst' - -# The encoding of source files. -#source_encoding = 'utf-8-sig' - -# The master toctree document. -master_doc = 'index' - -# General information about the project. -project = u'Copie' -copyright = u'2013, Guillaume COSTES - CEN Rhône-Alpes' - -# The version info for the project you're documenting, acts as replacement for -# |version| and |release|, also used in various other places throughout the -# built documents. -# -# The short X.Y version. -version = '0.1' -# The full version, including alpha/beta/rc tags. -release = '0.1' - -# The language for content autogenerated by Sphinx. Refer to documentation -# for a list of supported languages. -#language = None - -# There are two options for replacing |today|: either, you set today to some -# non-false value, then it is used: -#today = '' -# Else, today_fmt is used as the format for a strftime call. -#today_fmt = '%B %d, %Y' - -# List of patterns, relative to source directory, that match files and -# directories to ignore when looking for source files. -exclude_patterns = [] - -# The reST default role (used for this markup: `text`) to use for all documents. -#default_role = None - -# If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True - -# If true, the current module name will be prepended to all description -# unit titles (such as .. function::). -#add_TemplateModuleNames = True - -# If true, sectionauthor and moduleauthor directives will be shown in the -# output. They are ignored by default. -#show_authors = False - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -# A list of ignored prefixes for module index sorting. -#modindex_common_prefix = [] - - -# -- Options for HTML output --------------------------------------------------- - -# The theme to use for HTML and HTML Help pages. See the documentation for -# a list of builtin themes. -html_theme = 'default' - -# Theme options are theme-specific and customize the look and feel of a theme -# further. For a list of options available for each theme, see the -# documentation. -#html_theme_options = {} - -# Add any paths that contain custom themes here, relative to this directory. -#html_theme_path = [] - -# The name for this set of Sphinx documents. If None, it defaults to -# " v documentation". -#html_title = None - -# A shorter title for the navigation bar. Default is the same as html_title. -#html_short_title = None - -# The name of an image file (relative to this directory) to place at the top -# of the sidebar. -#html_logo = None - -# The name of an image file (within the static path) to use as favicon of the -# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 -# pixels large. -#html_favicon = None - -# Add any paths that contain custom static files (such as style sheets) here, -# relative to this directory. They are copied after the builtin static files, -# so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ['_static'] - -# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, -# using the given strftime format. -#html_last_updated_fmt = '%b %d, %Y' - -# If true, SmartyPants will be used to convert quotes and dashes to -# typographically correct entities. -#html_use_smartypants = True - -# Custom sidebar templates, maps document names to template names. -#html_sidebars = {} - -# Additional templates that should be rendered to pages, maps page names to -# template names. -#html_additional_pages = {} - -# If false, no module index is generated. -#html_domain_indices = True - -# If false, no index is generated. -#html_use_index = True - -# If true, the index is split into individual pages for each letter. -#html_split_index = False - -# If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True - -# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True - -# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. -#html_show_copyright = True - -# If true, an OpenSearch description file will be output, and all pages will -# contain a tag referring to it. The value of this option must be the -# base URL from which the finished HTML is served. -#html_use_opensearch = '' - -# This is the file name suffix for HTML files (e.g. ".xhtml"). -#html_file_suffix = None - -# Output file base name for HTML help builder. -htmlhelp_basename = 'TemplateClassdoc' - - -# -- Options for LaTeX output -------------------------------------------------- - -# The paper size ('letter' or 'a4'). -#latex_paper_size = 'letter' - -# The font size ('10pt', '11pt' or '12pt'). -#latex_font_size = '10pt' - -# Grouping the document tree into LaTeX files. List of tuples -# (source start file, target name, title, author, documentclass [howto/manual]). -latex_documents = [ - ('index', 'Copie.tex', u'Copie Documentation', - u'Guillaume COSTES - CEN Rhône-Alpes', 'manual'), -] - -# The name of an image file (relative to this directory) to place at the top of -# the title page. -#latex_logo = None - -# For "manual" documents, if this is true, then toplevel headings are parts, -# not chapters. -#latex_use_parts = False - -# If true, show page references after internal links. -#latex_show_pagerefs = False - -# If true, show URL addresses after external links. -#latex_show_urls = False - -# Additional stuff for the LaTeX preamble. -#latex_preamble = '' - -# Documents to append as an appendix to all manuals. -#latex_appendices = [] - -# If false, no module index is generated. -#latex_domain_indices = True - - -# -- Options for manual page output -------------------------------------------- - -# One entry per manual page. List of tuples -# (source start file, name, description, authors, manual section). -man_pages = [ - ('index', 'TemplateClass', u'Copie Documentation', - [u'Guillaume COSTES - CEN Rhône-Alpes'], 1) -] diff --git a/CenRa_COPIE/help/source/index.rst b/CenRa_COPIE/help/source/index.rst deleted file mode 100644 index a6116321..00000000 --- a/CenRa_COPIE/help/source/index.rst +++ /dev/null @@ -1,20 +0,0 @@ -.. Copie documentation master file, created by - sphinx-quickstart on Sun Feb 12 17:11:03 2012. - You can adapt this file completely to your liking, but it should at least - contain the root `toctree` directive. - -Welcome to Copie's documentation! -============================================ - -Contents: - -.. toctree:: - :maxdepth: 2 - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` - diff --git a/CenRa_COPIE/i18n/af.ts b/CenRa_COPIE/i18n/af.ts deleted file mode 100644 index 615a88c3..00000000 --- a/CenRa_COPIE/i18n/af.ts +++ /dev/null @@ -1,11 +0,0 @@ - - - - @default - - - Good morning - Goeie more - - - diff --git a/CenRa_COPIE/cenra.png b/CenRa_COPIE/icon.png similarity index 100% rename from CenRa_COPIE/cenra.png rename to CenRa_COPIE/icon.png diff --git a/CenRa_COPIE/issues.py b/CenRa_COPIE/issues.py new file mode 100644 index 00000000..eeda1fc5 --- /dev/null +++ b/CenRa_COPIE/issues.py @@ -0,0 +1,88 @@ +import os +plugin_dir = os.path.dirname(__file__) +end_find = plugin_dir.rfind('\\')+1 + +NAME = plugin_dir[end_find:] + +from qgis.gui import * + +from qgis.core import ( + NULL, + QgsApplication, + QgsDataSourceUri, + QgsProject, + QgsProviderConnectionException, + QgsProviderRegistry, + QgsRasterLayer, + QgsSettings, + QgsVectorLayer, + QgsGeometry, +) +from qgis.PyQt.QtWidgets import ( + QDialog, + QAction, + QDockWidget, + QFileDialog, + QInputDialog, + QMenu, + QToolButton, + QTableWidget, + QTableWidgetItem, +) +from qgis.utils import iface + + +from .tools.resources import ( + load_ui, + resources_path, + send_issues, +) + +EDITOR_CLASS = load_ui('CenRa_IssuesSend.ui') + +class CenRa_Issues(QDialog, EDITOR_CLASS): + + def __init__(self, parent=None): + _ = parent + super().__init__() + self.setupUi(self) + self.settings = QgsSettings() + + #place connect here + self.annuler_button.clicked.connect(self.close) + self.ok_button.clicked.connect(self.run_sendissues) + + def run_sendissues(self): + text_titre = self.titre_line.text() + text_message = self.messages_plain.toPlainText() + statu_bug = self.check_bug.isChecked() + statu_aide = self.check_aide.isChecked() + statu_question = self.check_question.isChecked() + statu_amelioration = self.check_amelioration.isChecked() + statu_autre = self.check_autre.isChecked() + + statu = [] + if statu_bug == True : statu = statu + [1] + if statu_aide == True : statu = statu + [3] + if statu_question == True : statu = statu + [5] + if statu_amelioration == True : statu = statu + [2] + if statu_autre == True : statu = statu + [6] + + if len(statu) >= 1: + import qgis + url = qgis.utils.pluginMetadata(NAME,'tracker') + print(text_message) + send_info = send_issues(url,text_titre,text_message,statu) + code = send_info.status_code + print(code) + else: + code = 423 + if code == 201: + iface.messageBar().pushMessage("Envoyer :", "Votre messages à bien été envoyer.", level=Qgis.Success, duration=20) + self.close() + elif code == 422: + iface.messageBar().pushMessage("Erreur :", "Erreur dans le contenu du messages.", level=Qgis.Critical, duration=20) + elif code == 423: + iface.messageBar().pushMessage("Erreur :", "Pas de sujet sélectionné.", level=Qgis.Critical, duration=20) + elif code == 404: + iface.messageBar().pushMessage("Missing :", "Le serveur de messagerie est injoignable.", level=Qgis.Warning, duration=20) diff --git a/CenRa_COPIE/metadata.txt b/CenRa_COPIE/metadata.txt index 737063d7..d4552b7c 100644 --- a/CenRa_COPIE/metadata.txt +++ b/CenRa_COPIE/metadata.txt @@ -10,7 +10,7 @@ name=CenRA_COPIE qgisMinimumVersion=3.0 description=Permet la copie d'une table dans une base PostGis -version=1.5 +version=2 author=Conservatoire d'Espaces Naturels de Rhône-Alpes email=si_besoin@cen-rhonealpes.fr @@ -19,7 +19,7 @@ email=si_besoin@cen-rhonealpes.fr # Recommended items: # Uncomment the following line and add your changelog: -changelog=

CenRa_COPIE:


13/09/2024 - Version 1.5:

- Ajoute d'un changelog et vérification de mise à jour.

+changelog=

CenRa_COPIE:


22/10/2024 - Version 2:

- Refonte du code.


13/09/2024 - Version 1.5:

- Ajoute d'un changelog et vérification de mise à jour.

# Tags are comma separated with spaces allowed tags=cenra, database, table diff --git a/CenRa_COPIE/pb_tool.cfg b/CenRa_COPIE/pb_tool.cfg deleted file mode 100644 index 091fb227..00000000 --- a/CenRa_COPIE/pb_tool.cfg +++ /dev/null @@ -1,74 +0,0 @@ -#/*************************************************************************** -# Copie -# -# Configuration file for plugin builder tool (pb_tool) -# ------------------- -# begin : 2015-04-13 -# copyright : (C) 2015 by Guillaume COSTES - CEN Rhône-Alpes -# email : guillaume.costes@espaces-naturels.fr -# ***************************************************************************/ -# -#/*************************************************************************** -# * * -# * 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. * -# * * -# ***************************************************************************/ -# -# -# You can install pb_tool using: -# pip install http://geoapt.net/files/pb_tool.zip -# -# Consider doing your development (and install of pb_tool) in a virtualenv. -# -# For details on setting up and using pb_tool, see: -# http://spatialgalaxy.net/qgis-plugin-development-with-pb_tool -# -# Issues and pull requests here: -# https://github.com/g-sherman/plugin_build_tool: -# -# Sane defaults for your plugin generated by the Plugin Builder are -# already set below. -# -# As you add Python source files and UI files to your plugin, add -# them to the appropriate [files] section below. - -[plugin] -# Name of the plugin. This is the name of the directory that will -# be created in .qgis2/python/plugins -name: Copie - -[files] -# Python files that should be deployed with the plugin -python_files: __init__.py copie.py copie_dialog.py - -# The main dialog file that is loaded (not compiled) -main_dialog: copie_dialog_base.ui - -# Other ui files for dialogs you create (these will be compiled) -compiled_ui_files: - -# Resource file(s) that will be compiled -resource_files: resources.qrc - -# Other files required for the plugin -extras: icon.png metadata.txt - -# Other directories to be deployed with the plugin. -# These must be subdirectories under the plugin directory -extra_dirs: - -# ISO code(s) for any locales (translations), separated by spaces. -# Corresponding .ts files must exist in the i18n directory -locales: - -[help] -# the built help directory that should be deployed with the plugin -dir: help/build/html -# the name of the directory to target in the deployed plugin -target: help - - - diff --git a/CenRa_COPIE/plugin_upload.py b/CenRa_COPIE/plugin_upload.py deleted file mode 100644 index dfa46936..00000000 --- a/CenRa_COPIE/plugin_upload.py +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env python -# coding=utf-8 -"""This script uploads a plugin package on the server. - 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 xmlrpc.client -from optparse import OptionParser - -# Configuration -PROTOCOL = 'http' -SERVER = 'plugins.qgis.org' -PORT = '80' -ENDPOINT = '/plugins/RPC2/' -VERBOSE = False - - -def main(parameters, arguments): - """Main entry point. - - :param parameters: Command line parameters. - :param arguments: Command line arguments. - """ - address = "%s://%s:%s@%s:%s%s" % ( - PROTOCOL, - parameters.username, - parameters.password, - parameters.server, - parameters.port, - ENDPOINT) - # fix_print_with_import - # fix_print_with_import -print("Connecting to: %s" % hide_password(address)) - - server = xmlrpc.client.ServerProxy(address, verbose=VERBOSE) - - try: - plugin_id, version_id = server.plugin.upload( - xmlrpc.client.Binary(open(arguments[0]).read())) - # fix_print_with_import - # fix_print_with_import -print("Plugin ID: %s" % plugin_id) - # fix_print_with_import - # 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 - # fix_print_with_import -print("URL: %s" % hide_password(err.url, 0)) - # fix_print_with_import - # fix_print_with_import -print("HTTP/HTTPS headers: %s" % err.headers) - # fix_print_with_import - # fix_print_with_import -print("Error code: %d" % err.errcode) - # fix_print_with_import - # 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 - # fix_print_with_import -print("Fault code: %d" % err.faultCode) - # fix_print_with_import - # fix_print_with_import -print("Fault string: %s" % err.faultString) - - -def hide_password(url, start=6): - """Returns the http url with password part replaced with '*'. - - :param url: URL to upload the plugin to. - :type url: str - - :param start: Position of start of password. - :type start: int - """ - start_position = url.find(':', start) + 1 - end_position = url.find('@') - return "%s%s%s" % ( - url[:start_position], - '*' * (end_position - start_position), - url[end_position:]) - - -if __name__ == "__main__": - parser = OptionParser(usage="%prog [options] plugin.zip") - parser.add_option( - "-w", "--password", dest="password", - help="Password for plugin site", metavar="******") - parser.add_option( - "-u", "--username", dest="username", - help="Username of plugin site", metavar="user") - parser.add_option( - "-p", "--port", dest="port", - help="Server port to connect to", metavar="80") - parser.add_option( - "-s", "--server", dest="server", - help="Specify server name", metavar="plugins.qgis.org") - options, args = parser.parse_args() - if len(args) != 1: - # fix_print_with_import - print("Please specify zip file.\n") - parser.print_help() - sys.exit(1) - if not options.server: - options.server = SERVER - if not options.port: - options.port = PORT - if not options.username: - # interactive mode - username = getpass.getuser() - # fix_print_with_import - # fix_print_with_import -print("Please enter user name [%s] :" % username, end=' ') - res = input() - if res != "": - options.username = res - else: - options.username = username - if not options.password: - # interactive mode - options.password = getpass.getpass() - main(options, args) diff --git a/CenRa_COPIE/plugin_upload.py.bak b/CenRa_COPIE/plugin_upload.py.bak deleted file mode 100644 index 8a238549..00000000 --- a/CenRa_COPIE/plugin_upload.py.bak +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/env python -# coding=utf-8 -"""This script uploads a plugin package on the server. - Authors: A. Pasotti, V. Picavet - git sha : $TemplateVCSFormat -""" - -import sys -import getpass -import xmlrpclib -from optparse import OptionParser - -# Configuration -PROTOCOL = 'http' -SERVER = 'plugins.qgis.org' -PORT = '80' -ENDPOINT = '/plugins/RPC2/' -VERBOSE = False - - -def main(parameters, arguments): - """Main entry point. - - :param parameters: Command line parameters. - :param arguments: Command line arguments. - """ - address = "%s://%s:%s@%s:%s%s" % ( - PROTOCOL, - parameters.username, - parameters.password, - parameters.server, - parameters.port, - ENDPOINT) - print "Connecting to: %s" % hide_password(address) - - server = xmlrpclib.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 - - -def hide_password(url, start=6): - """Returns the http url with password part replaced with '*'. - - :param url: URL to upload the plugin to. - :type url: str - - :param start: Position of start of password. - :type start: int - """ - start_position = url.find(':', start) + 1 - end_position = url.find('@') - return "%s%s%s" % ( - url[:start_position], - '*' * (end_position - start_position), - url[end_position:]) - - -if __name__ == "__main__": - parser = OptionParser(usage="%prog [options] plugin.zip") - parser.add_option( - "-w", "--password", dest="password", - help="Password for plugin site", metavar="******") - parser.add_option( - "-u", "--username", dest="username", - help="Username of plugin site", metavar="user") - parser.add_option( - "-p", "--port", dest="port", - help="Server port to connect to", metavar="80") - parser.add_option( - "-s", "--server", dest="server", - help="Specify server name", metavar="plugins.qgis.org") - options, args = parser.parse_args() - if len(args) != 1: - print "Please specify zip file.\n" - parser.print_help() - sys.exit(1) - if not options.server: - options.server = SERVER - if not options.port: - options.port = PORT - if not options.username: - # interactive mode - username = getpass.getuser() - print "Please enter user name [%s] :" % username, - res = raw_input() - if res != "": - options.username = res - else: - options.username = username - if not options.password: - # interactive mode - options.password = getpass.getpass() - main(options, args) diff --git a/CenRa_COPIE/pylintrc b/CenRa_COPIE/pylintrc deleted file mode 100644 index 7e168f64..00000000 --- a/CenRa_COPIE/pylintrc +++ /dev/null @@ -1,281 +0,0 @@ -[MASTER] - -# Specify a configuration file. -#rcfile= - -# Python code to execute, usually for sys.path manipulation such as -# pygtk.require(). -#init-hook= - -# Profiled execution. -profile=no - -# Add files or directories to the blacklist. They should be base names, not -# paths. -ignore=CVS - -# Pickle collected data for later comparisons. -persistent=yes - -# List of plugins (as comma separated values of python modules names) to load, -# usually to register additional checkers. -load-plugins= - - -[MESSAGES CONTROL] - -# Enable the message, report, category or checker with the given id(s). You can -# either give multiple identifier separated by comma (,) or put this option -# multiple time. See also the "--disable" option for examples. -#enable= - -# Disable the message, report, category or checker with the given id(s). You -# can either give multiple identifiers separated by comma (,) or put this -# option multiple times (only on the command line, not in the configuration -# file where it should appear only once).You can also use "--disable=all" to -# disable everything first and then reenable specific checks. For example, if -# you want to run only the similarities checker, you can use "--disable=all -# --enable=similarities". If you want to run only the classes checker, but have -# no Warning level messages displayed, use"--disable=all --enable=classes -# --disable=W" -# see http://stackoverflow.com/questions/21487025/pylint-locally-defined-disables-still-give-warnings-how-to-suppress-them -disable=locally-disabled,C0103 - - -[REPORTS] - -# Set the output format. Available formats are text, parseable, colorized, msvs -# (visual studio) and html. You can also give a reporter class, eg -# mypackage.mymodule.MyReporterClass. -output-format=text - -# Put messages in a separate file for each module / package specified on the -# command line instead of printing them on stdout. Reports (if any) will be -# written in a file name "pylint_global.[txt|html]". -files-output=no - -# Tells whether to display a full report or only the messages -reports=yes - -# Python expression which should return a note less than 10 (10 is the highest -# note). You have access to the variables errors warning, statement which -# respectively contain the number of errors / warnings messages and the total -# number of statements analyzed. This is used by the global evaluation report -# (RP0004). -evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) - -# Add a comment according to your evaluation note. This is used by the global -# evaluation report (RP0004). -comment=no - -# Template used to display messages. This is a python new-style format string -# used to format the message information. See doc for all details -#msg-template= - - -[BASIC] - -# Required attributes for module, separated by a comma -required-attributes= - -# List of builtins function names that should not be used, separated by a comma -bad-functions=map,filter,apply,input - -# Regular expression which should only match correct module names -module-rgx=(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$ - -# Regular expression which should only match correct module level names -const-rgx=(([A-Z_][A-Z0-9_]*)|(__.*__))$ - -# Regular expression which should only match correct class names -class-rgx=[A-Z_][a-zA-Z0-9]+$ - -# Regular expression which should only match correct function names -function-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct method names -method-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct instance attribute names -attr-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct argument names -argument-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct variable names -variable-rgx=[a-z_][a-z0-9_]{2,30}$ - -# Regular expression which should only match correct attribute names in class -# bodies -class-attribute-rgx=([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$ - -# Regular expression which should only match correct list comprehension / -# generator expression variable names -inlinevar-rgx=[A-Za-z_][A-Za-z0-9_]*$ - -# Good variable names which should always be accepted, separated by a comma -good-names=i,j,k,ex,Run,_ - -# Bad variable names which should always be refused, separated by a comma -bad-names=foo,bar,baz,toto,tutu,tata - -# Regular expression which should only match function or class names that do -# not require a docstring. -no-docstring-rgx=__.*__ - -# Minimum line length for functions/classes that require docstrings, shorter -# ones are exempt. -docstring-min-length=-1 - - -[MISCELLANEOUS] - -# List of note tags to take in consideration, separated by a comma. -notes=FIXME,XXX,TODO - - -[TYPECHECK] - -# Tells whether missing members accessed in mixin class should be ignored. A -# mixin class is detected if its name ends with "mixin" (case insensitive). -ignore-mixin-members=yes - -# List of classes names for which member attributes should not be checked -# (useful for classes with attributes dynamically set). -ignored-classes=SQLObject - -# When zope mode is activated, add a predefined set of Zope acquired attributes -# to generated-members. -zope=no - -# List of members which are set dynamically and missed by pylint inference -# system, and so shouldn't trigger E0201 when accessed. Python regular -# expressions are accepted. -generated-members=REQUEST,acl_users,aq_parent - - -[VARIABLES] - -# Tells whether we should check for unused import in __init__ files. -init-import=no - -# A regular expression matching the beginning of the name of dummy variables -# (i.e. not used). -dummy-variables-rgx=_$|dummy - -# List of additional names supposed to be defined in builtins. Remember that -# you should avoid to define new builtins when possible. -additional-builtins= - - -[FORMAT] - -# Maximum number of characters on a single line. -max-line-length=80 - -# Regexp for a line that is allowed to be longer than the limit. -ignore-long-lines=^\s*(# )??$ - -# Allow the body of an if to be on the same line as the test if there is no -# else. -single-line-if-stmt=no - -# List of optional constructs for which whitespace checking is disabled -no-space-check=trailing-comma,dict-separator - -# Maximum number of lines in a module -max-module-lines=1000 - -# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 -# tab). -indent-string=' ' - - -[SIMILARITIES] - -# Minimum lines number of a similarity. -min-similarity-lines=4 - -# Ignore comments when computing similarities. -ignore-comments=yes - -# Ignore docstrings when computing similarities. -ignore-docstrings=yes - -# Ignore imports when computing similarities. -ignore-imports=no - - -[IMPORTS] - -# Deprecated modules which should not be used, separated by a comma -deprecated-modules=regsub,TERMIOS,Bastion,rexec - -# Create a graph of every (i.e. internal and external) dependencies in the -# given file (report RP0402 must not be disabled) -import-graph= - -# Create a graph of external dependencies in the given file (report RP0402 must -# not be disabled) -ext-import-graph= - -# Create a graph of internal dependencies in the given file (report RP0402 must -# not be disabled) -int-import-graph= - - -[DESIGN] - -# Maximum number of arguments for function / method -max-args=5 - -# Argument names that match this expression will be ignored. Default to name -# with leading underscore -ignored-argument-names=_.* - -# Maximum number of locals for function / method body -max-locals=15 - -# Maximum number of return / yield for function / method body -max-returns=6 - -# Maximum number of branch for function / method body -max-branches=12 - -# Maximum number of statements in function / method body -max-statements=50 - -# Maximum number of parents for a class (see R0901). -max-parents=7 - -# Maximum number of attributes for a class (see R0902). -max-attributes=7 - -# Minimum number of public methods for a class (see R0903). -min-public-methods=2 - -# Maximum number of public methods for a class (see R0904). -max-public-methods=20 - - -[CLASSES] - -# List of interface methods to ignore, separated by a comma. This is used for -# instance to not check methods defines in Zope's Interface base class. -ignore-iface-methods=isImplementedBy,deferred,extends,names,namesAndDescriptions,queryDescriptionFor,getBases,getDescriptionFor,getDoc,getName,getTaggedValue,getTaggedValueTags,isEqualOrExtendedBy,setTaggedValue,isImplementedByInstancesOf,adaptWith,is_implemented_by - -# List of method names used to declare (i.e. assign) instance attributes. -defining-attr-methods=__init__,__new__,setUp - -# List of valid names for the first argument in a class method. -valid-classmethod-first-arg=cls - -# List of valid names for the first argument in a metaclass class method. -valid-metaclass-classmethod-first-arg=mcs - - -[EXCEPTIONS] - -# Exceptions that will emit a warning when being caught. Defaults to -# "Exception" -overgeneral-exceptions=Exception diff --git a/CenRa_COPIE/resources_rc.py b/CenRa_COPIE/resources_rc.py deleted file mode 100644 index 9910bad8..00000000 --- a/CenRa_COPIE/resources_rc.py +++ /dev/null @@ -1,441 +0,0 @@ -# -*- coding: utf-8 -*- - -# Resource object code -# -# Created by: The Resource Compiler for PyQt5 (Qt v5.15.2) -# -# WARNING! All changes made in this file will be lost! - -from PyQt5 import QtCore - -qt_resource_data = b"\ -\x00\x00\x13\x71\ -\x89\ -\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x00\x32\x00\x00\x00\x3d\x08\x06\x00\x00\x00\xef\x69\x3a\x64\ -\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x2e\x23\x00\x00\x2e\x23\ -\x01\x78\xa5\x3f\x76\x00\x00\x00\x20\x63\x48\x52\x4d\x00\x00\x7a\ -\x25\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00\x75\ -\x30\x00\x00\xea\x60\x00\x00\x3a\x98\x00\x00\x17\x6f\x92\x5f\xc5\ -\x46\x00\x00\x12\xf7\x49\x44\x41\x54\x78\xda\xbc\x9a\x79\x78\x5d\ -\x75\x99\xc7\x3f\xbf\xb3\xde\x2d\x37\x49\x93\xb4\x69\x93\x74\x23\ -\x5d\xd2\x9d\x96\x16\x0a\x94\x82\x0a\xb2\x29\xa8\xa0\x28\xe0\x02\ -\x8f\x32\xe3\xe8\x30\x8a\x0b\x33\xe3\xf3\x80\x88\x0c\x33\x32\xa2\ -\xc8\x8c\x3e\x08\x8e\x0f\x08\x82\x6c\xa3\xc8\xbe\x43\x0b\xa4\x14\ -\xda\xa4\x4d\x4a\x93\xb4\x49\x9b\x7d\xbd\xb9\xb9\xb9\xdb\x59\xe7\ -\x8f\x7b\xee\xed\xbd\x69\x9a\x05\x75\xde\xe7\x39\xcf\x73\x97\x73\ -\xce\xef\x7c\x7f\xef\xf6\x7d\xdf\xf7\x88\x3b\x9e\x39\x93\xac\x38\ -\xae\x8d\x5f\x0d\x73\xfe\xda\x1b\x79\xb6\xf1\x36\x92\xe6\x18\xb2\ -\xa4\xaa\x40\x0d\x50\x0b\x2c\x06\x96\x00\xf3\x81\x72\x60\x0e\x10\ -\x02\xfc\x80\x0f\x50\xc8\x13\x17\x57\xd8\xb6\x61\x5d\x71\xda\xdd\ -\x6e\x2c\x35\x94\x7c\x6a\xcf\x0f\xa2\x9a\x12\x8c\x01\x11\xef\xe8\ -\x07\xba\x80\x3e\xe0\xa8\xf7\x79\x04\x30\x01\x6c\xc7\xc4\x76\x4d\ -\xce\x5f\x73\x23\x8b\xca\x36\x31\x9e\x1a\x60\x34\x7e\x14\xc3\x4c\ -\x20\x84\xc8\x5f\xaa\x70\xe1\xac\xc8\x42\x41\x96\xb5\x6d\x46\x32\ -\x7e\x99\x2c\xe9\x67\x28\xb2\xbe\x5c\x12\x52\x11\xb3\x14\x81\xc0\ -\x76\x4d\xc6\x92\x03\xcc\x2f\xa9\x43\x91\x7d\xb8\x38\x08\xa4\xc9\ -\x4e\x37\x80\xa8\xeb\x3a\x47\x6c\xc7\x3c\x68\xbb\x56\x83\xe3\x98\ -\x7b\xc1\xdd\x6b\x3b\xe6\xa0\xeb\xba\x53\xae\xa5\x4c\x5c\xd8\x71\ -\xac\x6a\xd3\x49\xdf\x79\xc9\xc6\xdb\x3e\x35\x30\xd6\x22\x1f\xea\ -\xdf\x41\xe7\xc8\x5e\x12\xc6\x28\xaa\xec\x43\x96\xd4\xd9\xa1\x71\ -\x21\x96\xea\xa3\x56\x3f\x13\x5d\x09\x92\xb6\xe2\x4c\xd8\x4c\x1c\ -\xd7\xc6\xb2\xd3\x9a\x8b\x53\xe1\x53\xc3\x15\x73\x82\x0b\x4f\x29\ -\x2f\x5a\x7a\x65\x59\x68\x11\x41\xbd\xbc\xaf\xb2\x78\xe5\x6e\x45\ -\xd6\x9f\x75\x5d\xf7\x61\xd7\xb5\x47\xa6\x07\x22\xa4\x45\xa6\x93\ -\xfa\xf3\x33\x8d\x3f\x5e\x53\x1e\x5a\xc2\x49\x73\xcf\xe0\xb4\xda\ -\x2f\x73\x96\x12\xa0\xa5\xef\x35\xf6\x1e\x79\x9c\x68\xb2\x1f\x5d\ -\x09\x22\x84\x34\x63\x2c\x86\x95\x44\x57\x82\x68\x4a\x80\x94\x19\ -\x03\x21\x93\x35\x1d\xd3\x4e\x11\xd0\x4a\x58\x5c\xbe\x99\xda\x79\ -\xdb\xa8\x2e\x5d\x4f\x69\x68\x21\x8a\xa4\x67\x2f\xaf\x04\x2e\x06\ -\x2e\xd6\xd4\xd0\x75\x89\xf4\xd0\x55\x86\x95\xdc\x27\x26\x18\x53\ -\xfe\x37\x0d\xb8\x17\xc4\x1a\xcb\x4e\xd1\x15\x69\xe4\xc8\xf0\x6e\ -\x74\xa5\x88\xc5\x15\x9b\x39\x75\xe9\xd5\xac\xab\xf9\x04\xef\xb4\ -\xdd\xcf\x9e\x23\x8f\x83\x00\x45\xf2\x65\xb6\x7c\x5a\x13\x03\x21\ -\x64\x24\x0f\x80\xe3\xda\x18\x56\x82\x62\x7f\x25\xab\xab\x2f\x60\ -\x4d\xd5\x85\x54\x84\x97\x4d\x7b\x1f\xbf\x56\xb2\x6e\xd9\x82\x73\ -\x1f\xed\x18\x78\x73\x9b\x65\xa5\x07\xf3\x37\x33\x1f\xc8\xa5\xc0\ -\xc7\xf0\x16\x55\x65\x19\x55\xf6\xe1\xba\x0e\x2d\x7d\xaf\x73\xa8\ -\x7f\x27\x6b\xab\x2f\xe2\xec\xba\x6f\xb2\xbc\xf2\x6c\x9e\x6e\xf8\ -\x21\x63\xc9\x7e\x34\x25\x30\xed\x03\xe8\x6a\x51\x4e\x83\x86\x15\ -\xc7\xaf\x95\x70\xda\x49\x5f\xe4\x94\xa5\x57\x50\xec\x5f\x70\xdc\ -\xf9\xa6\x95\x60\x68\xbc\x9d\x48\xbc\x93\xb1\x64\x2f\xe3\xe9\x11\ -\x1c\xc7\x04\x21\x08\x68\x73\x56\x58\x76\xf2\xfa\xb4\x11\xfd\xc1\ -\x89\x80\x5c\x3d\xe9\x6e\x0a\x09\x5d\x09\xe2\xba\x0e\xef\x1f\x7d\ -\x9c\xce\xc8\x5e\x2e\xdb\x7c\x27\x57\x9e\x7e\x0f\x8f\xed\xfa\x16\ -\x83\xb1\xc3\x68\x4a\xf0\xc4\x9a\x11\x10\xd2\xcb\x71\x5c\x9b\x84\ -\x11\xa1\x7a\xce\x06\xce\x5d\xf3\x5d\xaa\x4a\xd7\x15\x9c\x96\xb6\ -\xc6\xe9\x18\xac\xa7\xad\xff\x0d\x7a\x22\x4d\x8c\xa5\xfa\x30\xac\ -\x04\xae\xeb\xe4\xe9\xd5\xc5\x05\x64\x49\xbd\x5c\x12\xf2\x6d\x40\ -\x22\xb7\x8c\x17\x7e\x2b\x80\xfd\xc0\xdc\xe9\x8c\x24\xb3\xa3\x61\ -\x3e\x7f\xda\x2f\x09\xe8\xa5\x3c\xb8\xf3\x3a\x46\x93\xdd\xa8\xb2\ -\x6f\x12\x3f\x77\x71\x6c\x93\x2b\xb6\xfe\x37\x65\xa1\x45\xec\x6e\ -\x7f\x98\xad\xb5\xd7\x14\x68\x31\x9e\x1e\xa2\xb1\xf3\x4f\xec\xeb\ -\x7c\x9a\xe1\xf1\x76\x1c\xd7\x41\x91\x35\x64\xa1\x7a\x21\x56\x9c\ -\x20\x84\xb8\x67\x01\x3b\xb2\x3f\x64\x75\x73\x92\x97\x17\xa6\x0d\ -\x41\x9a\x12\x24\x65\x8c\xf1\xd8\xae\x6f\x21\x09\x95\x4f\x9d\x72\ -\x3b\xaa\xec\xc3\x71\xad\xe3\xcf\x76\x6d\x7c\x5a\x31\x25\xc1\x6a\ -\x02\x5a\x29\xdb\x57\x7e\x23\x07\xc2\x75\x6d\xde\xef\xf8\x03\xf7\ -\xef\xf8\x0a\x2f\x37\xff\x9c\x48\xbc\x13\x4d\x09\xe0\x53\x8b\x50\ -\x24\xdd\x33\x45\x31\x85\xdb\x89\x8d\x9e\xf7\x41\x5e\x40\x5f\x90\ -\x07\x6a\x5a\x30\xaa\x12\x64\x34\xd9\xcb\x33\x0d\x3f\x64\x5e\xf1\ -\x4a\xb6\x2d\xff\x1a\x86\x95\x3c\xde\xd6\xed\x34\xa5\xc1\x6a\x8a\ -\x7c\x15\x08\xcf\xd1\x01\x22\xf1\x4e\x1e\xdd\x75\x3d\xcf\x36\xde\ -\xc6\x58\xb2\x1f\xbf\x1a\x46\x91\xf5\xa9\x1e\x7c\x32\xa9\xcd\xff\ -\x92\x7d\xf8\xd0\x6c\x93\x83\xae\x86\x68\xed\x7b\x9d\x0f\x7a\x5e\ -\x64\xf3\x49\x57\x52\x55\xba\x06\xd3\x4e\xe5\x69\xc3\x41\x12\x12\ -\x9b\x16\x5f\x5e\x90\x00\x3b\x06\xeb\x79\xe8\xed\xeb\x68\xed\xdf\ -\x81\x4f\x0d\x79\x00\x3e\x94\x84\x26\x03\xa2\x7f\x98\xac\x2d\x84\ -\x42\xfd\xa1\xdf\x21\x90\x38\x75\xe9\x17\x71\x72\x8e\x09\x86\x1d\ -\xe7\xcc\xe5\x5f\x65\x55\xd5\x05\xb9\xdf\x3e\xe8\x79\x91\xc7\x77\ -\xdf\x40\x2c\x35\x80\x4f\x0d\xcf\x56\x03\xc7\x29\x7c\x32\x20\xee\ -\x87\xb9\x93\x2a\xfb\xe8\x8d\x36\xd3\x39\xfc\x3e\xcb\xe7\x9f\x43\ -\x45\xd1\x62\x6c\xc7\x20\x6d\xc5\x59\x5e\x79\x0e\x67\x2c\xff\x6a\ -\xee\xdc\x43\xfd\x6f\xf2\xd4\xde\x9b\xb0\x1c\x03\x55\x0e\x7c\xd8\ -\x25\xf3\xa5\x73\x32\x20\xe9\x0f\x73\x27\x21\x04\xb6\x63\xd2\xd2\ -\xf7\x2a\xb2\xa4\x72\xd2\xdc\x33\x49\x59\xe3\x84\x7d\x73\x39\x77\ -\xf5\x77\x73\x26\x35\x30\xd6\xc2\x9f\x1b\x6e\xc6\x71\xac\x29\x93\ -\xa8\x8b\x8b\xe3\xda\xd8\x8e\x81\x65\xa7\x31\xed\x54\xee\xb0\xec\ -\x34\xb6\x63\xe6\x85\x63\xf6\x14\x64\x76\xcf\xae\xd3\x92\x90\x67\ -\xcf\xa3\x32\x31\x9d\xae\x48\x23\x00\x8b\xcb\xb7\xf0\x66\xcb\x3d\ -\x9c\xbe\xec\x5a\x8a\x03\x0b\xbc\x04\x98\xe0\xd9\x86\x5b\x89\xa7\ -\x23\xe8\x4a\xa8\x00\x84\x8b\x8b\x6d\x1b\xd8\x8e\x89\x10\x02\x45\ -\xf6\xe1\x53\x42\xe8\x6a\x11\xba\x12\x40\x95\xfd\x48\x92\x82\x65\ -\xa7\x31\xec\x24\x69\x33\x46\xd2\x1c\xc3\xb4\x53\xdd\x02\xf1\x76\ -\xbe\x69\x2a\x0b\xcb\x36\x21\x20\x19\x4d\xf6\x11\x4d\xf6\x60\x3b\ -\x26\x8a\xa4\xcf\x18\x94\x2c\xa9\x44\x93\xbd\x24\xd2\x11\xe6\x84\ -\x16\xb3\xa2\xf2\x6c\xd6\xd5\x7c\x32\xf7\xff\x5b\xad\xf7\xd2\x39\ -\xb2\x17\xbf\x56\x9c\x03\x61\x3b\x26\x96\x9d\x46\x55\xfc\xcc\x0d\ -\xd7\x52\x53\xb6\x89\xf9\x25\x75\x94\x05\x17\x53\xe4\x9f\x8b\x24\ -\x54\x5c\xd7\xc2\x71\x2d\x32\xac\x57\x20\x49\x2a\x92\x90\x48\x5b\ -\xe3\x1c\xec\x79\xf9\xa9\xde\xd1\x7d\x23\xb2\xa4\x1d\x03\xf2\xd1\ -\x55\xff\x04\x60\xe8\x4a\x90\xd1\x44\x0f\x1d\x43\xf5\xb4\xf4\xbf\ -\xce\x70\xac\x03\x21\x04\xaa\xec\x9f\xc6\xe9\x25\xd2\x66\x8c\xd1\ -\x44\x27\x73\x8b\x57\xf2\xb1\x55\x37\xe4\x22\x51\x5f\xf4\x00\xbb\ -\xdb\x1f\x41\x57\x43\x80\xf0\x00\xa4\x28\x0e\xcc\x67\x55\xd5\xc7\ -\x59\xb5\xe0\x7c\x4a\x83\x55\x24\x8d\x51\x06\xc7\x0e\xd3\xda\xff\ -\x06\x23\xf1\x23\x8c\xa7\x86\x48\x5b\xe3\x98\x76\x0a\xc7\xb1\x90\ -\x25\x15\x55\xf6\x27\xfc\x5a\xf1\xc1\x92\x40\xf5\x70\x40\x0d\xdd\ -\x1d\xd2\xcb\x0a\x82\x85\xf2\x70\xfd\x37\xc0\x75\x8d\x22\x7f\x85\ -\xbb\xa0\x64\x9d\xa8\x9d\xb7\x8d\xb5\xd5\x17\x33\x18\x6b\xe3\xfd\ -\x23\x4f\x70\x64\xf8\x5d\x24\xe4\x13\x86\x49\x21\xc0\xb2\x2d\xc6\ -\x53\xc3\x2c\x28\xd5\x28\x0f\xd7\xe6\x0c\xe7\xad\xd6\x7b\x31\xec\ -\x44\x26\x89\x5a\x31\xc2\xfa\x5c\xb6\xac\xb8\x8e\xf5\x8b\x3e\x8d\ -\x65\xa7\x38\xd0\xf3\x12\x2f\x35\xdd\x41\xff\xd8\x41\x52\xc6\x78\ -\xa6\x56\x11\x12\x92\x90\x11\x48\xd9\xe2\xc9\x00\x7e\xe1\xb8\xce\ -\x7d\x96\x9d\xea\xb0\x1d\x33\xe9\xd3\xc2\x48\xc8\x85\xec\xd7\xb0\ -\x12\x00\xc6\x60\xec\xb0\xd3\x37\x7a\x50\x7e\xbf\xe3\x51\xca\x42\ -\x8b\xa8\xab\xfa\x38\xe7\xae\xbe\x81\x91\xf8\x51\x76\xb4\xdc\x43\ -\x5f\xf4\x20\xba\x12\x3a\xae\x32\xf3\x92\x06\xb6\x5b\x10\x0d\xe9\ -\x1a\x69\xa4\xad\x7f\x07\xb2\xa4\x62\xd9\x29\x4e\xae\xf9\x14\xdb\ -\x57\x7e\x1d\x04\xec\x6c\xf9\x35\xfb\xba\x9e\x26\x9e\x1e\x46\x96\ -\x54\x64\x49\x43\x57\x83\x93\xed\x53\x1a\xf8\x12\xf0\x88\x84\x8b\ -\xf0\x4c\x59\x53\x7c\xa8\xaa\x83\x10\xc7\xfc\x4d\xf1\xa8\xb5\x29\ -\x09\xd9\xcd\xd6\x00\xd1\x64\x2f\x6f\x1c\xfc\x15\x7b\x3a\x1e\x67\ -\xcb\xd2\x2f\xf0\xd9\x2d\x77\xf1\x5e\xfb\x23\xbc\x73\xf8\x01\x32\ -\x41\x41\x9b\x36\x7c\x36\x1c\x7d\x92\x84\x31\x4a\x59\x70\x11\xe7\ -\xad\xbd\x91\x15\xf3\xcf\x66\x77\xfb\x23\xec\x6c\xbd\x8f\xf1\xd4\ -\x20\xaa\x1c\xf0\x72\xc9\x94\xf2\x33\xe0\x91\x9c\x3f\x2a\x36\x12\ -\x26\x8e\x23\xd1\xd6\x5c\x8d\x6d\x4b\x08\xef\x39\x94\xbc\x32\xd3\ -\x3d\xe6\xc0\x1a\x7e\x49\x27\x6d\xc5\x79\xb9\xf9\x67\xb4\x0e\xbc\ -\xc9\xc5\xeb\x6f\x62\x7e\xe9\x1a\x9e\x6e\xb8\x19\xd3\x4a\xa1\xc8\ -\x79\x61\x54\x90\xab\x35\x00\x62\xc9\x01\x9a\x7b\x5e\xa0\xaa\x74\ -\x2d\x9f\x39\xe5\x0e\x02\x7a\x29\x7f\xa8\xbf\x9e\xd6\xbe\xd7\x51\ -\x95\x00\x3e\xb5\x78\x26\x79\xa4\x17\xf8\xcf\x5c\xce\x52\x4d\x86\ -\x87\xc2\xec\xab\x5f\x45\x7f\x67\x0d\x23\x83\x61\x1c\x47\xe4\xaa\ -\xcd\xfc\x3c\xe2\x4c\x8c\xea\xb2\xa4\xe0\xd7\x8a\xe9\x1a\x69\xe0\ -\xfe\x9d\xd7\x10\xf2\x95\xf1\xb9\x2d\x77\xa3\xab\x21\x2c\x27\x9d\ -\xcb\xa4\x92\x50\xf0\xe7\xed\xee\x81\xde\xe7\x09\xfb\xe6\x71\xd5\ -\xe9\xf7\xe2\x02\xbf\x7d\xe3\x8b\xb4\xf6\xbf\x89\x4f\x2b\xf6\xa2\ -\xe1\x8c\x92\xe1\x53\xc0\x20\x80\xa2\xd8\x0c\xf5\x95\xf3\xf4\xef\ -\x2e\xa2\xe9\xdd\x75\x8c\x0e\x17\xa1\x6a\x16\xba\xcf\x44\xd3\x33\ -\x47\x3e\x10\xeb\x84\x85\x91\x12\x22\x65\xc6\x78\xf8\x9d\x6f\xa0\ -\xc8\x1a\x97\x6d\xfe\x29\x8a\x50\xb1\x5d\x0b\xd7\x75\xd0\xd5\x20\ -\x61\x2f\x6f\xd8\x8e\xc9\x68\xa2\x9b\xcf\x9d\x7a\x17\x49\x23\xca\ -\xc3\xef\xfc\x3d\x91\x44\xe7\x4c\xcc\x68\xa2\xbc\x0c\x20\x09\x17\ -\xc3\x50\x79\xf1\x89\xb3\x88\xc7\x02\xe8\xfe\x34\xb2\x62\x1f\x77\ -\x72\x3e\x90\xf4\x94\x8c\x57\xf6\x63\xda\x49\x9e\xd8\xfd\x1d\xe6\ -\x86\x97\x71\xfe\xba\x7f\xc1\xb6\x0d\x2c\xc7\x60\x4e\x70\x11\xc5\ -\xfe\xf9\x00\x58\x76\x8a\xcd\x4b\xae\x24\xa0\xcf\xe1\x89\xdd\xdf\ -\xf1\xaa\xc8\xd0\x6c\x29\x49\x0a\xd8\x07\xa0\x6a\x16\xad\xfb\x97\ -\x10\x19\x0a\xa3\x6a\x56\xb6\x24\x3f\xe9\x44\x40\x52\xd3\xd3\x14\ -\x17\x55\x0e\x30\x12\xef\xe4\xd9\xc6\x5b\x59\x5d\x7d\x21\x1b\x16\ -\x5d\x4a\xd2\x18\xa5\x32\xbc\x22\x57\xca\xea\x6a\x11\xa5\xc1\x1a\ -\x9e\x6f\xbc\x9d\xbe\xe8\xc1\xa9\xab\xc7\x13\x4b\x1f\xd0\x29\x84\ -\x4b\x32\xa9\xb1\x7f\xf7\x0a\x24\x39\x67\xf9\xff\x0a\xd4\x67\xfa\ -\x0b\xc7\xc8\x6e\xbe\x46\x92\x33\xa3\xef\x45\x34\x77\xbf\x40\xfb\ -\xe0\xdb\x9c\x53\x77\x3d\x25\x81\x2a\xe6\x84\x16\x17\x9c\x75\xa8\ -\x7f\x07\x4d\xdd\xcf\xe0\xd3\x66\xda\x0a\xcb\x94\xb1\x8e\x6b\x65\ -\x39\x56\x87\x65\xa7\xe3\x42\x8e\x73\xb0\x71\x11\xc3\xfd\xa5\x28\ -\x19\x73\x0a\x7a\xe1\xb8\x0c\xb8\x16\xf8\xee\x44\x20\x66\x7e\xfd\ -\x3b\x1d\x7d\xcf\xe4\x82\x7b\xf1\xa9\x61\xce\x58\x76\x2d\x45\xbe\ -\xb9\x05\x75\x48\xfd\xa1\xfb\x71\x0a\xea\xb6\xc9\x25\xdb\x4d\x49\ -\x5b\x31\x1c\xc7\x26\xa8\xcd\xa1\x6a\xce\x3a\x96\x94\x6f\xee\xac\ -\x2a\x5d\xed\x2e\x2c\x5b\x8b\x6c\x2d\xc2\x76\x72\xda\x58\xef\x75\ -\x3d\xb3\xf2\xed\xec\x77\xc5\xb0\xe2\x78\x8e\x3e\x26\x09\xd9\xe3\ -\x34\xf2\x34\xf4\xdd\x9f\x69\x17\x0d\xed\xe2\x94\x25\x9f\xc7\xb4\ -\x8f\xed\x41\xf7\xc8\x5e\x3a\x23\x0d\x68\x53\x50\x1b\xd3\x4e\xe1\ -\xb8\x16\x45\xbe\x0a\x6a\x2a\xb7\x53\x53\xba\x9e\xb9\xc5\xcb\x71\ -\x1d\x1b\xdb\xb5\xb0\xed\x54\x87\x84\x4b\x28\x24\xd3\xb2\xab\x07\ -\xcb\xee\x83\x4c\x26\xdf\x36\xa1\x92\x2d\x05\x2e\x07\x7e\xaa\x6c\ -\x5c\x74\x19\x42\x08\xdb\x76\xac\x58\x24\xd1\xc5\x60\xec\x10\xf1\ -\xf4\x30\x02\x09\x55\xf6\x79\x25\xaa\x3b\x69\x2b\x74\x7f\xd7\xd3\ -\x2c\x2a\xdf\x82\x2c\x15\xe7\xfe\x6b\xed\x7f\x03\xcb\x4e\xa3\xa8\ -\xda\x71\x00\x2c\x3b\x8d\xe3\x5a\x54\x95\xae\x65\xfd\xc2\x4b\xa9\ -\x2a\x5d\x4f\xca\x1c\xa3\x7d\xf0\x1d\x76\xb6\xdc\xc7\xf0\x78\x3b\ -\xf1\xf4\x30\x7e\xb5\xb8\x29\xec\x2f\xc3\x34\x65\x5e\xdd\xb9\x05\ -\xbf\x4f\xc9\x3e\xc3\xb6\x49\xf6\xe5\x62\xe0\x4e\xa5\x38\x30\x1f\ -\xd7\x75\xf0\xa9\xc5\x63\x75\x55\xe7\x21\x0b\x95\x58\xb2\x9f\x03\ -\x7d\x2f\x73\x78\xe0\x2d\x0c\x6b\x1c\x4d\x09\x64\x4c\x2a\x5f\x2b\ -\x92\x8f\x23\xc3\xef\x91\x32\xa3\x5e\x82\xcb\x98\x55\x77\xa4\x11\ -\x59\x52\x26\x30\x18\x87\xb4\x15\x67\x6e\x78\x19\xdb\x96\x5f\x47\ -\x4d\xd9\xc9\x1c\x1e\xd8\xc9\xb3\x8d\xb7\xd2\x33\xba\x1f\xcb\x36\ -\x90\x25\xc5\xa3\x2b\xaa\x95\xb2\xc6\x5b\x53\xe3\xa3\x18\x69\x95\ -\x81\xa1\x0d\x48\x19\xc6\x51\x06\x6c\x9a\x04\xc8\x46\xa0\x5a\x79\ -\xe5\xc0\x2f\xb2\xcb\xf5\x29\x92\x4e\x69\xa0\x9a\xc5\x15\xa7\xb2\ -\x65\xc9\x95\x6c\x3d\xe9\xcb\xbc\xd7\xf1\x30\x4d\xdd\xcf\x21\x72\ -\xc4\x31\xa3\x1d\x49\x52\x18\x4b\xf5\xd3\x3b\xda\xc4\x92\x8a\xd3\ -\x33\xa1\xcf\x1c\x63\x2c\x35\x80\x24\x94\x9c\xee\x6c\xc7\xc0\x75\ -\x6d\xb6\xd6\x7e\x99\x6d\xcb\xaf\xa3\x2b\xd2\xc0\x23\xf5\xdf\xa4\ -\x77\xb4\x09\x59\xd2\x50\x64\x7d\x62\xb1\xd5\x2b\x09\xf9\x90\xac\ -\x08\xc6\x86\x4b\xc1\x55\xb2\xd9\x7b\xbd\xd7\x3e\x9d\x28\xc5\xc0\ -\x06\x45\x57\x72\x64\xad\x1b\x5c\x22\x89\x2e\x06\x0e\xb7\xb1\xe7\ -\xc8\x63\xac\xa8\x3c\x87\xad\xcb\xae\x61\x75\xd5\x85\xbc\xb0\xff\ -\x76\x46\xc6\x3b\x3d\x4a\xee\x35\xbc\x6d\x93\x9e\x48\x73\x01\x10\ -\xd3\x4a\xe4\x5a\x39\x96\x9d\x42\x95\x7d\x5c\xb0\xfe\x07\xd4\x2d\ -\x38\x8f\x57\x9b\x7f\x4e\xfd\xe1\x07\x00\x26\x24\xc8\x02\xd3\x6d\ -\x02\xa2\xaa\x6a\xd2\xd1\x52\x4d\x7c\xdc\x8f\xcf\x9f\x06\xd8\x3a\ -\x85\xdb\xae\x96\x0a\x6b\x60\x81\x2c\xa9\xf8\xd4\x30\x92\xa4\xd2\ -\xd4\xfd\x3c\x0f\xec\xbc\x96\xd1\x44\x17\x57\x9d\xfe\x1b\x96\x57\ -\x6e\x27\x65\x8e\xe5\x16\x16\x42\x62\x30\xd6\x5a\x50\x9b\xe0\x81\ -\xb0\x9d\x34\xaa\xe2\xe3\xd3\x9b\x7f\x42\xdd\x82\xf3\x78\x7c\xf7\ -\x0d\xec\x6c\xbd\x17\x45\xd2\xa7\xab\x71\x76\x01\x58\xa6\x42\x62\ -\xdc\x8f\x24\xe5\x22\xd6\x69\x53\x5c\xb3\x22\x1f\xc8\xbe\x63\x34\ -\xc5\x45\x20\xd0\xd5\x22\x1c\xc7\xe2\x99\xc6\x5b\xd9\xd9\xfa\x6b\ -\x2e\xd9\x78\x1b\x1b\x17\x7d\x86\x94\x11\xcb\x9c\x23\x64\xa2\x89\ -\x5e\x1c\x37\x43\x19\x14\x59\x47\x16\x6a\xa6\x4f\x0b\x7c\xe2\xe4\ -\x5b\x58\x5c\x7e\x2a\x4f\xbc\xfb\x1d\x0e\x74\xbf\x88\x5f\x2b\x99\ -\x49\x17\x7f\x87\x24\xb9\x24\x93\x3a\xed\x07\x6b\x50\x54\x0b\x6f\ -\xa0\xb4\x69\x8a\x6b\x16\xe6\x7b\xe5\x7e\xe0\x0a\xe0\x2e\xaf\x61\ -\x07\xb8\x48\x92\x82\x5f\x0a\xf3\xee\xe1\x87\x30\xac\x04\x17\x6d\ -\xb8\x09\x17\x97\x3d\x47\x9e\x40\x95\x7d\xa4\xed\x04\xb6\x6d\x20\ -\x29\x7e\x6f\x7e\xa2\x61\x58\xe3\x7c\x64\xd5\xb7\x58\x36\xef\x6c\ -\x5e\x69\xbe\x93\xe6\x9e\x17\xbc\x52\x77\x5a\x39\x0a\xec\x12\xc2\ -\x25\x11\xf3\xe3\x38\x22\x3f\x7f\xcc\x9f\xe2\xba\x0a\x65\x82\xa1\ -\x3e\xee\xd9\xe8\x83\x5e\x34\xc8\x19\x8d\x5f\x2b\xa1\xe1\xe8\x1f\ -\x09\x6a\xa5\x5c\xb8\xfe\x26\x12\xe9\x08\x07\x7a\x5f\xc2\xb4\x92\ -\x18\x76\x12\x55\xf1\xa3\xc8\x3e\x24\x21\xa8\x9a\xb3\x81\xad\xcb\ -\xae\xa1\x7d\xf0\x6d\x76\x1d\x7e\x10\x9f\x3a\xe3\x61\xd7\x8b\x40\ -\x54\xd5\x4c\x3a\x5a\x6a\x88\xc7\x02\x59\xff\x38\x7d\x9a\xeb\x4a\ -\x25\x5b\x11\xd8\x8a\xc0\x3d\x56\xf9\x7d\x00\x5c\x32\xb1\xdd\x02\ -\xe0\xd3\xc2\xbc\x7d\xe8\x7e\x9a\xbb\x9f\xe3\x92\x4d\xff\x46\x45\ -\x51\x2d\x71\x63\xd8\xf3\x9b\x4c\x24\xf3\x6b\xa5\x6c\x5b\xfe\x35\ -\x04\x82\xd7\x0e\xdc\x0d\x2e\xb3\x19\x0a\xfd\x41\x08\x48\x25\x75\ -\x8e\xb6\x55\x65\xcd\xea\x44\xf9\x23\x5f\x34\x69\xe5\xde\x11\x56\ -\x34\x8c\xa0\xa5\x6d\x2c\x35\xb7\x60\x17\xf0\x59\xa0\x63\x62\x22\ -\x54\x64\x9d\x17\xf7\xff\x84\xa4\x31\xc6\xc5\x1b\x6e\xc6\xb1\x2d\ -\x62\xc9\x81\x8c\x4a\x1d\x87\x75\x35\x17\xb3\xac\x72\x3b\x4d\xdd\ -\xcf\xd2\x3b\xda\x84\xaa\xf8\x67\x0a\xe2\x7d\xe0\x35\x59\x76\x88\ -\x8d\x86\x18\x19\x2c\x46\xce\x10\xc5\xf9\xc0\xe6\xe9\x48\xa0\x54\ -\x36\x90\xa2\xa2\x37\xc9\xea\xf7\x87\x98\x7f\x34\x8e\x2d\xe7\x34\ -\xd3\xe6\x11\xb4\x78\x41\x91\x2f\x69\x8c\xa7\x87\x79\xa5\xe9\xa7\ -\x54\xcf\xd9\xc0\xa6\xc5\x97\x33\x12\xef\xf0\x34\x22\xb1\xae\xe6\ -\x12\x5c\x37\xe3\x43\x42\x52\x66\xc3\x78\xef\x06\x0c\x21\x1c\xf6\ -\xef\x5e\x41\x3a\xa5\x65\x6b\xf2\x33\x3d\x67\x9f\x52\x24\x5b\x16\ -\x58\xaa\x84\x9e\xb4\xa9\x6d\x8e\x50\xd1\x9f\xcc\xd7\xcc\x1b\xc0\ -\xf5\xc7\x99\x98\x1a\xe4\x83\xbe\x97\xe9\x18\xac\xe7\xcc\x15\x7f\ -\x87\x2f\x57\x6f\x08\x24\x49\xa1\x2f\xda\x4c\x5f\xf4\x00\xaa\xe4\ -\x9b\x29\x88\xf7\x80\xdf\x4f\x12\xad\x00\x3e\x3e\x93\x1b\xe4\x9e\ -\xd8\x91\x04\x8e\x24\xa8\x6a\x8f\xa1\x27\xed\x7c\xcd\xdc\xe7\x45\ -\xb2\x82\xcb\x5c\xd7\xe5\xad\xb6\xff\xc1\xaf\x15\x53\x5b\xb9\xdd\ -\x9b\x25\x65\xe4\xc8\xd0\x6e\x2f\x31\xce\xa8\x49\x6d\x03\xdf\x03\ -\x52\x8a\x6a\xd1\xd5\x3e\x9f\x64\xdc\x97\xd5\x46\x18\x38\x77\x56\ -\x40\xb2\x60\x82\x63\x16\x75\x7b\x87\xd1\xd2\x4e\x3e\x98\x1b\x81\ -\xe7\x0b\xb8\x96\xe2\xe7\xe8\xd0\x7b\x1c\x1e\x78\x1b\x4d\x09\x16\ -\x50\xf6\xee\x48\xe3\x6c\x1c\xfc\x76\xe0\x15\x21\x5c\x6c\x4b\xa2\ -\xb1\xbe\x0e\xc7\x25\x4b\x4b\x3e\x02\x2c\x9c\x0d\x90\xab\xb2\x09\ -\xc7\x56\x04\xa1\xa8\x99\x01\x63\x38\x38\x19\x30\x49\x6f\xc6\xb8\ -\xa7\x60\x26\x8f\x45\x63\xe7\xff\x1e\x57\x7c\xa5\xcc\xd8\x4c\xe7\ -\x46\x8f\x01\xb7\x64\x1b\x0c\xfb\xdf\x5b\xc1\x40\x77\x39\xaa\x9a\ -\xab\xc9\xaf\x98\x69\x65\x96\x5d\xed\x0b\x5e\x0c\xbf\x62\x22\x18\ -\xe5\x18\x98\x41\xe0\x33\x40\x63\x2e\xe6\xc9\x7e\x3a\x86\x76\x11\ -\x89\x77\x16\xc4\xb6\xb9\xe1\x65\xb8\xae\x35\xdd\xe2\x8f\x02\x5f\ -\x01\x0c\x55\xb3\x18\x1b\x0d\xb1\xeb\xd5\x93\x91\xe4\x1c\x88\xa5\ -\xc0\x85\x33\x1d\xe5\x4b\xde\xd6\xcd\xf1\x8a\x94\x07\x3d\x7b\xcd\ -\x80\x19\x35\x59\x55\x08\xa6\xdd\xbb\xf9\x2b\xd9\x31\x76\x3c\x1d\ -\xa1\xad\xff\x8d\x82\xbb\x2e\x28\x59\x3d\x55\x75\x98\x06\x7e\x08\ -\x5c\x09\x8c\x4b\xb2\x43\x3c\x16\xe0\xa5\x27\xb7\x61\x9a\x32\x92\ -\x94\xf3\xb5\x6b\x81\x99\x66\xd2\x51\xc9\x1b\x82\x2e\xcd\x33\xb5\ -\x7f\x07\xfe\x39\x1f\xcc\x04\xcd\x74\x03\x9f\xf4\x4c\x22\x2a\x49\ -\x32\x87\xfa\x77\x14\xdc\xb5\xb2\x64\x15\x3e\xad\xa8\x60\x82\xe5\ -\x35\x38\x9e\x04\xb6\x03\x37\x67\x27\x4e\x3e\x9f\xc1\xde\xb7\x56\ -\xd3\xd5\x5e\x99\xad\xcb\xb3\x33\xcd\x6b\x67\x11\xba\x07\x25\x60\ -\xb9\x57\xb4\xe4\xcb\x6d\xc0\x3f\x64\xc1\x84\x47\x4d\xea\x1a\x32\ -\x60\xbc\x00\x10\x07\x6e\x02\x4e\x53\x24\xfd\x96\xfe\xb1\x83\xef\ -\x0e\x8f\x77\x44\x1d\xd7\x76\x1c\xc7\x22\xec\xaf\xa4\x34\xb8\x30\ -\xe1\x38\x66\x9f\x17\xc2\x7f\x04\x9c\x05\x7c\xda\xeb\x80\x20\x49\ -\x0e\x81\x60\x8a\x86\xfa\x3a\xf6\xbf\xb7\x0c\x5f\x20\x95\xbf\xfe\ -\xf7\x80\x79\xb3\x99\x5e\x29\xc0\xaa\x13\x78\xe6\x9d\xde\x2b\x47\ -\xbf\xb7\x14\x41\x38\x62\xb0\xb2\x71\x84\xb6\xba\x12\x52\x41\x05\ -\xc9\x76\x01\x3e\x10\x42\xba\x29\x6d\x27\x6f\xe9\x1b\x6d\xaa\xd5\ -\x15\xff\x3c\xd3\x4a\x15\xdb\x8e\x95\xd2\x95\xe0\x90\x8b\xdb\xe3\ -\xbd\xca\x74\x2c\xba\x48\x0e\xba\xdf\x60\x2c\x52\xc4\x9b\xcf\x6d\ -\xa1\x65\xdf\xd2\x5c\x57\xdf\x93\x33\x80\xeb\x66\xd9\x3e\x3a\xa4\ -\x00\x6b\x4f\xd4\x63\xf0\x7a\x47\xe3\xc0\x53\x96\x22\x51\x34\x6a\ -\xb0\xe1\x9d\x01\x0e\xd7\x95\xd0\x53\x13\x42\xb6\x9d\x4c\x1e\x74\ -\x84\x2d\x10\x07\x81\x83\xc7\x66\x51\x6e\xde\xe8\xc1\x45\x51\x6d\ -\x14\xd5\x22\x3a\x52\xc4\x3b\xaf\x6c\xa4\xaf\xb3\x82\x9e\xa3\xf3\ -\xd0\x7d\x46\xbe\x5f\x94\x01\xbf\xf4\xde\xfd\x9a\x8d\x34\x2b\xc0\ -\x54\x6f\xb3\x04\x80\xdf\x79\xa1\xf7\x4f\x8e\x24\x10\x2e\x2c\xf9\ -\x20\x4a\x78\x24\x4d\xb4\x4c\x27\x5a\xac\x62\xaa\x02\x34\x1d\x21\ -\x1d\xdf\x7d\xd1\x74\x13\xd3\x50\x38\xb0\xb7\x96\x81\x9e\x32\x86\ -\xfb\x4b\xe9\x6a\x9f\x8f\xaa\x99\x59\x66\x9b\x23\x0c\x5e\xf2\x5d\ -\x3b\x4b\x10\x29\xa0\x49\x01\xaa\xa7\x39\x31\x0c\x3c\x04\xfc\x23\ -\xf0\x1b\xd7\x33\x81\x79\x3d\x09\xca\xfb\x92\xb8\x02\x62\x01\x17\ -\x3b\xbc\x07\x7b\xf3\x2a\x64\x5f\x08\x27\x15\x45\x51\x1c\xfc\x81\ -\x14\x6d\x4d\xab\xd9\xf3\xf6\x6a\x06\xba\xcb\x71\x1c\x81\xa2\xd8\ -\xf8\x0b\xfd\x01\xcf\x1f\x7e\xe5\xb1\xee\xd9\x4a\x1b\x70\x58\x99\ -\x09\x21\xf3\x3a\x7c\xf7\x01\x6b\xbc\x88\x33\x66\x29\xc7\xdc\xaa\ -\x78\xdc\x25\xf2\xe4\x5d\x24\x76\xbf\x48\xe5\xb6\x2f\x51\xbc\x72\ -\x13\xa3\x91\x20\xaf\x3d\xbf\x95\xd6\x86\xb5\x58\xa6\x8c\xaa\x99\ -\x27\x6a\x31\x7e\xc2\x0b\x2e\xab\x3f\xe4\x98\x7a\x07\x90\x16\xaf\ -\x7f\xbf\x76\xc0\x7b\xa9\x66\xa6\xb2\xd7\x0b\xd1\x7f\x9c\xd8\x66\ -\x75\xcc\x14\xba\x64\xd0\x14\xba\x8c\x5f\xec\xde\x48\x72\x34\x8d\ -\xa6\xdb\x05\x93\x25\xaf\xeb\xb1\xd0\x2b\x96\x2e\x07\x3e\xfa\x17\ -\xce\xdb\x2f\x05\xfe\xa8\x4c\x35\x4e\x38\x81\x6c\x00\x7e\xef\x01\ -\xfa\xb3\xb7\x23\x87\x80\x36\x49\xf5\xa1\x2b\x0e\xad\x2d\x83\x44\ -\xa3\x36\x45\xbe\xdc\xad\x2b\x3d\x3f\x3b\x1b\xa8\xf3\xcc\x59\xe5\ -\x2f\x97\x0e\xe0\xb5\xec\xc4\xea\xc8\x34\xf5\xf0\x54\x80\x36\x78\ -\x9f\xff\x03\xf8\xbe\xc0\x25\x6e\xfb\x39\x94\x5c\x8c\x7e\x8c\x2f\ -\x95\x01\xcf\x79\x75\xf7\x5f\x5b\x1e\x02\xa2\xd9\x4c\xfe\xdb\xbf\ -\xf0\x66\x0f\x7b\x36\x8e\x2c\x1c\x22\x46\x11\x6d\xe3\x0b\x50\x84\ -\x95\xef\xc8\x7f\x0b\x10\x11\xe0\x9e\x7c\xf6\x7b\xaf\xb7\xa3\x1f\ -\xe6\x5d\x90\x6f\x7b\x9c\x29\x9a\x21\x91\x26\xf5\xc3\x75\x8c\x9b\ -\x7e\xa4\x63\x7e\x71\x08\x78\xfd\x6f\x00\xe4\x0e\xcf\x9a\x72\x40\ -\x6c\xe0\xfb\xc0\x45\x9e\x09\xc4\xa7\xb8\x38\xe6\x51\x8e\x1b\x80\ -\x53\xbd\xec\x5f\x40\xa8\x2c\x57\xf6\x06\xc9\x05\x24\xf1\xab\x40\ -\xf3\x5f\x11\xc4\x6b\xde\xda\xc7\x4a\xf0\xbc\xcf\xcf\x78\xc7\x4a\ -\xcf\x14\x16\x7a\x39\xc4\xf6\x28\x7c\xa7\xd7\xfb\x6a\x9f\x6a\x04\ -\x25\x26\xff\xab\x15\x38\xcf\x9b\x36\x5d\xcd\xac\xdf\x0f\x3b\xae\ -\x2c\xbe\x7a\x62\xc4\x9c\xac\x3b\xf0\x81\x77\xfc\xb5\xa5\x1b\xf8\ -\x3a\xf0\x5f\xc0\x65\xc0\x05\xc0\x3a\x32\xaf\xa3\xcf\x44\xc6\x81\ -\x07\x3c\xb2\x3a\x38\xf1\x4f\x85\xff\x7f\x69\xf2\x8e\x1f\x7b\xf4\ -\x68\xbd\x47\x5c\x17\x93\x79\x39\xb4\xc8\x1b\x78\x1a\x9e\x43\x77\ -\x7b\xa1\xfe\x35\xe0\xc0\x89\x6e\xfa\x7f\x03\x00\x16\xc1\xec\x18\ -\x22\x48\x5b\x85\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ -\ -\x00\x00\x03\x8e\ -\x89\ -\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\ -\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\ -\x01\x42\x28\x9b\x78\x00\x00\x00\x20\x63\x48\x52\x4d\x00\x00\x7a\ -\x25\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00\x75\ -\x30\x00\x00\xea\x60\x00\x00\x3a\x98\x00\x00\x17\x6f\x92\x5f\xc5\ -\x46\x00\x00\x03\x14\x49\x44\x41\x54\x78\xda\xb4\x95\x4d\x68\x94\ -\x57\x14\x86\x9f\x7b\xbf\xef\x1b\x4d\x93\x89\x13\xa6\x64\x66\x12\ -\x23\xc9\xd4\x62\x54\x34\x25\x85\xfe\x8c\x94\x42\xbb\x28\x52\xa1\ -\x16\xa4\x52\x4a\x88\x68\xb4\xab\x52\x25\x43\x71\x5b\x37\x86\x36\ -\xa5\x5d\x95\x82\xd4\x36\xd5\x95\xab\x16\xba\x10\xb4\x52\x08\x95\ -\x0a\x4a\xb1\x41\xac\x1a\x13\x1d\xcc\x64\x34\xf3\xf3\x25\x33\x75\ -\x66\xbe\x9f\x7b\xbb\x08\x26\xd4\x9f\x34\x33\x8d\xef\xea\xc0\xe5\ -\x9e\x73\xcf\xfb\xbe\xe7\x5c\xa1\xb5\xe6\x69\x42\xf2\x94\x61\x3e\ -\x08\xde\xd8\x33\x98\x71\x5d\x2f\xb2\x12\x49\x2d\xcb\xbc\x7b\xee\ -\xfb\x2f\xa2\xff\x2a\xe0\xba\x5e\x64\x78\x78\x78\x45\x5e\x9d\x4c\ -\x26\x23\x8f\x74\x00\x30\x31\x39\xc1\xf1\xe3\xdf\x51\x29\x97\xe7\ -\x0f\x4d\x8b\x03\x1f\xee\x27\xde\x15\x67\x64\x64\x84\xb1\xb1\xb1\ -\x25\x13\x6f\xdc\xb4\x89\x7d\x7b\xf7\x2e\xad\x81\xe7\x7a\x8b\xad\ -\x9a\x8b\xf5\x3d\xdf\xff\x6f\xbe\x0d\xe3\xc9\x1a\x00\xc4\xbb\xe2\ -\x0c\x0d\x1d\x7d\xec\xe5\x87\x5f\x56\xb3\xc8\x96\x65\xaa\x64\x32\ -\x29\x57\x48\x64\xf5\x48\x01\xd7\xf5\xe4\xa9\xe1\xc3\x2b\x22\xf2\ -\x7b\xc9\x21\xf9\x58\x8a\x00\x0e\x7d\x76\x8c\xa9\x7b\x39\x00\xda\ -\x5b\xc3\x7c\xf9\xc9\x7e\x00\xce\x5f\xfe\x8b\xaf\x4e\xfc\xb8\x64\ -\xe2\x83\x7d\x3b\x49\xf4\x74\x3f\x59\x03\x60\x21\xe1\xc3\x48\xf4\ -\x74\x93\xe8\x39\x5c\xbf\x06\xf5\xc0\x55\x2e\xb7\xca\xb7\xa8\xde\ -\xaf\x12\x14\x41\xa2\xa1\x28\xab\xcc\x55\x00\x1c\xf9\xf4\xc8\xff\ -\xa3\xc8\x0a\x55\x88\x6d\xd5\x3c\xd7\x1c\x45\x36\x48\x3c\xe5\x51\ -\x29\xba\xbc\xb3\x79\xc7\xbc\xad\xc5\xbc\xdd\xc5\x83\x65\xf7\xda\ -\x07\x1f\xeb\xe5\x8a\x9c\x9d\xcb\x72\xe6\xea\x19\x3a\xd7\x75\x32\ -\x39\x3b\x49\xa1\x50\xc0\xf7\x7d\x1a\x1a\x1a\x28\xce\x16\xb9\xf8\ -\x4b\x99\x58\x77\x5e\xd4\x4d\xd1\x95\xd4\x15\xda\xd7\xad\xe5\x66\ -\x7e\x9c\x72\xbe\xc2\xf6\x8d\xdb\x69\x0a\x34\x31\x7a\x6d\x94\x92\ -\x2a\x61\xae\xf6\x50\x52\xd5\x4e\xd1\xb1\x9f\x4f\x81\x54\x74\xad\ -\x6f\x26\x91\xd8\x4a\xc1\xb6\xb9\x7c\x69\x9a\xf3\xa3\x27\xa8\xcc\ -\x05\xf8\xe8\xfd\x77\x89\x75\xc4\xb8\x70\xf6\x57\xa4\x90\xb5\xbb\ -\x68\xa2\x14\xc7\x6a\xb2\x08\x36\x07\xc9\x96\xb2\xac\x09\xad\xa1\ -\xf7\x65\x83\x62\xbe\xc8\xc0\xeb\x03\xdc\xc8\xdc\xe0\x6a\xf6\x3a\ -\x2d\x6d\x15\x84\x16\x42\x48\xa1\x6b\x9a\xdc\xdd\xaf\xec\x46\x57\ -\x35\x33\xc5\x19\x84\x14\x98\x86\x89\x72\x14\xfd\xdb\xfa\x19\xbf\ -\x3b\x4e\x5e\x17\x88\x75\x44\xd9\xf2\x52\x14\x69\xc8\xcf\xb5\xd6\ -\xb2\x66\x17\x09\xa9\x89\xac\x2f\xb3\xe5\xc5\x0e\xd2\x77\x66\xb8\ -\x7e\xd1\xe7\x8f\x0b\xdf\xb0\xe3\xed\x17\x08\x04\x03\x64\xe7\x72\ -\x84\xc3\x61\x94\x52\x83\xa9\xdb\xa9\x67\xea\x72\x91\xe3\x39\x9c\ -\xfe\xf3\x34\xbd\x9d\xbd\xb4\xb5\xb4\x71\xf2\xb7\x93\x18\x86\x41\ -\xce\xcd\x11\x89\x45\x98\xba\x93\xc1\xb6\x73\x67\xab\x4e\x55\xd6\ -\xb5\xdc\x1c\xcf\xc1\xd7\x3e\xa9\x5c\x0a\x21\x04\x7d\xdb\xfa\xd8\ -\x10\xd9\x80\x16\x1a\x29\x25\x99\xe9\x3c\xf9\xbf\xf3\x3b\x3d\xe5\ -\xbd\xb5\xd0\xc1\x9b\x7b\x06\x33\xce\x32\xbf\x4c\xc3\x54\x74\xbf\ -\xaa\x78\xb6\xb5\x85\xc9\x6b\x59\x94\xaf\x59\x1b\x0f\xd1\xd6\x1e\ -\xa5\x54\x2c\x71\xe9\xf7\xdb\xf7\xbd\x48\xa6\x31\xe4\x85\x16\x07\ -\x6d\x39\xe8\x3f\xda\xbf\x10\xab\x80\xda\xd7\x1a\x6d\xfd\x3a\x1c\ -\x0e\x07\x02\x81\x00\x00\xb6\x6d\x93\x9e\x4a\x9f\x13\x86\xd8\x65\ -\x5a\x66\xc1\xa9\x3a\xf5\xef\x22\x21\xc4\xb7\xe9\xe9\xf4\x4d\xbb\ -\x60\x0f\x98\x96\xf9\xbc\x52\xaa\x58\x29\x57\x7e\xf2\x3c\xef\x87\ -\xc6\x60\xe3\xac\x40\x00\xf0\xcf\x00\xe0\xe8\x5f\x8e\x9d\x28\xd2\ -\xfe\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ -" - -qt_resource_name = b"\ -\x00\x07\ -\x07\x3b\xe0\xb3\ -\x00\x70\ -\x00\x6c\x00\x75\x00\x67\x00\x69\x00\x6e\x00\x73\ -\x00\x05\ -\x00\x4a\x66\xf5\ -\x00\x43\ -\x00\x6f\x00\x70\x00\x69\x00\x65\ -\x00\x09\ -\x05\x84\x84\xc7\ -\x00\x63\ -\x00\x65\x00\x6e\x00\x72\x00\x61\x00\x2e\x00\x70\x00\x6e\x00\x67\ -\x00\x0f\ -\x04\xa3\x0a\x67\ -\x00\x74\ -\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x5f\x00\x63\x00\x6f\x00\x70\x00\x69\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ -" - -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\x02\x00\x00\x00\x03\ -\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x13\x75\ -\x00\x00\x00\x24\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -" - -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\x02\x00\x00\x00\x03\ -\x00\x00\x00\x00\x00\x00\x00\x00\ -\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x13\x75\ -\x00\x00\x01\x8d\xac\xb3\xc8\x10\ -\x00\x00\x00\x24\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -\x00\x00\x01\x8d\xac\xb4\x4d\x47\ -" - -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(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) - -def qCleanupResources(): - QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data) - -qInitResources() diff --git a/CenRa_COPIE/resources_rc.py.bak b/CenRa_COPIE/resources_rc.py.bak deleted file mode 100644 index a838d075..00000000 --- a/CenRa_COPIE/resources_rc.py.bak +++ /dev/null @@ -1,102 +0,0 @@ -# -*- coding: utf-8 -*- - -# Resource object code -# -# Created: mar. 14. avr. 11:48:28 2015 -# by: The Resource Compiler for PyQt (Qt v4.8.5) -# -# WARNING! All changes made in this file will be lost! - -from PyQt4 import QtCore - -qt_resource_data = "\ -\x00\x00\x03\x8e\ -\x89\ -\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ -\x00\x00\x18\x00\x00\x00\x18\x08\x06\x00\x00\x00\xe0\x77\x3d\xf8\ -\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0d\xd7\x00\x00\x0d\xd7\ -\x01\x42\x28\x9b\x78\x00\x00\x00\x20\x63\x48\x52\x4d\x00\x00\x7a\ -\x25\x00\x00\x80\x83\x00\x00\xf9\xff\x00\x00\x80\xe9\x00\x00\x75\ -\x30\x00\x00\xea\x60\x00\x00\x3a\x98\x00\x00\x17\x6f\x92\x5f\xc5\ -\x46\x00\x00\x03\x14\x49\x44\x41\x54\x78\xda\xb4\x95\x4d\x68\x94\ -\x57\x14\x86\x9f\x7b\xbf\xef\x1b\x4d\x93\x89\x13\xa6\x64\x66\x12\ -\x23\xc9\xd4\x62\x54\x34\x25\x85\xfe\x8c\x94\x42\xbb\x28\x52\xa1\ -\x16\xa4\x52\x4a\x88\x68\xb4\xab\x52\x25\x43\x71\x5b\x37\x86\x36\ -\xa5\x5d\x95\x82\xd4\x36\xd5\x95\xab\x16\xba\x10\xb4\x52\x08\x95\ -\x0a\x4a\xb1\x41\xac\x1a\x13\x1d\xcc\x64\x34\xf3\xf3\x25\x33\x75\ -\x66\xbe\x9f\x7b\xbb\x08\x26\xd4\x9f\x34\x33\x8d\xef\xea\xc0\xe5\ -\x9e\x73\xcf\xfb\xbe\xe7\x5c\xa1\xb5\xe6\x69\x42\xf2\x94\x61\x3e\ -\x08\xde\xd8\x33\x98\x71\x5d\x2f\xb2\x12\x49\x2d\xcb\xbc\x7b\xee\ -\xfb\x2f\xa2\xff\x2a\xe0\xba\x5e\x64\x78\x78\x78\x45\x5e\x9d\x4c\ -\x26\x23\x8f\x74\x00\x30\x31\x39\xc1\xf1\xe3\xdf\x51\x29\x97\xe7\ -\x0f\x4d\x8b\x03\x1f\xee\x27\xde\x15\x67\x64\x64\x84\xb1\xb1\xb1\ -\x25\x13\x6f\xdc\xb4\x89\x7d\x7b\xf7\x2e\xad\x81\xe7\x7a\x8b\xad\ -\x9a\x8b\xf5\x3d\xdf\xff\x6f\xbe\x0d\xe3\xc9\x1a\x00\xc4\xbb\xe2\ -\x0c\x0d\x1d\x7d\xec\xe5\x87\x5f\x56\xb3\xc8\x96\x65\xaa\x64\x32\ -\x29\x57\x48\x64\xf5\x48\x01\xd7\xf5\xe4\xa9\xe1\xc3\x2b\x22\xf2\ -\x7b\xc9\x21\xf9\x58\x8a\x00\x0e\x7d\x76\x8c\xa9\x7b\x39\x00\xda\ -\x5b\xc3\x7c\xf9\xc9\x7e\x00\xce\x5f\xfe\x8b\xaf\x4e\xfc\xb8\x64\ -\xe2\x83\x7d\x3b\x49\xf4\x74\x3f\x59\x03\x60\x21\xe1\xc3\x48\xf4\ -\x74\x93\xe8\x39\x5c\xbf\x06\xf5\xc0\x55\x2e\xb7\xca\xb7\xa8\xde\ -\xaf\x12\x14\x41\xa2\xa1\x28\xab\xcc\x55\x00\x1c\xf9\xf4\xc8\xff\ -\xa3\xc8\x0a\x55\x88\x6d\xd5\x3c\xd7\x1c\x45\x36\x48\x3c\xe5\x51\ -\x29\xba\xbc\xb3\x79\xc7\xbc\xad\xc5\xbc\xdd\xc5\x83\x65\xf7\xda\ -\x07\x1f\xeb\xe5\x8a\x9c\x9d\xcb\x72\xe6\xea\x19\x3a\xd7\x75\x32\ -\x39\x3b\x49\xa1\x50\xc0\xf7\x7d\x1a\x1a\x1a\x28\xce\x16\xb9\xf8\ -\x4b\x99\x58\x77\x5e\xd4\x4d\xd1\x95\xd4\x15\xda\xd7\xad\xe5\x66\ -\x7e\x9c\x72\xbe\xc2\xf6\x8d\xdb\x69\x0a\x34\x31\x7a\x6d\x94\x92\ -\x2a\x61\xae\xf6\x50\x52\xd5\x4e\xd1\xb1\x9f\x4f\x81\x54\x74\xad\ -\x6f\x26\x91\xd8\x4a\xc1\xb6\xb9\x7c\x69\x9a\xf3\xa3\x27\xa8\xcc\ -\x05\xf8\xe8\xfd\x77\x89\x75\xc4\xb8\x70\xf6\x57\xa4\x90\xb5\xbb\ -\x68\xa2\x14\xc7\x6a\xb2\x08\x36\x07\xc9\x96\xb2\xac\x09\xad\xa1\ -\xf7\x65\x83\x62\xbe\xc8\xc0\xeb\x03\xdc\xc8\xdc\xe0\x6a\xf6\x3a\ -\x2d\x6d\x15\x84\x16\x42\x48\xa1\x6b\x9a\xdc\xdd\xaf\xec\x46\x57\ -\x35\x33\xc5\x19\x84\x14\x98\x86\x89\x72\x14\xfd\xdb\xfa\x19\xbf\ -\x3b\x4e\x5e\x17\x88\x75\x44\xd9\xf2\x52\x14\x69\xc8\xcf\xb5\xd6\ -\xb2\x66\x17\x09\xa9\x89\xac\x2f\xb3\xe5\xc5\x0e\xd2\x77\x66\xb8\ -\x7e\xd1\xe7\x8f\x0b\xdf\xb0\xe3\xed\x17\x08\x04\x03\x64\xe7\x72\ -\x84\xc3\x61\x94\x52\x83\xa9\xdb\xa9\x67\xea\x72\x91\xe3\x39\x9c\ -\xfe\xf3\x34\xbd\x9d\xbd\xb4\xb5\xb4\x71\xf2\xb7\x93\x18\x86\x41\ -\xce\xcd\x11\x89\x45\x98\xba\x93\xc1\xb6\x73\x67\xab\x4e\x55\xd6\ -\xb5\xdc\x1c\xcf\xc1\xd7\x3e\xa9\x5c\x0a\x21\x04\x7d\xdb\xfa\xd8\ -\x10\xd9\x80\x16\x1a\x29\x25\x99\xe9\x3c\xf9\xbf\xf3\x3b\x3d\xe5\ -\xbd\xb5\xd0\xc1\x9b\x7b\x06\x33\xce\x32\xbf\x4c\xc3\x54\x74\xbf\ -\xaa\x78\xb6\xb5\x85\xc9\x6b\x59\x94\xaf\x59\x1b\x0f\xd1\xd6\x1e\ -\xa5\x54\x2c\x71\xe9\xf7\xdb\xf7\xbd\x48\xa6\x31\xe4\x85\x16\x07\ -\x6d\x39\xe8\x3f\xda\xbf\x10\xab\x80\xda\xd7\x1a\x6d\xfd\x3a\x1c\ -\x0e\x07\x02\x81\x00\x00\xb6\x6d\x93\x9e\x4a\x9f\x13\x86\xd8\x65\ -\x5a\x66\xc1\xa9\x3a\xf5\xef\x22\x21\xc4\xb7\xe9\xe9\xf4\x4d\xbb\ -\x60\x0f\x98\x96\xf9\xbc\x52\xaa\x58\x29\x57\x7e\xf2\x3c\xef\x87\ -\xc6\x60\xe3\xac\x40\x00\xf0\xcf\x00\xe0\xe8\x5f\x8e\x9d\x28\xd2\ -\xfe\x00\x00\x00\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ -" - -qt_resource_name = "\ -\x00\x07\ -\x07\x3b\xe0\xb3\ -\x00\x70\ -\x00\x6c\x00\x75\x00\x67\x00\x69\x00\x6e\x00\x73\ -\x00\x05\ -\x00\x4a\x66\xf5\ -\x00\x43\ -\x00\x6f\x00\x70\x00\x69\x00\x65\ -\x00\x0f\ -\x04\xa3\x0a\x67\ -\x00\x74\ -\x00\x61\x00\x62\x00\x6c\x00\x65\x00\x5f\x00\x63\x00\x6f\x00\x70\x00\x69\x00\x65\x00\x2e\x00\x70\x00\x6e\x00\x67\ -" - -qt_resource_struct = "\ -\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\x01\x00\x00\x00\x03\ -\x00\x00\x00\x24\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\ -" - -def qInitResources(): - QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) - -def qCleanupResources(): - QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data) - -qInitResources() diff --git a/CenRa_COPIE/resources_rc.qrc b/CenRa_COPIE/resources_rc.qrc deleted file mode 100644 index 2736e439..00000000 --- a/CenRa_COPIE/resources_rc.qrc +++ /dev/null @@ -1,6 +0,0 @@ - - - table_copie.png - cenra.png - - diff --git a/CenRa_COPIE/scripts/compile-strings.sh b/CenRa_COPIE/scripts/compile-strings.sh deleted file mode 100644 index 9d760831..00000000 --- a/CenRa_COPIE/scripts/compile-strings.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/bash -LRELEASE=$1 -LOCALES=$2 - - -for LOCALE in ${LOCALES} -do - echo "Processing: ${LOCALE}.ts" - # Note we don't use pylupdate with qt .pro file approach as it is flakey - # about what is made available. - $LRELEASE i18n/${LOCALE}.ts -done diff --git a/CenRa_COPIE/scripts/run-env-linux.sh b/CenRa_COPIE/scripts/run-env-linux.sh deleted file mode 100644 index 668247c5..00000000 --- a/CenRa_COPIE/scripts/run-env-linux.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -QGIS_PREFIX_PATH=/usr/local/qgis-2.0 -if [ -n "$1" ]; then - QGIS_PREFIX_PATH=$1 -fi - -echo ${QGIS_PREFIX_PATH} - - -export QGIS_PREFIX_PATH=${QGIS_PREFIX_PATH} -export QGIS_PATH=${QGIS_PREFIX_PATH} -export LD_LIBRARY_PATH=${QGIS_PREFIX_PATH}/lib -export PYTHONPATH=${QGIS_PREFIX_PATH}/share/qgis/python:${QGIS_PREFIX_PATH}/share/qgis/python/plugins:${PYTHONPATH} - -echo "QGIS PATH: $QGIS_PREFIX_PATH" -export QGIS_DEBUG=0 -export QGIS_LOG_FILE=/tmp/inasafe/realtime/logs/qgis.log - -export PATH=${QGIS_PREFIX_PATH}/bin:$PATH - -echo "This script is intended to be sourced to set up your shell to" -echo "use a QGIS 2.0 built in $QGIS_PREFIX_PATH" -echo -echo "To use it do:" -echo "source $BASH_SOURCE /your/optional/install/path" -echo -echo "Then use the make file supplied here e.g. make guitest" diff --git a/CenRa_COPIE/scripts/update-strings.sh b/CenRa_COPIE/scripts/update-strings.sh deleted file mode 100644 index 03dcfd78..00000000 --- a/CenRa_COPIE/scripts/update-strings.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash -LOCALES=$* - -# Get newest .py files so we don't update strings unnecessarily - -CHANGED_FILES=0 -PYTHON_FILES=`find . -regex ".*\(ui\|py\)$" -type f` -for PYTHON_FILE in $PYTHON_FILES -do - CHANGED=$(stat -c %Y $PYTHON_FILE) - if [ ${CHANGED} -gt ${CHANGED_FILES} ] - then - CHANGED_FILES=${CHANGED} - fi -done - -# Qt translation stuff -# for .ts file -UPDATE=false -for LOCALE in ${LOCALES} -do - TRANSLATION_FILE="i18n/$LOCALE.ts" - if [ ! -f ${TRANSLATION_FILE} ] - then - # Force translation string collection as we have a new language file - touch ${TRANSLATION_FILE} - UPDATE=true - break - fi - - MODIFICATION_TIME=$(stat -c %Y ${TRANSLATION_FILE}) - if [ ${CHANGED_FILES} -gt ${MODIFICATION_TIME} ] - then - # Force translation string collection as a .py file has been updated - UPDATE=true - break - fi -done - -if [ ${UPDATE} == true ] -# retrieve all python files -then - print ${PYTHON_FILES} - # update .ts - echo "Please provide translations by editing the translation files below:" - for LOCALE in ${LOCALES} - do - echo "i18n/"${LOCALE}".ts" - # Note we don't use pylupdate with qt .pro file approach as it is flakey - # about what is made available. - pylupdate4 -noobsolete ${PYTHON_FILES} -ts i18n/${LOCALE}.ts - done -else - echo "No need to edit any translation files (.ts) because no python files" - echo "has been updated since the last update translation. " -fi diff --git a/CenRa_COPIE/table_copie.png b/CenRa_COPIE/tools/icons/icon.png similarity index 100% rename from CenRa_COPIE/table_copie.png rename to CenRa_COPIE/tools/icons/icon.png diff --git a/CenRa_COPIE/tools/resources.py b/CenRa_COPIE/tools/resources.py index 71bbf362..689fe6b2 100644 --- a/CenRa_COPIE/tools/resources.py +++ b/CenRa_COPIE/tools/resources.py @@ -89,7 +89,7 @@ def resources_path(*args): :return: Absolute path to the resources folder. :rtype: str """ - path = abspath(abspath(join(plugin_path(), "CenRa_Metabase\\resources"))) + path = abspath(abspath(join(plugin_path(), "CenRa_Copie\\tools"))) for item in args: path = abspath(join(path, item)) return path diff --git a/CenRa_COPIE/copie_dialog_base.ui b/CenRa_COPIE/tools/ui/CenRa_Copie_base.ui similarity index 100% rename from CenRa_COPIE/copie_dialog_base.ui rename to CenRa_COPIE/tools/ui/CenRa_Copie_base.ui diff --git a/CenRa_COPIE/tools/ui/CenRa_IssuesSend.ui b/CenRa_COPIE/tools/ui/CenRa_IssuesSend.ui new file mode 100644 index 00000000..14d923e4 --- /dev/null +++ b/CenRa_COPIE/tools/ui/CenRa_IssuesSend.ui @@ -0,0 +1,332 @@ + + + CenRa_IssuesSend + + + + 0 + 0 + 810 + 587 + + + + CEN-RA Metabase + + + + icon.svgicon.svg + + + + + 0 + 550 + 811 + 31 + + + + + + + Annuler + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Envoyer + + + + + + + + + 10 + 10 + 791 + 531 + + + + Issues + + + + + 240 + 40 + 321 + 41 + + + + Qt::AlignCenter + + + + + + 10 + 101 + 571 + 421 + + + + + + + 589 + 100 + 191 + 431 + + + + QFrame::StyledPanel + + + QFrame::Raised + + + + + 9 + 9 + 341 + 411 + + + + + Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter + + + Qt::AlignRight|Qt::AlignTop|Qt::AlignTrailing + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Bug + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Aide + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Question + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Amélioration + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Autre + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + + + + 250 + 20 + 51 + 21 + + + + + Arial + 14 + + + + Titre: + + + + + + 20 + 70 + 91 + 31 + + + + + Arial + 12 + + + + Messages: + + + + + + 600 + 70 + 91 + 31 + + + + + Arial + 12 + + + + Sujet: + + + + + + ok_button + annuler_button + + + + diff --git a/CenRa_COPIE/forms/copie_about_form.ui b/CenRa_COPIE/tools/ui/CenRa_about_form.ui similarity index 98% rename from CenRa_COPIE/forms/copie_about_form.ui rename to CenRa_COPIE/tools/ui/CenRa_about_form.ui index e4f9e4e1..3e3608ff 100644 --- a/CenRa_COPIE/forms/copie_about_form.ui +++ b/CenRa_COPIE/tools/ui/CenRa_about_form.ui @@ -11,7 +11,7 @@ - COPIE + Metabase diff --git a/CenRa_POSTGIS/README.md b/CenRa_POSTGIS/README.md index 532268dd..edce45e0 100644 --- a/CenRa_POSTGIS/README.md +++ b/CenRa_POSTGIS/README.md @@ -1,4 +1,4 @@ -#Plugin_POSTGIS +# Plugin_POSTGIS --- ## Objectif ! Vise faciliter la création de schéma et table dans PostgreSQL, diff --git a/README.md b/README.md index 3175fdcc..d5663c65 100644 --- a/README.md +++ b/README.md @@ -1 +1,4 @@ -Plugin QGIS \ No newline at end of file +# Plugin QGIS +--- +Point de départ de tout les plugin du CEN Rhône Alpes, +Pour la création et le partage <3 \ No newline at end of file diff --git a/plugins.xml b/plugins.xml index 964fb534..66884941 100644 --- a/plugins.xml +++ b/plugins.xml @@ -1,8 +1,8 @@ - + - 1.8 + 2.0 3.16 https://plateformesig.cenra-outils.org/ CenRa_POSTGIS.zip @@ -11,7 +11,7 @@ https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_POSTGIS.zip CEN-Rhone-Alpes 2024-02-06 - 2024-09-13 + 2024-10-22 False False cenra,postgis @@ -97,7 +97,7 @@ CEN-Rhone-Alpes 2024-09-25 2024-10-21 - False + True False cenra,mise en page,atlas @@ -117,5 +117,22 @@ True False cenra,mise en page,atlas + + + + + 1.0 + 3.16 + https://plateformesig.cenra-outils.org/ + CenRa_COMPANIONCUBE.zip + CEN-Rhone-Alpes.png + CEN-Rhone-Alpes + https://gitea.cenra-outils.org/CEN-RA/Plugin_QGIS/releases/download/latest/CenRa_COMPANIONCUBE.zip + CEN-Rhone-Alpes + 2024-10-21 + 2024-10-22 + True + False + cenra,ia \ No newline at end of file