diff --git a/CenRa_AutoMap.py b/CenRa_AutoMap.py new file mode 100644 index 00000000..a1335fdd --- /dev/null +++ b/CenRa_AutoMap.py @@ -0,0 +1,142 @@ +__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 +''' +from pg_metadata.connection_manager import ( + store_connections, + validate_connections_names, +) + + +from pg_metadata.locator import LocatorFilter +from pg_metadata.processing.provider import PgMetadataProvider +from pg_metadata.qgis_plugin_tools.tools.custom_logging import setup_logger +''' +import os +from .tools.resources import ( + plugin_path, + resources_path, + maj_verif, +) +from .editor import AutoMap_Editor +from .about_form import AutoMapAboutDialog + +from PyQt5.QtCore import * + +class PgAutoMap: + def __init__(self): + """ Constructor. """ + self.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_AUTOMAP','version') + s = QSettings() + versionUse = s.value("automap/version", 1, type=str) + if str(versionUse) != str(version) : + s.setValue("automap/version", str(version)) + print(versionUse,version) + self.open_about_dialog() + + def initGui(self): + """ Build the plugin GUI. """ + + self.toolBar = iface.addToolBar("CenRa_AutoMap") + self.toolBar.setObjectName("CenRa_AutoMap") + + icon = QIcon(resources_path('icons', 'icon.png')) + + # Open the online help + self.help_action = QAction(icon, 'CenRa_AutoMap', iface.mainWindow()) + iface.pluginHelpMenu().addAction(self.help_action) + self.help_action.triggered.connect(self.open_help) + if not self.editor: + self.editor = AutoMap_Editor() + + + self.automap_action = QAction(icon, 'CenRa_AutoMap',None) + self.toolBar.addAction(self.automap_action) + self.automap_action.triggered.connect(self.open_editor) + ''' + if not self.locator_filter: + self.locator_filter = LocatorFilter(iface) + iface.registerLocatorFilter(self.locator_filter) + + @staticmethod + def check_invalid_connection_names(): + """ Check for invalid connection names in the QgsSettings. """ + valid, invalid = validate_connections_names() + n_invalid = len(invalid) + + if n_invalid == 0: + return + + invalid_text = ', '.join(invalid) + msg = QMessageBox() + msg.setIcon(QMessageBox.Warning) + msg.setWindowTitle(tr('PgMetadata: Database connection(s) not available')) + msg.setText(tr( + f'{n_invalid} connection(s) listed in PgMetadata’s settings are invalid or ' + f'no longer available: {invalid_text}')) + msg.setInformativeText(tr( + 'Do you want to remove these connection(s) from the PgMetadata settings? ' + '(You can also do this later with the “Set Connections” tool.)')) + msg.setStandardButtons(QMessageBox.Yes | QMessageBox.No) + clicked = msg.exec() + + if clicked == QMessageBox.Yes: + iface.messageBar().pushSuccess('PgMetadata', tr(f'{n_invalid} invalid connection(s) removed.')) + store_connections(valid) + if clicked == QMessageBox.No: + iface.messageBar().pushInfo('PgMetadata', tr(f'Keeping {n_invalid} invalid connections.')) + ''' + def open_about_dialog(self): + """ + About dialog + """ + dialog = AutoMapAboutDialog(iface) + dialog.exec_() + def open_help(): + """ Open the online help. """ + QDesktopServices.openUrl(QUrl('https://plateformesig.cenra-outils.org/')) + + def open_editor(self): + self.editor.show() + self.editor.raise_() + + def unload(self): + """ Unload the plugin. """ + if self.editor: + iface.removePluginMenu('CenRa_AutoMap',self.automap_action) + + 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/about_form.py b/about_form.py new file mode 100644 index 00000000..3d9836b2 --- /dev/null +++ b/about_form.py @@ -0,0 +1,46 @@ +import os.path + +from pathlib import Path + +from qgis.PyQt import uic +from qgis.PyQt.QtGui import QPixmap +from qgis.PyQt.QtWidgets import QDialog + +from .tools.resources import devlog + +ABOUT_FORM_CLASS, _ = uic.loadUiType( + os.path.join( + str(Path(__file__).resolve().parent), + 'tools/ui', + 'CenRa_AutoMap_about_form.ui' + ) +) + + +class AutoMapAboutDialog(QDialog, ABOUT_FORM_CLASS): + + """ About - Let the user display the about dialog. """ + + def __init__(self, iface, parent=None): + super().__init__(parent) + self.iface = iface + self.setupUi(self) + + self.viewer.setHtml(devlog('CenRa_AUTOMAP')) + + self.rejected.connect(self.onReject) + self.buttonBox.rejected.connect(self.onReject) + self.buttonBox.accepted.connect(self.onAccept) + + def onAccept(self): + """ + Save options when pressing OK button + """ + self.accept() + + def onReject(self): + """ + Run some actions when + the user closes the dialog + """ + self.close() \ No newline at end of file diff --git a/editor.py b/editor.py new file mode 100644 index 00000000..eda6098d --- /dev/null +++ b/editor.py @@ -0,0 +1,559 @@ +import logging +import os + +from collections import namedtuple +from enum import Enum +from functools import partial +from pathlib import Path +from xml.dom.minidom import parseString +from qgis.gui import * +from qgis.core import ( + NULL, + QgsApplication, + QgsDataSourceUri, + QgsProject, + QgsProviderConnectionException, + QgsProviderRegistry, + QgsRasterLayer, + QgsSettings, + QgsVectorLayer, + QgsGeometry, + QgsPrintLayout, + QgsReadWriteContext, + QgsLayoutItemMap, + QgsLayoutItemPage, + QgsLayoutSize, + QgsUnitTypes, + QgsLayoutPoint, + QgsLayoutItemLabel, + QgsLayoutItemPicture, + QgsLayoutItemLegend, + QgsLegendStyle, + QgsLayoutItemScaleBar, + QgsLayerTreeGroup, + QgsCoordinateReferenceSystem, + QgsCoordinateTransform, + QgsLayerTree, +) + +from qgis.PyQt.QtCore import QLocale, QUrl, QDateTime, Qt +from qgis.PyQt.QtGui import QDesktopServices, QIcon, QColor, QFont, QMovie +from qgis.PyQt.QtPrintSupport import QPrinter +from qgis.PyQt.QtWebKitWidgets import QWebPage +from qgis.PyQt.QtWidgets import ( + QDialog, + QAction, + QDockWidget, + QFileDialog, + QInputDialog, + QMenu, + QToolButton, + QTableWidget, + QTableWidgetItem, +) +from qgis.PyQt.QtXml import QDomDocument +from qgis.utils import iface +import glob +from .tools.resources import ( + load_ui, + resources_path, + login_base, + send_issues, +) +from .issues import CenRa_Issues +from datetime import date + +EDITOR_CLASS = load_ui('CenRa_AutoMap_base.ui') +LOGGER = logging.getLogger('CenRa_AutoMap') + +class AutoMap_Editor(QDialog, EDITOR_CLASS): + + def __init__(self, parent=None): + _ = parent + super().__init__() + self.setupUi(self) + self.settings = QgsSettings() + + path = '' + ix = 0 + plugin_dir = str(os.path.dirname(os.path.abspath(__file__))).split(os.sep) + for i in plugin_dir[1:]: + ix = ix+1 + path = path+'/'+i + self.tabWidget.setStyleSheet('background-image: url('+path+'/tools/bg/Capture.png);') + + self.commandLinkButton.clicked.connect(self.chargement_qpt) + + ## On ajoute le nom des templates à la liste déroulante de l'onglet "mises en page" : + mises_en_page = [] + + for filename in glob.glob(resources_path("mises_en_pages","*.qpt")): + mises_en_page.append(filename) + + + for i, filename in enumerate(mises_en_page): + nom_fichier = os.path.basename(filename) + self.comboBox.addItem(nom_fichier) + self.comboBox.setCurrentIndex(1) + + self.template_parameters = { + 'map_size': None, + 'map_position' : None, + 'title_position': None, + 'title_size': None, + 'subtitle_position': None, + 'subtitle_size': None, + 'logo_position': None, + 'logo_size': None, + 'legend_position': None, + 'legend_size': None, + 'scalebarnumeric_position':None, + 'scalebarnumeric_size':None, + 'scalebar_position': None, + 'scalebar_size': None, + 'north_position': None, + 'north_size': None, + 'credit_text_position': None, + 'credit_text_size': None, + 'credit_text2_position': None, + 'credit_text2_size': None, + # Add more variables as needed + } + def raise_(self): + self.mComboBox_2.clear() + + couches = [] + for lyr in QgsProject.instance().mapLayers().values(): + couches.append(lyr.name()) + + self.mComboBox_2.addItems(sorted(couches)) + + def chargement_qpt(self): + + + project = QgsProject.instance() + self.manager = project.layoutManager() + layout_name = self.lineEdit_2.text() + layouts_list = self.manager.printLayouts() + + for filename in glob.glob(resources_path("mises_en_pages","*.qpt")): + with open(os.path.join(os.getcwd(), filename), 'r') as f: + self.layout = QgsPrintLayout(project) + self.layout.initializeDefaults() + template_content = f.read() + doc = QDomDocument() + doc.setContent(template_content) + self.layout.loadFromTemplate(doc, QgsReadWriteContext(), True) + self.layout.setName(self.lineEdit_2.text()) + + if os.path.basename(filename) == "1. Modèle carto standard (consolidé).qpt": + + self.actualisation_mise_en_page() + + ## Add map to layout + self.map_modele_test = QgsLayoutItemMap(self.layout) + # Charger une carte vide + self.map_modele_test.setRect(20, 20, 20, 20) + # Mettre le canvas courant comme emprise + self.map_modele_test.setExtent(iface.mapCanvas().extent()) + # Position de la carte dans le composeur + + self.map_modele_test.attemptMove(self.template_parameters['map_position']) + # on dimensionne le rendu de la carte (pour référence la page totale est une page A4 donc 297*210) + self.map_modele_test.attemptResize(self.template_parameters['map_size']) + self.map_modele_test.refresh() + self.map_modele_test.setKeepLayerSet(True) + self.map_modele_test.setKeepLayerStyles(True) + + self.map_modele_test.setBackgroundColor(QColor(255, 255, 255, 255)) + self.map_modele_test.setFrameEnabled(True) + self.layout.addLayoutItem(self.map_modele_test) + self.map_modele_test.setId("carte_principale") + + ## Ajout d'un titre à la mise en page + title = QgsLayoutItemLabel(self.layout) + self.layout.addLayoutItem(title) + titre = self.lineEdit_2.text() + title.setText(titre) + title.setFont(QFont("Calibri", 15, QFont.Bold)) + title.attemptMove(self.template_parameters['title_position']) + title.attemptResize(self.template_parameters['title_size']) + self.layout.addItem(title) + # title.adjustSizeToText() on n'utilise plutot setFixedSize pour pouvoir centrer le titre de manière plus optimale ici + title.setHAlign(Qt.AlignHCenter) + title.setVAlign(Qt.AlignVCenter) + + + ## Ajout d'un sous titre à la mise en page + subtitle = QgsLayoutItemLabel(self.layout) + self.layout.addLayoutItem(subtitle) + titre = self.lineEdit_3.text() + subtitle.setText(titre) + subtitle.setFont(QFont("MS Shell Dlg 2", 10)) + subtitle.attemptMove(self.template_parameters['subtitle_position']) + subtitle.attemptResize(self.template_parameters['subtitle_size']) + self.layout.addItem(subtitle) + subtitle.setHAlign(Qt.AlignHCenter) + subtitle.setVAlign(Qt.AlignVCenter) + + + ## Ajout du logo CEN NA en haut à gauche de la page + logo = QgsLayoutItemPicture(self.layout) + logo.setResizeMode(QgsLayoutItemPicture.Zoom) + logo.setMode(QgsLayoutItemPicture.FormatRaster) + logo.attemptMove(self.template_parameters['logo_position']) + logo.setFixedSize(self.template_parameters['logo_size']) + logo.setPicturePath(resources_path("icons","CEN_RA.png")) + self.layout.addLayoutItem(logo) + + + ## Ajout de la legende : + legend = QgsLayoutItemLegend(self.layout) + + legend.setId('legende_model1') + # legend.setTitle('Legende') + legend.adjustBoxSize() + legend.setFrameEnabled(False) + legend.setAutoUpdateModel(False) + + legend.setLinkedMap(self.map_modele_test) + self.layout.addItem(legend) + + # group_name = 'Périmètres écologiques' # Name of a group in your legend + + checked_items = self.mComboBox_2.checkedItems() + + layers_to_remove = [] + + for lyr in project.mapLayers().values(): + if lyr.name() not in checked_items: + layers_to_remove.append(lyr.name()) + + # the layer tree + root = project.layerTreeRoot() + + # get legend + legend = [i for i in self.layout.items() if isinstance(i, QgsLayoutItemLegend)][0] + + # disable auto-update + legend.setAutoUpdateModel(False) + legend.setLegendFilterByMapEnabled(True) + # legend model + model = legend.model() + + # the root legend group + root_group = model.rootGroup() + + # loop through layer names + for layer_name in layers_to_remove: + # find layer in project + layer = project.mapLayersByName(layer_name)[0] + # get layer tree layer instance of layer + layertreelayer = root.findLayer(layer.id()) + + # get the parent of the layer tree layer (layer tree root, or group) + parent = layertreelayer.parent() + + # if the parent is a group and has a name, find it and remove the layer + if isinstance(parent, QgsLayerTreeGroup) and parent.name(): + group = root_group.findGroup(parent.name()) + group.removeLayer(layer) + # remove layers that are not in a group + else: + root_group.removeLayer(layer) + + + legend.setEqualColumnWidth(True) + legend.setSplitLayer(True) + legend.setColumnSpace(5) + legend.rstyle(QgsLegendStyle.Title).setMargin(1.5) # 1 mm + legend.rstyle(QgsLegendStyle.Group).setMargin(QgsLegendStyle.Top, 3) + legend.rstyle(QgsLegendStyle.Subgroup).setMargin(QgsLegendStyle.Top, 3) + + legend.adjustBoxSize() + self.layout.refresh() + + legend.updateLegend() + legend.attemptMove(self.template_parameters['legend_position']) + + + ## Ajout de l'échelle numeric à la mise en page + self.scalebarnumeric_qpt = QgsLayoutItemScaleBar(self.layout) + self.scalebarnumeric_qpt.setStyle('Numeric') + self.scalebarnumeric_qpt.setLinkedMap(self.map_modele_test) + self.scalebarnumeric_qpt.applyDefaultSize() +# self.scalebarnumeric_qpt.applyDefaultSettings() + + self.scalebarnumeric_qpt.setNumberOfSegments(2) + self.scalebarnumeric_qpt.setNumberOfSegmentsLeft(0) + + self.scalebarnumeric_qpt.attemptMove(self.template_parameters['scalebarnumeric_position']) + self.scalebarnumeric_qpt.attemptResize(self.template_parameters['scalebarnumeric_size']) + + self.layout.addLayoutItem(self.scalebarnumeric_qpt) + + ## Ajout de l'échelle à la mise en page + self.scalebar_qpt = QgsLayoutItemScaleBar(self.layout) + self.scalebar_qpt.setStyle('Single Box') + self.scalebar_qpt.setLinkedMap(self.map_modele_test) + self.scalebar_qpt.applyDefaultSize() + self.scalebar_qpt.applyDefaultSettings() + + self.scalebar_qpt.setNumberOfSegments(2) + self.scalebar_qpt.setNumberOfSegmentsLeft(0) + + self.scalebar_qpt.attemptMove(self.template_parameters['scalebar_position']) + self.scalebar_qpt.attemptResize(self.template_parameters['scalebar_size']) + + + self.layout.addLayoutItem(self.scalebar_qpt) + # self.scalebar_qpt.setFixedSize(QgsLayoutSize(55, 15)) + + # ajout de la fleche du Nord + north = QgsLayoutItemPicture(self.layout) + north.setPicturePath(resources_path("mises_en_pages","NorthArrow_02.svg")) + self.layout.addLayoutItem(north) + north.attemptMove(self.template_parameters['north_position']) + north.attemptResize(self.template_parameters['north_size']) + + # ajout note info: + info = ["Réalisation : " + "CEN Rhône-Alpes (" + date.today().strftime( + "%d/%m/%Y") + ")"] + info2 = ["Source : " + self.lineEdit_4.text()] + credit_text = QgsLayoutItemLabel(self.layout) + credit_text.setText(info[0]) + credit_text.setFont(QFont("Calibri", 9)) + credit_text.setHAlign(Qt.AlignRight) + credit_text.setVAlign(Qt.AlignVCenter) + credit_text.setItemRotation(-90) + credit_text2 = QgsLayoutItemLabel(self.layout) + credit_text2.setText(info2[0]) + credit_text2.setFont(QFont("Calibri", 9)) + credit_text2.setHAlign(Qt.AlignRight) + credit_text2.setVAlign(Qt.AlignVCenter) + credit_text.attemptMove(self.template_parameters['credit_text_position']) + credit_text.attemptResize(self.template_parameters['credit_text_size']) + credit_text2.attemptMove(self.template_parameters['credit_text2_position']) + credit_text2.attemptResize(self.template_parameters['credit_text2_size']) + self.layout.addLayoutItem(credit_text) + self.layout.addLayoutItem(credit_text2) + + # credit_text.attemptResize(QgsLayoutSize(95, 5, QgsUnitTypes.LayoutMillimeters)) + + self.bar_echelle_auto(iface.mapCanvas(), self.scalebar_qpt) + + existing_layout = project.layoutManager().layoutByName(self.layout.name()) + if existing_layout: + project.layoutManager().removeLayout(existing_layout) + + result = project.layoutManager().addLayout(self.layout) + + + + self.manager.addLayout(self.layout) + fichier_mise_en_page = self.lineEdit_2.text() + layout_modifie = QgsProject.instance().layoutManager().layoutByName(fichier_mise_en_page) + iface.openLayoutDesigner(layout_modifie) + + def actualisation_mise_en_page(self): + + + if self.radioButton_6.isChecked() and self.radioButton_7.isChecked(): + + pc = self.layout.pageCollection() + pc.pages()[0].setPageSize('A4', QgsLayoutItemPage.Portrait) + + self.template_parameters['map_size'] = QgsLayoutSize(199, 175, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['map_position'] = QgsLayoutPoint(5, 25, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['title_size'] = QgsLayoutSize(200, 8, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['title_position'] = QgsLayoutPoint(5, 2, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['subtitle_size'] = QgsLayoutSize(200, 8, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['subtitle_position'] = QgsLayoutPoint(5, 12, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['logo_size'] = QgsLayoutSize(46, 16, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['logo_position'] = QgsLayoutPoint(5, 4, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['legend_size'] = QgsLayoutSize(405, 203, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['legend_position'] = QgsLayoutPoint(5, 205, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['scalebarnumeric_size'] = QgsLayoutSize(55, 15, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['scalebarnumeric_position'] = QgsLayoutPoint(140, 228, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['scalebar_size'] = QgsLayoutSize(55, 15, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['scalebar_position'] = QgsLayoutPoint(145, 215, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['north_size'] = QgsLayoutSize(12, 12, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['north_position'] = QgsLayoutPoint(193, 214, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['credit_text_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['credit_text_position'] = QgsLayoutPoint(205, 125, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['credit_text2_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['credit_text2_position'] = QgsLayoutPoint(104, 201, QgsUnitTypes.LayoutMillimeters) + + + + if self.radioButton_6.isChecked() and self.radioButton_8.isChecked(): + + pc = self.layout.pageCollection() + pc.pages()[0].setPageSize('A4', QgsLayoutItemPage.Landscape) + + self.template_parameters['map_size'] = QgsLayoutSize(285, 145, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['map_position'] = QgsLayoutPoint(6, 23, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['title_size'] = QgsLayoutSize(286, 8, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['title_position'] = QgsLayoutPoint(5, 2, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['subtitle_size'] = QgsLayoutSize(286, 8, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['subtitle_position'] = QgsLayoutPoint(5, 10, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['logo_size'] = QgsLayoutSize(46, 16, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['logo_position'] = QgsLayoutPoint(5, 4, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['legend_size'] = QgsLayoutSize(405, 203, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['legend_position'] = QgsLayoutPoint(5, 168, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['scalebarnumeric_size'] = QgsLayoutSize(55, 15, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['scalebarnumeric_position'] = QgsLayoutPoint(207, 193, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['scalebar_size'] = QgsLayoutSize(55, 15, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['scalebar_position'] = QgsLayoutPoint(207, 180, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['north_size'] = QgsLayoutSize(8.4, 12.5, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['north_position'] = QgsLayoutPoint(273, 182, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['credit_text_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['credit_text_position'] = QgsLayoutPoint(291.5, 123, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['credit_text2_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['credit_text2_position'] = QgsLayoutPoint(189, 168.5, QgsUnitTypes.LayoutMillimeters) + + + + if self.radioButton_5.isChecked() and self.radioButton_7.isChecked(): + + pc = self.layout.pageCollection() + pc.pages()[0].setPageSize('A3', QgsLayoutItemPage.Portrait) + + + self.template_parameters['map_size'] = QgsLayoutSize(285, 260, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['map_position'] = QgsLayoutPoint(6, 23, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['title_size'] = QgsLayoutSize(286, 8, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['title_position'] = QgsLayoutPoint(5, 2, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['subtitle_size'] = QgsLayoutSize(286, 8, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['subtitle_position'] = QgsLayoutPoint(5, 10, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['logo_size'] = QgsLayoutSize(46, 16, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['logo_position'] = QgsLayoutPoint(5, 4, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['legend_size'] = QgsLayoutSize(405, 203, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['legend_position'] = QgsLayoutPoint(5, 284, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['scalebarnumeric_size'] = QgsLayoutSize(50, 15, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['scalebarnumeric_position'] = QgsLayoutPoint(207, 310, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['scalebar_size'] = QgsLayoutSize(50, 15, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['scalebar_position'] = QgsLayoutPoint(207, 298, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['north_size'] = QgsLayoutSize(8.4, 12.5, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['north_position'] = QgsLayoutPoint(273, 297, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['credit_text_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['credit_text_position'] = QgsLayoutPoint(291.5, 123, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['credit_text2_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['credit_text2_position'] = QgsLayoutPoint(189, 284, QgsUnitTypes.LayoutMillimeters) + + + + if self.radioButton_5.isChecked() and self.radioButton_8.isChecked(): + + pc = self.layout.pageCollection() + pc.pages()[0].setPageSize('A3', QgsLayoutItemPage.Landscape) + + self.template_parameters['map_size'] = QgsLayoutSize(408.5, 222, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['map_position'] = QgsLayoutPoint(5, 23.5, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['title_size'] = QgsLayoutSize(409, 8, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['title_position'] = QgsLayoutPoint(5, 2, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['subtitle_size'] = QgsLayoutSize(409, 8, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['subtitle_position'] = QgsLayoutPoint(5, 10, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['logo_size'] = QgsLayoutSize(46, 16, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['logo_position'] = QgsLayoutPoint(5, 4, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['legend_size'] = QgsLayoutSize(405, 203, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['legend_position'] = QgsLayoutPoint(5, 249, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['scalebarnumeric_size'] = QgsLayoutSize(55, 15, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['scalebarnumeric_position'] = QgsLayoutPoint(323, 282, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['scalebar_size'] = QgsLayoutSize(55, 15, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['scalebar_position'] = QgsLayoutPoint(323, 270, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['north_size'] = QgsLayoutSize(8.4, 12.5, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['north_position'] = QgsLayoutPoint(402, 270, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['credit_text_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['credit_text_position'] = QgsLayoutPoint(415, 123, QgsUnitTypes.LayoutMillimeters) + + self.template_parameters['credit_text2_size'] = QgsLayoutSize(100, 3.9, QgsUnitTypes.LayoutMillimeters) + self.template_parameters['credit_text2_position'] = QgsLayoutPoint(313, 247, QgsUnitTypes.LayoutMillimeters) + + def bar_echelle_auto(self, echelle, bar_echelle): + + if echelle.scale() >= 45000: + bar_echelle.setUnits(QgsUnitTypes.DistanceKilometers) + bar_echelle.setUnitLabel("km") + bar_echelle.setUnitsPerSegment(1.5) + # self.scalebar_test.setUnits(QgsUnitTypes.DistanceKilometers) + # self.scalebar_test.setUnitLabel("km") + # self.scalebar_test.setUnitsPerSegment(1.5) + + elif echelle.scale() >= 30000: + bar_echelle.setUnits(QgsUnitTypes.DistanceKilometers) + bar_echelle.setUnitLabel("km") + bar_echelle.setUnitsPerSegment(1) + # self.scalebar_test.setUnits(QgsUnitTypes.DistanceKilometers) + # self.scalebar_test.setUnitLabel("km") + # self.scalebar_test.setUnitsPerSegment(1) + + elif echelle.scale() >= 20000: + bar_echelle.setUnits(QgsUnitTypes.DistanceKilometers) + bar_echelle.setUnitLabel("km") + bar_echelle.setUnitsPerSegment(0.5) + # self.scalebar_test.setUnits(QgsUnitTypes.DistanceKilometers) + # self.scalebar_test.setUnitLabel("km") + # self.scalebar_test.setUnitsPerSegment(0.5) + + elif echelle.scale() >= 9000: + bar_echelle.setUnits(QgsUnitTypes.DistanceMeters) + bar_echelle.setUnitLabel("m") + bar_echelle.setUnitsPerSegment(250) + # self.scalebar_test.setUnits(QgsUnitTypes.DistanceMeters) + # self.scalebar_test.setUnitLabel("m") + # self.scalebar_test.setUnitsPerSegment(250) + + elif echelle.scale() >= 5000: + bar_echelle.setUnits(QgsUnitTypes.DistanceMeters) + bar_echelle.setUnitLabel("m") + bar_echelle.setUnitsPerSegment(100) + # self.scalebar_test.setUnits(QgsUnitTypes.DistanceMeters) + # self.scalebar_test.setUnitLabel("m") + # self.scalebar_test.setUnitsPerSegment(100) + + else: + bar_echelle.setUnits(QgsUnitTypes.DistanceMeters) + bar_echelle.setUnitLabel("m") + bar_echelle.setUnitsPerSegment(50) + # self.scalebar_test.setUnits(QgsUnitTypes.DistanceMeters) + # self.scalebar_test.setUnitLabel("m") + # self.scalebar_test.setUnitsPerSegment(50) + + + bar_echelle.update() diff --git a/icon.png b/icon.png new file mode 100644 index 00000000..d53a910f Binary files /dev/null and b/icon.png differ diff --git a/issues.py b/issues.py new file mode 100644 index 00000000..92a4176c --- /dev/null +++ b/issues.py @@ -0,0 +1,89 @@ +import os +plugin_dir = os.path.dirname(__file__) +end_find = plugin_dir.rfind('\\')+1 + +NAME = plugin_dir[end_find:] +#print(NAME) + +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)