From 6c2579a1e1f16cd0d4cbe4283af108b9e82876e2 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 17 Nov 2023 13:36:11 +0100 Subject: [PATCH 01/30] move Checkbox Delegate to utils --- .../import_data_configuration_page.py | 28 ++-------------- QgisModelBaker/utils/gui_utils.py | 32 ++++++++++++++++++- 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py b/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py index 9a4b2f7a1..00be44c6a 100644 --- a/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py +++ b/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py @@ -21,7 +21,7 @@ from PyQt5.QtWidgets import QApplication from qgis.core import QgsApplication -from qgis.PyQt.QtCore import QEvent, Qt +from qgis.PyQt.QtCore import Qt from qgis.PyQt.QtGui import QIcon from qgis.PyQt.QtWidgets import ( QComboBox, @@ -29,7 +29,6 @@ QHeaderView, QStyle, QStyledItemDelegate, - QStyleOptionButton, QStyleOptionComboBox, QWizardPage, ) @@ -42,7 +41,7 @@ MetaConfigCompleterDelegate, ) from QgisModelBaker.utils.globals import CATALOGUE_DATASETNAME, DEFAULT_DATASETNAME -from QgisModelBaker.utils.gui_utils import LogColor +from QgisModelBaker.utils.gui_utils import CheckDelegate, LogColor PAGE_UI = gui_utils.get_ui_class("workflow_wizard/import_data_configuration.ui") @@ -90,27 +89,6 @@ def paint(self, painter, option, index): QApplication.style().drawControl(QStyle.CE_ComboBoxLabel, opt, painter) -class CatalogueCheckDelegate(QStyledItemDelegate): - def __init__(self, parent): - super().__init__(parent) - - def editorEvent(self, event, model, option, index): - if event.type() == QEvent.MouseButtonRelease: - value = index.data(int(gui_utils.SourceModel.Roles.IS_CATALOGUE)) or False - model.setData( - index, not value, int(gui_utils.SourceModel.Roles.IS_CATALOGUE) - ) - return True - return super().editorEvent(event, model, option, index) - - def paint(self, painter, option, index): - opt = QStyleOptionButton() - opt.rect = option.rect - value = index.data(int(gui_utils.SourceModel.Roles.IS_CATALOGUE)) or False - opt.state |= QStyle.State_On if value else QStyle.State_Off - QApplication.style().drawControl(QStyle.CE_CheckBox, opt, painter) - - class ImportDataConfigurationPage(QWizardPage, PAGE_UI): def __init__(self, parent, title): QWizardPage.__init__(self, parent) @@ -269,7 +247,7 @@ def _set_basket_defaults(self): self.file_table_view.setItemDelegateForColumn( gui_utils.SourceModel.Columns.IS_CATALOGUE, - CatalogueCheckDelegate(self), + CheckDelegate(self, gui_utils.SourceModel.Roles.IS_CATALOGUE), ) self.file_table_view.setItemDelegateForColumn( gui_utils.SourceModel.Columns.DATASET, diff --git a/QgisModelBaker/utils/gui_utils.py b/QgisModelBaker/utils/gui_utils.py index 6ac5b1d04..70b57476a 100644 --- a/QgisModelBaker/utils/gui_utils.py +++ b/QgisModelBaker/utils/gui_utils.py @@ -6,7 +6,9 @@ import xml.etree.ElementTree as CET from enum import Enum, IntEnum +from PyQt5.QtWidgets import QApplication from qgis.PyQt.QtCore import ( + QEvent, QModelIndex, QSortFilterProxyModel, QStringListModel, @@ -14,7 +16,14 @@ pyqtSignal, ) from qgis.PyQt.QtGui import QIcon, QStandardItem, QStandardItemModel -from qgis.PyQt.QtWidgets import QCheckBox, QLineEdit, QListView +from qgis.PyQt.QtWidgets import ( + QCheckBox, + QLineEdit, + QListView, + QStyle, + QStyledItemDelegate, + QStyleOptionButton, +) from qgis.PyQt.uic import loadUiType from QgisModelBaker.libs.modelbaker.iliwrapper.ilicache import IliCache @@ -174,6 +183,7 @@ class PageIds: ExportDataConfiguration = 10 ExportDataExecution = 11 ProjectCreation = 12 + TIDConfiguration = 13 class ToppingWizardPageIds: @@ -1107,3 +1117,23 @@ def model_topics(self, schema_identificator): for basket in self.schema_baskets[schema_identificator]: model_topics.add(basket.get("topic", "")) return list(model_topics) + + +class CheckDelegate(QStyledItemDelegate): + def __init__(self, parent, role): + super().__init__(parent) + self.role = role + + def editorEvent(self, event, model, option, index): + if event.type() == QEvent.MouseButtonRelease: + value = index.data(int(self.role)) or False + model.setData(index, not value, int(self.role)) + return True + return super().editorEvent(event, model, option, index) + + def paint(self, painter, option, index): + opt = QStyleOptionButton() + opt.rect = option.rect + value = index.data(int(self.role)) or False + opt.state |= QStyle.State_On if value else QStyle.State_Off + QApplication.style().drawControl(QStyle.CE_CheckBox, opt, painter) From eadee7defba8ad42f34c2db56bbc1d3e8def5041 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 17 Nov 2023 13:50:31 +0100 Subject: [PATCH 02/30] Put checkbox in the middle --- QgisModelBaker/utils/gui_utils.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/QgisModelBaker/utils/gui_utils.py b/QgisModelBaker/utils/gui_utils.py index 70b57476a..a0f3399a4 100644 --- a/QgisModelBaker/utils/gui_utils.py +++ b/QgisModelBaker/utils/gui_utils.py @@ -10,6 +10,7 @@ from qgis.PyQt.QtCore import ( QEvent, QModelIndex, + QRect, QSortFilterProxyModel, QStringListModel, Qt, @@ -1134,6 +1135,19 @@ def editorEvent(self, event, model, option, index): def paint(self, painter, option, index): opt = QStyleOptionButton() opt.rect = option.rect + center_x = opt.rect.x() + opt.rect.width() / 2 + center_y = opt.rect.y() + opt.rect.height() / 2 + + checkbox_width = QApplication.style().pixelMetric(QStyle.PM_IndicatorWidth) + checkbox_height = QApplication.style().pixelMetric(QStyle.PM_IndicatorHeight) + checkbox_rect = QRect( + int(center_x - checkbox_width / 2), + int(center_y - checkbox_height / 2), + checkbox_width, + checkbox_height, + ) + opt.rect = checkbox_rect + value = index.data(int(self.role)) or False opt.state |= QStyle.State_On if value else QStyle.State_Off QApplication.style().drawControl(QStyle.CE_CheckBox, opt, painter) From 383fdc4910caae21ac0e0883ab8dbeac54023b6e Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 17 Nov 2023 14:18:26 +0100 Subject: [PATCH 03/30] Weird order of the setData parameters - marked with a comment. One could fix this in future, since it's a little fault prone --- QgisModelBaker/gui/topping_wizard/ili2dbsettings_page.py | 1 + QgisModelBaker/gui/topping_wizard/layers_page.py | 1 + QgisModelBaker/utils/gui_utils.py | 7 +++++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/QgisModelBaker/gui/topping_wizard/ili2dbsettings_page.py b/QgisModelBaker/gui/topping_wizard/ili2dbsettings_page.py index 2e2656e82..b4c485aa5 100644 --- a/QgisModelBaker/gui/topping_wizard/ili2dbsettings_page.py +++ b/QgisModelBaker/gui/topping_wizard/ili2dbsettings_page.py @@ -86,6 +86,7 @@ def data(self, index, role): return self.parameters.get(key, "") return None + # this is unusual that it's not first data and then role (could be changed) def setData(self, index, role, data): if role == int(Qt.EditRole): if index.column() == ParametersModel.Columns.NAME: diff --git a/QgisModelBaker/gui/topping_wizard/layers_page.py b/QgisModelBaker/gui/topping_wizard/layers_page.py index ee075182a..4b57f51a5 100644 --- a/QgisModelBaker/gui/topping_wizard/layers_page.py +++ b/QgisModelBaker/gui/topping_wizard/layers_page.py @@ -207,6 +207,7 @@ def data(self, index, role): return QgsLayerTreeModel.data(self, index, role) + # this is unusual that it's not first data and then role (could be changed) def setData(self, index, role, data): if role == Qt.CheckStateRole: node = self.index2node(index) diff --git a/QgisModelBaker/utils/gui_utils.py b/QgisModelBaker/utils/gui_utils.py index a0f3399a4..ad818edcc 100644 --- a/QgisModelBaker/utils/gui_utils.py +++ b/QgisModelBaker/utils/gui_utils.py @@ -693,6 +693,7 @@ def data(self, index, role): ] return SourceModel.data(self, index, role) + # this is unusual that it's not first data and then role (could be changed) def setData(self, index, role, data): if role == Qt.CheckStateRole: self.beginResetModel() @@ -838,11 +839,12 @@ def data(self, index, role): else: return QStringListModel.data(self, index, role) + # this is unusual that it's not first data and then role (could be changed) def setData(self, index, role, data): if role == Qt.CheckStateRole: self._checked_entries[self.data(index, Qt.DisplayRole)] = data else: - QStringListModel.setData(self, index, role, data) + QStringListModel.setData(self, index, data, role) def check(self, index): if self.data(index, Qt.CheckStateRole) == Qt.Checked: @@ -909,6 +911,7 @@ def data(self, index, role): else: return CheckEntriesModel.data(self, index, role) + # this is unusual that it's not first data and then role (could be changed) def setData(self, index, role, data): if role == int(SchemaModelsModel.Roles.PARENT_MODELS): self._parent_models[self.data(index, Qt.DisplayRole)] = data @@ -1126,7 +1129,7 @@ def __init__(self, parent, role): self.role = role def editorEvent(self, event, model, option, index): - if event.type() == QEvent.MouseButtonRelease: + if event.type() == QEvent.MouseButtonPress: value = index.data(int(self.role)) or False model.setData(index, not value, int(self.role)) return True From 8e2847fad89276bbf024c9af31fb852ad2235710 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 17 Nov 2023 14:19:59 +0100 Subject: [PATCH 04/30] Integration of TID configuration page WIP --- .../gui/panel/set_sequence_panel.py | 37 ++++ QgisModelBaker/gui/panel/tid_config_panel.py | 167 ++++++++++++++++++ .../workflow_wizard/project_creation_page.py | 12 +- .../workflow_wizard/tid_configuration_page.py | 58 ++++++ .../gui/workflow_wizard/workflow_wizard.py | 12 ++ QgisModelBaker/ui/set_sequence_panel.ui | 31 ++++ QgisModelBaker/ui/tid_config_panel.ui | 28 +++ .../ui/workflow_wizard/tid_configuration.ui | 92 ++++++++++ 8 files changed, 436 insertions(+), 1 deletion(-) create mode 100644 QgisModelBaker/gui/panel/set_sequence_panel.py create mode 100644 QgisModelBaker/gui/panel/tid_config_panel.py create mode 100644 QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py create mode 100644 QgisModelBaker/ui/set_sequence_panel.ui create mode 100644 QgisModelBaker/ui/tid_config_panel.ui create mode 100644 QgisModelBaker/ui/workflow_wizard/tid_configuration.ui diff --git a/QgisModelBaker/gui/panel/set_sequence_panel.py b/QgisModelBaker/gui/panel/set_sequence_panel.py new file mode 100644 index 000000000..a830b332c --- /dev/null +++ b/QgisModelBaker/gui/panel/set_sequence_panel.py @@ -0,0 +1,37 @@ +""" +/*************************************************************************** + ------------------- + begin : 17.11.2023 + git sha : :%H$ + copyright : (C) 2023 by Dave Signer + email : david at opengis ch + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 qgis.PyQt.QtWidgets import QWidget + +import QgisModelBaker.utils.gui_utils as gui_utils + +WIDGET_UI = gui_utils.get_ui_class("set_sequence_panel.ui") + + +class SetSequencePanel(QWidget, WIDGET_UI): + def __init__(self, parent=None): + QWidget.__init__(self, parent) + self.setupUi(self) + + def _load_sequence(self): + pass + + def _save_sequence(self): + pass diff --git a/QgisModelBaker/gui/panel/tid_config_panel.py b/QgisModelBaker/gui/panel/tid_config_panel.py new file mode 100644 index 000000000..3eac4428b --- /dev/null +++ b/QgisModelBaker/gui/panel/tid_config_panel.py @@ -0,0 +1,167 @@ +""" +/*************************************************************************** + ------------------- + begin : 17.11.2023 + git sha : :%H$ + copyright : (C) 2023 by Dave Signer + email : david at opengis ch + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 enum import IntEnum + +from qgis.core import QgsProject +from qgis.PyQt.QtCore import QAbstractTableModel, QModelIndex, Qt +from qgis.PyQt.QtWidgets import QHeaderView, QWidget + +import QgisModelBaker.utils.gui_utils as gui_utils +from QgisModelBaker.libs.modelbaker.utils.qgis_utils import QgisProjectUtils +from QgisModelBaker.utils.gui_utils import CheckDelegate + +WIDGET_UI = gui_utils.get_ui_class("tid_config_panel.ui") + + +class TIDModel(QAbstractTableModel): + """ + ItemModel providing all TIDs and default values of the passed project + + oid_settings is a dictionary like: + { + "Strasse": + { + "oid_domain": "STANDARDOID", + "interlis_topic" : "OIDMadness_V1", + "default_value_expression": "uuid()", + "in_form": True + } + [...] + } + """ + + class Columns(IntEnum): + NAME = 0 + OID_DOMAIN = 1 + DEFAULT_VALUE = 2 + IN_FORM = 3 + + def __init__(self): + super().__init__() + self.oid_settings = {} + + def columnCount(self, parent): + return len(TIDModel.Columns) + + def rowCount(self, parent): + return len(self.oid_settings.keys()) + + def flags(self, index): + if index.column() == TIDModel.Columns.IN_FORM: + return Qt.ItemIsEnabled + if index.column() == TIDModel.Columns.DEFAULT_VALUE: + return Qt.ItemIsEditable | Qt.ItemIsEnabled + return Qt.ItemIsSelectable | Qt.ItemIsEnabled + + def index(self, row: int, column: int, parent: QModelIndex = ...) -> QModelIndex: + """ + default override + """ + return super().createIndex(row, column, parent) + + def parent(self, index): + """ + default override + """ + return index + + def headerData(self, section, orientation, role): + if orientation == Qt.Horizontal and role == Qt.DisplayRole: + if section == TIDModel.Columns.NAME: + return self.tr("Layer") + if section == TIDModel.Columns.OID_DOMAIN: + return self.tr("TID (OID Type)") + if section == TIDModel.Columns.DEFAULT_VALUE: + return self.tr("Default Value Expression") + if section == TIDModel.Columns.IN_FORM: + return self.tr("Show") + + def data(self, index, role): + if role == int(Qt.DisplayRole) or role == int(Qt.EditRole): + key = list(self.oid_settings.keys())[index.row()] + if index.column() == TIDModel.Columns.NAME: + return f"{key} ({self.oid_settings[key]['interlis_topic']})" + if index.column() == TIDModel.Columns.OID_DOMAIN: + return self.oid_settings[key]["oid_domain"] + if index.column() == TIDModel.Columns.DEFAULT_VALUE: + return self.oid_settings[key]["default_value_expression"] + if index.column() == TIDModel.Columns.IN_FORM: + return self.oid_settings[key]["in_form"] + return None + + def setData(self, index, data, role): + if role == int(Qt.EditRole): + if index.column() == TIDModel.Columns.DEFAULT_VALUE: + key = list(self.oid_settings.keys())[index.row()] + self.oid_settings[key]["default_value_expression"] = data + self.dataChanged.emit(index, index) + if index.column() == TIDModel.Columns.IN_FORM: + key = list(self.oid_settings.keys())[index.row()] + self.oid_settings[key]["in_form"] = data + self.dataChanged.emit(index, index) + + def load_tid_config(self, qgis_project=None): + self.beginResetModel() + self.oid_settings = QgisProjectUtils(qgis_project).get_oid_settings() + self.endResetModel() + + def save_tid_config(self, qgis_project=None): + if qgis_project: + QgisProjectUtils(qgis_project.set_oid_settings(self.oid_settings)) + + +class TIDConfigPanel(QWidget, WIDGET_UI): + def __init__(self, qgis_project, parent=None): + QWidget.__init__(self, parent) + self.setupUi(self) + self.parent = parent + self.qgis_project = ( + QgsProject.instance() + ) # test after that it should be passed with qgis_project + self.tid_model = TIDModel() + self.tid_config_view.setModel(self.tid_model) + + self.tid_config_view.horizontalHeader().setSectionResizeMode( + TIDModel.Columns.NAME, QHeaderView.Stretch + ) + self.tid_config_view.horizontalHeader().setSectionResizeMode( + TIDModel.Columns.OID_DOMAIN, QHeaderView.ResizeToContents + ) + self.tid_config_view.horizontalHeader().setSectionResizeMode( + TIDModel.Columns.DEFAULT_VALUE, QHeaderView.ResizeToContents + ) + self.tid_config_view.horizontalHeader().setSectionResizeMode( + TIDModel.Columns.IN_FORM, QHeaderView.ResizeToContents + ) + + # load data + self._load_tid_config() + + self.tid_config_view.setItemDelegateForColumn( + TIDModel.Columns.IN_FORM, + CheckDelegate(self, Qt.EditRole), + ) + + def _load_tid_config(self): + self.tid_model.load_tid_config(self.qgis_project) + + def _save_tid_config(self): + self.tid_model.save_tid_config(self.qgis_project) diff --git a/QgisModelBaker/gui/workflow_wizard/project_creation_page.py b/QgisModelBaker/gui/workflow_wizard/project_creation_page.py index 2e94ae094..abd006991 100644 --- a/QgisModelBaker/gui/workflow_wizard/project_creation_page.py +++ b/QgisModelBaker/gui/workflow_wizard/project_creation_page.py @@ -45,7 +45,6 @@ def __init__(self, parent, title): self.workflow_wizard = parent self.setupUi(self) - self.setFinalPage(True) self.setTitle(title) self.setStyleSheet(gui_utils.DEFAULT_STYLE) @@ -63,6 +62,16 @@ def __init__(self, parent, title): self.create_project_button.clicked.connect(self._create_project) + self.is_complete = False + + def isComplete(self): + return self.is_complete + + def setComplete(self, complete): + self.is_complete = complete + self.create_project_button.setDisabled(complete) + self.completeChanged.emit() + def set_configuration(self, configuration): self.configuration = configuration @@ -349,6 +358,7 @@ def _create_project(self): self.progress_bar.setValue(100) self.setStyleSheet(gui_utils.SUCCESS_STYLE) self.workflow_wizard.log_panel.print_info(self.tr("It's served!")) + self.setComplete(True) def ilidata_path_resolver(self, base_path, path): if "ilidata:" in path or "file:" in path: diff --git a/QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py b/QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py new file mode 100644 index 000000000..13210b8de --- /dev/null +++ b/QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py @@ -0,0 +1,58 @@ +""" +/*************************************************************************** + ------------------- + begin : 17.11.2023 + git sha : :%H$ + copyright : (C) 2023 by Dave Signer + email : david at opengis ch + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 qgis.PyQt.QtWidgets import QWizardPage + +from QgisModelBaker.gui.panel.set_sequence_panel import SetSequencePanel +from QgisModelBaker.gui.panel.tid_config_panel import TIDConfigPanel +from QgisModelBaker.utils import gui_utils + +PAGE_UI = gui_utils.get_ui_class("workflow_wizard/tid_configuration.ui") + + +class TIDConfigurationPage(QWizardPage, PAGE_UI): + def __init__(self, parent, title): + QWizardPage.__init__(self, parent) + + self.workflow_wizard = parent + + self.setupUi(self) + self.setFinalPage(True) + self.setTitle(title) + self.setStyleSheet(gui_utils.DEFAULT_STYLE) + + self.tid_config_panel = TIDConfigPanel(self.workflow_wizard) + self.tid_config_layout.addWidget(self.tid_config_panel) + + self.set_sequence_panel = SetSequencePanel(self.workflow_wizard) + self.set_sequence_layout.addWidget(self.set_sequence_panel) + + self.set_tid_configuration_button.clicked.connect(self._set_tid_configuration) + + def set_configuration(self, configuration): + self.configuration = configuration + + def _set_tid_configuration(self): + self.progress_bar.setValue(0) + self.progress_bar.setValue(100) + self.setStyleSheet(gui_utils.SUCCESS_STYLE) + self.workflow_wizard.log_panel.print_info( + self.tr("Stored TID Configurations to current project") + ) diff --git a/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py b/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py index 3db32c7d8..4fceefea1 100644 --- a/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py +++ b/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py @@ -44,6 +44,9 @@ ) from QgisModelBaker.gui.workflow_wizard.intro_page import IntroPage from QgisModelBaker.gui.workflow_wizard.project_creation_page import ProjectCreationPage +from QgisModelBaker.gui.workflow_wizard.tid_configuration_page import ( + TIDConfigurationPage, +) from QgisModelBaker.libs.modelbaker.iliwrapper.ili2dbconfig import ( ExportConfiguration, ImportDataConfiguration, @@ -161,6 +164,9 @@ def __init__(self, iface, base_config, parent): self.project_creation_page = ProjectCreationPage( self, self._current_page_title(PageIds.ProjectCreation) ) + self.tid_configuration_page = TIDConfigurationPage( + self, self._current_page_title(PageIds.TIDConfiguration) + ) self.generate_database_selection_page = DatabaseSelectionPage( self, self._current_page_title(PageIds.GenerateDatabaseSelection), @@ -189,6 +195,7 @@ def __init__(self, iface, base_config, parent): self.setPage(PageIds.ImportDataConfiguration, self.data_configuration_page) self.setPage(PageIds.ImportDataExecution, self.import_data_execution_page) self.setPage(PageIds.ProjectCreation, self.project_creation_page) + self.setPage(PageIds.TIDConfiguration, self.tid_configuration_page) self.setPage( PageIds.GenerateDatabaseSelection, self.generate_database_selection_page ) @@ -316,6 +323,9 @@ def next_id(self): if self.current_id == PageIds.ExportDataConfiguration: return PageIds.ExportDataExecution + if self.current_id == PageIds.ProjectCreation: + return PageIds.TIDConfiguration + return self.current_id def id_changed(self, new_id): @@ -453,6 +463,8 @@ def _current_page_title(self, id): return self.tr("Data Export Sessions") elif id == PageIds.ProjectCreation: return self.tr("Generate a QGIS Project") + elif id == PageIds.TIDConfiguration: + return self.tr("Configure OID Generation") else: return self.tr("Model Baker - Workflow Wizard") diff --git a/QgisModelBaker/ui/set_sequence_panel.ui b/QgisModelBaker/ui/set_sequence_panel.ui new file mode 100644 index 000000000..fa73474f3 --- /dev/null +++ b/QgisModelBaker/ui/set_sequence_panel.ui @@ -0,0 +1,31 @@ + + + set_sequence_layout + + + + 0 + 0 + 674 + 43 + + + + Select Files + + + + + + + + + T_Id (Sequence) Value + + + + + + + + diff --git a/QgisModelBaker/ui/tid_config_panel.ui b/QgisModelBaker/ui/tid_config_panel.ui new file mode 100644 index 000000000..8d5775330 --- /dev/null +++ b/QgisModelBaker/ui/tid_config_panel.ui @@ -0,0 +1,28 @@ + + + tid_config_layout + + + + 0 + 0 + 800 + 600 + + + + Select Files + + + + + + true + + + + + + + + diff --git a/QgisModelBaker/ui/workflow_wizard/tid_configuration.ui b/QgisModelBaker/ui/workflow_wizard/tid_configuration.ui new file mode 100644 index 000000000..30af5f5e4 --- /dev/null +++ b/QgisModelBaker/ui/workflow_wizard/tid_configuration.ui @@ -0,0 +1,92 @@ + + + tid_configuration + + + + 0 + 0 + 800 + 600 + + + + Select Files + + + + + + + 0 + 0 + + + + + 75 + true + + + + <html><head/><body><p>Configure the OIDs (<span style=" font-family:'monospace';">t_ili_tid</span>) default values of the layers in the generated project.</p></body></html> + + + Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop + + + true + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Set configuration + + + + + + + 0 + + + + + + + + From 3d6b6e0ff8fe28dad704e236a403694db56b4de6 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 17 Nov 2023 16:02:56 +0100 Subject: [PATCH 05/30] here we go. first version of the tid configurator - needs finetuning --- .../gui/panel/set_sequence_panel.py | 13 ++++--- QgisModelBaker/gui/panel/tid_config_panel.py | 19 ++++------ .../workflow_wizard/tid_configuration_page.py | 35 +++++++++++++++--- .../gui/workflow_wizard/workflow_wizard.py | 6 ++++ QgisModelBaker/ui/set_sequence_panel.ui | 10 ++++-- .../ui/workflow_wizard/tid_configuration.ui | 36 ++++++++++++++----- 6 files changed, 87 insertions(+), 32 deletions(-) diff --git a/QgisModelBaker/gui/panel/set_sequence_panel.py b/QgisModelBaker/gui/panel/set_sequence_panel.py index a830b332c..4948174c6 100644 --- a/QgisModelBaker/gui/panel/set_sequence_panel.py +++ b/QgisModelBaker/gui/panel/set_sequence_panel.py @@ -30,8 +30,11 @@ def __init__(self, parent=None): QWidget.__init__(self, parent) self.setupUi(self) - def _load_sequence(self): - pass - - def _save_sequence(self): - pass + def load_sequence(self, db_connector=None): + if db_connector: + sequence_value = db_connector.get_ili2db_sequence_value() + self.sequence_value_edit.setValue(sequence_value) + + def save_sequence(self, db_connector=None): + if db_connector: + db_connector.set_ili2db_sequence_value(self.sequence_value_edit.value()) diff --git a/QgisModelBaker/gui/panel/tid_config_panel.py b/QgisModelBaker/gui/panel/tid_config_panel.py index 3eac4428b..8a590a00f 100644 --- a/QgisModelBaker/gui/panel/tid_config_panel.py +++ b/QgisModelBaker/gui/panel/tid_config_panel.py @@ -117,6 +117,7 @@ def setData(self, index, data, role): key = list(self.oid_settings.keys())[index.row()] self.oid_settings[key]["in_form"] = data self.dataChanged.emit(index, index) + return True def load_tid_config(self, qgis_project=None): self.beginResetModel() @@ -125,17 +126,14 @@ def load_tid_config(self, qgis_project=None): def save_tid_config(self, qgis_project=None): if qgis_project: - QgisProjectUtils(qgis_project.set_oid_settings(self.oid_settings)) + QgisProjectUtils(qgis_project).set_oid_settings(self.oid_settings) class TIDConfigPanel(QWidget, WIDGET_UI): - def __init__(self, qgis_project, parent=None): + def __init__(self, parent=None): QWidget.__init__(self, parent) self.setupUi(self) self.parent = parent - self.qgis_project = ( - QgsProject.instance() - ) # test after that it should be passed with qgis_project self.tid_model = TIDModel() self.tid_config_view.setModel(self.tid_model) @@ -152,16 +150,13 @@ def __init__(self, qgis_project, parent=None): TIDModel.Columns.IN_FORM, QHeaderView.ResizeToContents ) - # load data - self._load_tid_config() - self.tid_config_view.setItemDelegateForColumn( TIDModel.Columns.IN_FORM, CheckDelegate(self, Qt.EditRole), ) - def _load_tid_config(self): - self.tid_model.load_tid_config(self.qgis_project) + def load_tid_config(self, qgis_project=QgsProject.instance()): + self.tid_model.load_tid_config(qgis_project) - def _save_tid_config(self): - self.tid_model.save_tid_config(self.qgis_project) + def save_tid_config(self, qgis_project=QgsProject.instance()): + self.tid_model.save_tid_config(qgis_project) diff --git a/QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py b/QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py index 13210b8de..9b6493ae9 100644 --- a/QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py +++ b/QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py @@ -18,8 +18,10 @@ """ +from qgis.core import QgsProject from qgis.PyQt.QtWidgets import QWizardPage +import QgisModelBaker.libs.modelbaker.utils.db_utils as db_utils from QgisModelBaker.gui.panel.set_sequence_panel import SetSequencePanel from QgisModelBaker.gui.panel.tid_config_panel import TIDConfigPanel from QgisModelBaker.utils import gui_utils @@ -32,6 +34,7 @@ def __init__(self, parent, title): QWizardPage.__init__(self, parent) self.workflow_wizard = parent + self.qgis_project = QgsProject.instance() self.setupUi(self) self.setFinalPage(True) @@ -44,15 +47,39 @@ def __init__(self, parent, title): self.set_sequence_panel = SetSequencePanel(self.workflow_wizard) self.set_sequence_layout.addWidget(self.set_sequence_panel) - self.set_tid_configuration_button.clicked.connect(self._set_tid_configuration) + self.reset_tid_config_button.clicked.connect(self._reset_tid_configuration) + self.set_tid_config_and_sequence_button.clicked.connect( + self._set_tid_configuration + ) + + self.configuration = None + self.db_connector = None def set_configuration(self, configuration): self.configuration = configuration + def setup_dialog(self): + self.db_connector = db_utils.get_db_connector(self.configuration) + self._reset_tid_configuration() + + def _reset_tid_configuration(self): + self.tid_config_panel.load_tid_config(self.qgis_project) + self.set_sequence_panel.load_sequence(self.db_connector) + def _set_tid_configuration(self): self.progress_bar.setValue(0) - self.progress_bar.setValue(100) - self.setStyleSheet(gui_utils.SUCCESS_STYLE) + + self.tid_config_panel.save_tid_config(self.qgis_project) self.workflow_wizard.log_panel.print_info( - self.tr("Stored TID Configurations to current project") + self.tr("Stored TID configurations to current project") ) + + self.progress_bar.setValue(50) + + self.set_sequence_panel.save_sequence(self.db_connector) + self.workflow_wizard.log_panel.print_info( + self.tr("Stored the sequence value to current database") + ) + + self.progress_bar.setValue(100) + self.setStyleSheet(gui_utils.SUCCESS_STYLE) diff --git a/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py b/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py index 4fceefea1..a4cf463dc 100644 --- a/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py +++ b/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py @@ -379,6 +379,12 @@ def id_changed(self, new_id): self.import_schema_configuration ) + if self.current_id == PageIds.TIDConfiguration: + self.tid_configuration_page.set_configuration( + self.import_schema_configuration + ) + self.tid_configuration_page.setup_dialog() + if self.current_id == PageIds.ImportDataConfiguration: self.data_configuration_page.setup_dialog( self._basket_handling(self.import_data_configuration) diff --git a/QgisModelBaker/ui/set_sequence_panel.ui b/QgisModelBaker/ui/set_sequence_panel.ui index fa73474f3..7101d2fe5 100644 --- a/QgisModelBaker/ui/set_sequence_panel.ui +++ b/QgisModelBaker/ui/set_sequence_panel.ui @@ -14,9 +14,6 @@ Select Files - - - @@ -24,6 +21,13 @@ + + + + 2147483647 + + + diff --git a/QgisModelBaker/ui/workflow_wizard/tid_configuration.ui b/QgisModelBaker/ui/workflow_wizard/tid_configuration.ui index 30af5f5e4..f83ff353e 100644 --- a/QgisModelBaker/ui/workflow_wizard/tid_configuration.ui +++ b/QgisModelBaker/ui/workflow_wizard/tid_configuration.ui @@ -39,13 +39,13 @@ + + + - - - - + Qt::Vertical @@ -58,7 +58,7 @@ - + Qt::Horizontal @@ -71,20 +71,40 @@ - - + + Set configuration - + 0 + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Reset Values + + + From bb5ead576eca731013ade9c002ba2e01972ccd70 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 17 Nov 2023 17:01:38 +0100 Subject: [PATCH 06/30] have now 1 a page then a tid_configuator and there the two panels --- ...id_config_panel.py => layer_tids_panel.py} | 16 ++--- .../gui/panel/tid_configurator_panel.py | 58 +++++++++++++++++++ .../workflow_wizard/tid_configuration_page.py | 33 +++-------- .../gui/workflow_wizard/workflow_wizard.py | 1 - ...id_config_panel.ui => layer_tids_panel.ui} | 6 +- QgisModelBaker/ui/set_sequence_panel.ui | 42 ++++++++++---- QgisModelBaker/ui/tid_configurator_panel.ui | 55 ++++++++++++++++++ .../ui/workflow_wizard/tid_configuration.ui | 43 ++++---------- 8 files changed, 172 insertions(+), 82 deletions(-) rename QgisModelBaker/gui/panel/{tid_config_panel.py => layer_tids_panel.py} (92%) create mode 100644 QgisModelBaker/gui/panel/tid_configurator_panel.py rename QgisModelBaker/ui/{tid_config_panel.ui => layer_tids_panel.ui} (78%) create mode 100644 QgisModelBaker/ui/tid_configurator_panel.ui diff --git a/QgisModelBaker/gui/panel/tid_config_panel.py b/QgisModelBaker/gui/panel/layer_tids_panel.py similarity index 92% rename from QgisModelBaker/gui/panel/tid_config_panel.py rename to QgisModelBaker/gui/panel/layer_tids_panel.py index 8a590a00f..0caa8bcd4 100644 --- a/QgisModelBaker/gui/panel/tid_config_panel.py +++ b/QgisModelBaker/gui/panel/layer_tids_panel.py @@ -28,7 +28,7 @@ from QgisModelBaker.libs.modelbaker.utils.qgis_utils import QgisProjectUtils from QgisModelBaker.utils.gui_utils import CheckDelegate -WIDGET_UI = gui_utils.get_ui_class("tid_config_panel.ui") +WIDGET_UI = gui_utils.get_ui_class("layer_tids_panel.ui") class TIDModel(QAbstractTableModel): @@ -129,28 +129,28 @@ def save_tid_config(self, qgis_project=None): QgisProjectUtils(qgis_project).set_oid_settings(self.oid_settings) -class TIDConfigPanel(QWidget, WIDGET_UI): +class LayerTIDsPanel(QWidget, WIDGET_UI): def __init__(self, parent=None): QWidget.__init__(self, parent) self.setupUi(self) self.parent = parent self.tid_model = TIDModel() - self.tid_config_view.setModel(self.tid_model) + self.layer_tids_view.setModel(self.tid_model) - self.tid_config_view.horizontalHeader().setSectionResizeMode( + self.layer_tids_view.horizontalHeader().setSectionResizeMode( TIDModel.Columns.NAME, QHeaderView.Stretch ) - self.tid_config_view.horizontalHeader().setSectionResizeMode( + self.layer_tids_view.horizontalHeader().setSectionResizeMode( TIDModel.Columns.OID_DOMAIN, QHeaderView.ResizeToContents ) - self.tid_config_view.horizontalHeader().setSectionResizeMode( + self.layer_tids_view.horizontalHeader().setSectionResizeMode( TIDModel.Columns.DEFAULT_VALUE, QHeaderView.ResizeToContents ) - self.tid_config_view.horizontalHeader().setSectionResizeMode( + self.layer_tids_view.horizontalHeader().setSectionResizeMode( TIDModel.Columns.IN_FORM, QHeaderView.ResizeToContents ) - self.tid_config_view.setItemDelegateForColumn( + self.layer_tids_view.setItemDelegateForColumn( TIDModel.Columns.IN_FORM, CheckDelegate(self, Qt.EditRole), ) diff --git a/QgisModelBaker/gui/panel/tid_configurator_panel.py b/QgisModelBaker/gui/panel/tid_configurator_panel.py new file mode 100644 index 000000000..7daddb901 --- /dev/null +++ b/QgisModelBaker/gui/panel/tid_configurator_panel.py @@ -0,0 +1,58 @@ +""" +/*************************************************************************** + ------------------- + begin : 17.11.2023 + git sha : :%H$ + copyright : (C) 2023 by Dave Signer + email : david at opengis ch + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 qgis.PyQt.QtWidgets import QWidget + +from QgisModelBaker.gui.panel.layer_tids_panel import LayerTIDsPanel +from QgisModelBaker.gui.panel.set_sequence_panel import SetSequencePanel +from QgisModelBaker.utils import gui_utils + +WIDGET_UI = gui_utils.get_ui_class("tid_configurator_panel.ui") + + +class TIDConfiguratorPanel(QWidget, WIDGET_UI): + def __init__(self, parent=None): + QWidget.__init__(self, parent) + self.setupUi(self) + self.parent = parent + + self.layer_tids_panel = LayerTIDsPanel(self.parent) + self.layer_tids_layout.addWidget(self.layer_tids_panel) + + self.set_sequence_panel = SetSequencePanel(self.parent) + self.set_sequence_layout.addWidget(self.set_sequence_panel) + + self.reset_layer_tids_button.clicked.connect(self._reset_tid_configuration) + + self.qgis_project = None + self.db_connector = None + + def setup_dialog(self, db_connector, qgis_project): + self.qgis_project = qgis_project + self.db_connector = db_connector + self._reset_tid_configuration() + + def _reset_tid_configuration(self): + self.layer_tids_panel.load_tid_config(self.qgis_project) + self.set_sequence_panel.load_sequence(self.db_connector) + + def set_tid_configuration(self): + self.layer_tids_panel.save_tid_config(self.qgis_project) + self.set_sequence_panel.save_sequence(self.db_connector) diff --git a/QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py b/QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py index 9b6493ae9..d08fff9ec 100644 --- a/QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py +++ b/QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py @@ -22,8 +22,7 @@ from qgis.PyQt.QtWidgets import QWizardPage import QgisModelBaker.libs.modelbaker.utils.db_utils as db_utils -from QgisModelBaker.gui.panel.set_sequence_panel import SetSequencePanel -from QgisModelBaker.gui.panel.tid_config_panel import TIDConfigPanel +from QgisModelBaker.gui.panel.tid_configurator_panel import TIDConfiguratorPanel from QgisModelBaker.utils import gui_utils PAGE_UI = gui_utils.get_ui_class("workflow_wizard/tid_configuration.ui") @@ -34,49 +33,33 @@ def __init__(self, parent, title): QWizardPage.__init__(self, parent) self.workflow_wizard = parent - self.qgis_project = QgsProject.instance() self.setupUi(self) self.setFinalPage(True) self.setTitle(title) self.setStyleSheet(gui_utils.DEFAULT_STYLE) - self.tid_config_panel = TIDConfigPanel(self.workflow_wizard) - self.tid_config_layout.addWidget(self.tid_config_panel) + self.tid_configurator_panel = TIDConfiguratorPanel(self.workflow_wizard) + self.tid_configurator_layout.addWidget(self.tid_configurator_panel) - self.set_sequence_panel = SetSequencePanel(self.workflow_wizard) - self.set_sequence_layout.addWidget(self.set_sequence_panel) - - self.reset_tid_config_button.clicked.connect(self._reset_tid_configuration) - self.set_tid_config_and_sequence_button.clicked.connect( + self.set_layer_tids_and_sequence_button.clicked.connect( self._set_tid_configuration ) self.configuration = None - self.db_connector = None def set_configuration(self, configuration): self.configuration = configuration - - def setup_dialog(self): - self.db_connector = db_utils.get_db_connector(self.configuration) - self._reset_tid_configuration() - - def _reset_tid_configuration(self): - self.tid_config_panel.load_tid_config(self.qgis_project) - self.set_sequence_panel.load_sequence(self.db_connector) + db_connector = db_utils.get_db_connector(self.configuration) + self.tid_configurator_panel.setup_dialog(db_connector, QgsProject.instance()) def _set_tid_configuration(self): self.progress_bar.setValue(0) - - self.tid_config_panel.save_tid_config(self.qgis_project) + # we store the settings to project and db + self.tid_configurator_panel.set_tid_configuration() self.workflow_wizard.log_panel.print_info( self.tr("Stored TID configurations to current project") ) - - self.progress_bar.setValue(50) - - self.set_sequence_panel.save_sequence(self.db_connector) self.workflow_wizard.log_panel.print_info( self.tr("Stored the sequence value to current database") ) diff --git a/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py b/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py index a4cf463dc..b90da69ed 100644 --- a/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py +++ b/QgisModelBaker/gui/workflow_wizard/workflow_wizard.py @@ -383,7 +383,6 @@ def id_changed(self, new_id): self.tid_configuration_page.set_configuration( self.import_schema_configuration ) - self.tid_configuration_page.setup_dialog() if self.current_id == PageIds.ImportDataConfiguration: self.data_configuration_page.setup_dialog( diff --git a/QgisModelBaker/ui/tid_config_panel.ui b/QgisModelBaker/ui/layer_tids_panel.ui similarity index 78% rename from QgisModelBaker/ui/tid_config_panel.ui rename to QgisModelBaker/ui/layer_tids_panel.ui index 8d5775330..7ee47f957 100644 --- a/QgisModelBaker/ui/tid_config_panel.ui +++ b/QgisModelBaker/ui/layer_tids_panel.ui @@ -1,7 +1,7 @@ - tid_config_layout - + layer_tids_layout + 0 @@ -15,7 +15,7 @@ - + true diff --git a/QgisModelBaker/ui/set_sequence_panel.ui b/QgisModelBaker/ui/set_sequence_panel.ui index 7101d2fe5..ec1ee3f99 100644 --- a/QgisModelBaker/ui/set_sequence_panel.ui +++ b/QgisModelBaker/ui/set_sequence_panel.ui @@ -6,26 +6,44 @@ 0 0 - 674 - 43 + 744 + 88 Select Files - - - - T_Id (Sequence) Value + + + + <html><head/><body><p>With this option you reset the technical sequence id on the database. </p><p>Do it only when you know what you are about to do.</p></body></html> - - - - - - 2147483647 + + Reset the technical sequence used as t_id value + + + true + + + false + + + + + T_Id (Sequence) Value + + + + + + + 2147483647 + + + + diff --git a/QgisModelBaker/ui/tid_configurator_panel.ui b/QgisModelBaker/ui/tid_configurator_panel.ui new file mode 100644 index 000000000..617e5a10c --- /dev/null +++ b/QgisModelBaker/ui/tid_configurator_panel.ui @@ -0,0 +1,55 @@ + + + tid_configuration + + + + 0 + 0 + 800 + 443 + + + + Select Files + + + + + + QLayout::SetMaximumSize + + + + + + + QLayout::SetMinimumSize + + + + + + + Reset Values + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + diff --git a/QgisModelBaker/ui/workflow_wizard/tid_configuration.ui b/QgisModelBaker/ui/workflow_wizard/tid_configuration.ui index f83ff353e..d537e32c6 100644 --- a/QgisModelBaker/ui/workflow_wizard/tid_configuration.ui +++ b/QgisModelBaker/ui/workflow_wizard/tid_configuration.ui @@ -14,7 +14,7 @@ Select Files - + @@ -39,13 +39,10 @@ - - + + - - - - + Qt::Vertical @@ -58,35 +55,15 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Set configuration - - - - + 0 - - + + Qt::Horizontal @@ -98,10 +75,10 @@ - - + + - Reset Values + Set configuration From 5f5d2fb2493e1ac8e08f22a700bfa9a9d02de0c4 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 17 Nov 2023 22:19:55 +0100 Subject: [PATCH 07/30] nice expression dialog delegate, but it still appears only on double click --- QgisModelBaker/gui/panel/layer_tids_panel.py | 28 +++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/QgisModelBaker/gui/panel/layer_tids_panel.py b/QgisModelBaker/gui/panel/layer_tids_panel.py index 0caa8bcd4..ee1b5bd11 100644 --- a/QgisModelBaker/gui/panel/layer_tids_panel.py +++ b/QgisModelBaker/gui/panel/layer_tids_panel.py @@ -21,8 +21,9 @@ from enum import IntEnum from qgis.core import QgsProject +from qgis.gui import QgsFieldExpressionWidget from qgis.PyQt.QtCore import QAbstractTableModel, QModelIndex, Qt -from qgis.PyQt.QtWidgets import QHeaderView, QWidget +from qgis.PyQt.QtWidgets import QHeaderView, QStyledItemDelegate, QWidget import QgisModelBaker.utils.gui_utils as gui_utils from QgisModelBaker.libs.modelbaker.utils.qgis_utils import QgisProjectUtils @@ -129,6 +130,27 @@ def save_tid_config(self, qgis_project=None): QgisProjectUtils(qgis_project).set_oid_settings(self.oid_settings) +class FieldExpressionDelegate(QStyledItemDelegate): + def __init__(self, parent): + super().__init__(parent) + self.editor = None + + def createEditor(self, parent, option, index): + self.editor = QgsFieldExpressionWidget(parent) + return self.editor + + def setEditorData(self, editor, index): + value = index.data(int(Qt.DisplayRole)) + self.editor.setExpression(value) + + def setModelData(self, editor, model, index): + value = editor.expression() + model.setData(index, value, int(Qt.EditRole)) + + def updateEditorGeometry(self, editor, option, index): + self.editor.setGeometry(option.rect) + + class LayerTIDsPanel(QWidget, WIDGET_UI): def __init__(self, parent=None): QWidget.__init__(self, parent) @@ -154,6 +176,10 @@ def __init__(self, parent=None): TIDModel.Columns.IN_FORM, CheckDelegate(self, Qt.EditRole), ) + self.layer_tids_view.setItemDelegateForColumn( + TIDModel.Columns.DEFAULT_VALUE, + FieldExpressionDelegate(self), + ) def load_tid_config(self, qgis_project=QgsProject.instance()): self.tid_model.load_tid_config(qgis_project) From e43ea388dba25c439bf5402d87aa09e5eaef06d9 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 17 Nov 2023 22:26:49 +0100 Subject: [PATCH 08/30] at least with one click it opens the expression widget --- QgisModelBaker/gui/panel/layer_tids_panel.py | 8 +++++++- .../gui/workflow_wizard/import_data_configuration_page.py | 2 ++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/QgisModelBaker/gui/panel/layer_tids_panel.py b/QgisModelBaker/gui/panel/layer_tids_panel.py index ee1b5bd11..de7aafa06 100644 --- a/QgisModelBaker/gui/panel/layer_tids_panel.py +++ b/QgisModelBaker/gui/panel/layer_tids_panel.py @@ -23,7 +23,12 @@ from qgis.core import QgsProject from qgis.gui import QgsFieldExpressionWidget from qgis.PyQt.QtCore import QAbstractTableModel, QModelIndex, Qt -from qgis.PyQt.QtWidgets import QHeaderView, QStyledItemDelegate, QWidget +from qgis.PyQt.QtWidgets import ( + QAbstractItemView, + QHeaderView, + QStyledItemDelegate, + QWidget, +) import QgisModelBaker.utils.gui_utils as gui_utils from QgisModelBaker.libs.modelbaker.utils.qgis_utils import QgisProjectUtils @@ -180,6 +185,7 @@ def __init__(self, parent=None): TIDModel.Columns.DEFAULT_VALUE, FieldExpressionDelegate(self), ) + self.layer_tids_view.setEditTriggers(QAbstractItemView.AllEditTriggers) def load_tid_config(self, qgis_project=QgsProject.instance()): self.tid_model.load_tid_config(qgis_project) diff --git a/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py b/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py index 00be44c6a..628d5e834 100644 --- a/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py +++ b/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py @@ -24,6 +24,7 @@ from qgis.PyQt.QtCore import Qt from qgis.PyQt.QtGui import QIcon from qgis.PyQt.QtWidgets import ( + QAbstractItemView, QComboBox, QCompleter, QHeaderView, @@ -151,6 +152,7 @@ def __init__(self, parent, title): gui_utils.SourceModel.Columns.DATASET, QHeaderView.ResizeToContents ) + self.file_table_view.setEditTriggers(QAbstractItemView.AllEditTriggers) self.file_table_view.verticalHeader().setSectionsMovable(True) self.file_table_view.verticalHeader().setDragEnabled(True) self.file_table_view.verticalHeader().setDragDropMode(QHeaderView.InternalMove) From 4f9071610848b47ad5338955de4895fde95dafe3 Mon Sep 17 00:00:00 2001 From: signedav Date: Mon, 20 Nov 2023 09:31:22 +0100 Subject: [PATCH 09/30] Make delegates beautiful - means show them from beginning. Pass the layer to the expression widget so we can use fields etc. --- QgisModelBaker/gui/panel/layer_tids_panel.py | 29 ++++++++++++++++++- .../import_data_configuration_page.py | 23 +++++++-------- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/QgisModelBaker/gui/panel/layer_tids_panel.py b/QgisModelBaker/gui/panel/layer_tids_panel.py index de7aafa06..20884cf38 100644 --- a/QgisModelBaker/gui/panel/layer_tids_panel.py +++ b/QgisModelBaker/gui/panel/layer_tids_panel.py @@ -18,11 +18,12 @@ """ -from enum import IntEnum +from enum import Enum, IntEnum from qgis.core import QgsProject from qgis.gui import QgsFieldExpressionWidget from qgis.PyQt.QtCore import QAbstractTableModel, QModelIndex, Qt +from qgis.PyQt.QtGui import QPixmap from qgis.PyQt.QtWidgets import ( QAbstractItemView, QHeaderView, @@ -54,6 +55,12 @@ class TIDModel(QAbstractTableModel): } """ + class Roles(Enum): + LAYER = Qt.UserRole + 1 + + def __int__(self): + return self.value + class Columns(IntEnum): NAME = 0 OID_DOMAIN = 1 @@ -111,6 +118,9 @@ def data(self, index, role): return self.oid_settings[key]["default_value_expression"] if index.column() == TIDModel.Columns.IN_FORM: return self.oid_settings[key]["in_form"] + elif role == int(TIDModel.Roles.LAYER): + key = list(self.oid_settings.keys())[index.row()] + return self.oid_settings[key]["layer"] return None def setData(self, index, data, role): @@ -138,10 +148,13 @@ def save_tid_config(self, qgis_project=None): class FieldExpressionDelegate(QStyledItemDelegate): def __init__(self, parent): super().__init__(parent) + self.parent = parent self.editor = None def createEditor(self, parent, option, index): self.editor = QgsFieldExpressionWidget(parent) + layer = index.data(int(TIDModel.Roles.LAYER)) + self.editor.setLayer(layer) return self.editor def setEditorData(self, editor, index): @@ -155,6 +168,17 @@ def setModelData(self, editor, model, index): def updateEditorGeometry(self, editor, option, index): self.editor.setGeometry(option.rect) + def paint(self, painter, option, index): + opt = self.createEditor(self.parent, option, index) + opt.editable = False + value = index.data(int(Qt.DisplayRole)) + opt.setExpression(value) + opt.resize(option.rect.width(), option.rect.height()) + pixmap = QPixmap(opt.width(), opt.height()) + opt.render(pixmap) + painter.drawPixmap(option.rect, pixmap) + painter.restore() + class LayerTIDsPanel(QWidget, WIDGET_UI): def __init__(self, parent=None): @@ -187,6 +211,9 @@ def __init__(self, parent=None): ) self.layer_tids_view.setEditTriggers(QAbstractItemView.AllEditTriggers) + # for row in range(0,self.tid_model.rowCount(QModelIndex())): + # self.layer_tids_view.openPersistentEditor(self.tid_model.index(row, TIDModel.Columns.DEFAULT_VALUE)) + def load_tid_config(self, qgis_project=QgsProject.instance()): self.tid_model.load_tid_config(qgis_project) diff --git a/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py b/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py index 628d5e834..79876c277 100644 --- a/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py +++ b/QgisModelBaker/gui/workflow_wizard/import_data_configuration_page.py @@ -19,18 +19,15 @@ import os -from PyQt5.QtWidgets import QApplication from qgis.core import QgsApplication from qgis.PyQt.QtCore import Qt -from qgis.PyQt.QtGui import QIcon +from qgis.PyQt.QtGui import QIcon, QPixmap from qgis.PyQt.QtWidgets import ( QAbstractItemView, QComboBox, QCompleter, QHeaderView, - QStyle, QStyledItemDelegate, - QStyleOptionComboBox, QWizardPage, ) @@ -50,6 +47,7 @@ class DatasetComboDelegate(QStyledItemDelegate): def __init__(self, parent, db_connector): super().__init__(parent) + self.parent = parent self.refresh_datasets(db_connector) def refresh_datasets(self, db_connector): @@ -79,15 +77,16 @@ def updateEditorGeometry(self, editor, option, index): editor.setGeometry(option.rect) def paint(self, painter, option, index): - """ - Here it paints only the lable without a StyleItem for the ComboBox, because to edit it needs multiple clicks and the behavior gets confusing. - """ - opt = QStyleOptionComboBox() + opt = self.createEditor(self.parent, option, index) opt.editable = False - opt.rect = option.rect - value = index.data(int(Qt.DisplayRole)) - opt.currentText = value - QApplication.style().drawControl(QStyle.CE_ComboBoxLabel, opt, painter) + value = index.data(int(gui_utils.SourceModel.Roles.DATASET_NAME)) + num = self.items.index(value) if value in self.items else 0 + opt.setCurrentIndex(num) + opt.resize(option.rect.width(), option.rect.height()) + pixmap = QPixmap(opt.width(), opt.height()) + opt.render(pixmap) + painter.drawPixmap(option.rect, pixmap) + painter.restore() class ImportDataConfigurationPage(QWizardPage, PAGE_UI): From a0d85cf0f7bd42d284766346c2da3c502c3f3b16 Mon Sep 17 00:00:00 2001 From: signedav Date: Mon, 20 Nov 2023 11:51:07 +0100 Subject: [PATCH 10/30] TID Manager openable via menu --- QgisModelBaker/gui/dataset_manager.py | 1 + .../gui/panel/set_sequence_panel.py | 10 ++- .../gui/panel/tid_configurator_panel.py | 31 ++++++- QgisModelBaker/gui/tid_manager.py | 86 +++++++++++++++++++ .../workflow_wizard/tid_configuration_page.py | 26 +++--- QgisModelBaker/qgismodelbaker.py | 35 ++++++++ QgisModelBaker/ui/tid_manager.ui | 31 +++++++ 7 files changed, 203 insertions(+), 17 deletions(-) create mode 100644 QgisModelBaker/gui/tid_manager.py create mode 100644 QgisModelBaker/ui/tid_manager.ui diff --git a/QgisModelBaker/gui/dataset_manager.py b/QgisModelBaker/gui/dataset_manager.py index 31c5cc4d5..74c9ee7bb 100644 --- a/QgisModelBaker/gui/dataset_manager.py +++ b/QgisModelBaker/gui/dataset_manager.py @@ -105,6 +105,7 @@ def _close_editing(self): if layer.isEditable(): editable_layers.append(layer) if editable_layers: + # in case it could not close it automatically warning_box = QMessageBox(self) warning_box.setIcon(QMessageBox.Warning) warning_title = self.tr("Layers still editable") diff --git a/QgisModelBaker/gui/panel/set_sequence_panel.py b/QgisModelBaker/gui/panel/set_sequence_panel.py index 4948174c6..344891822 100644 --- a/QgisModelBaker/gui/panel/set_sequence_panel.py +++ b/QgisModelBaker/gui/panel/set_sequence_panel.py @@ -36,5 +36,11 @@ def load_sequence(self, db_connector=None): self.sequence_value_edit.setValue(sequence_value) def save_sequence(self, db_connector=None): - if db_connector: - db_connector.set_ili2db_sequence_value(self.sequence_value_edit.value()) + if self.sequence_group.isChecked(): + if db_connector: + return db_connector.set_ili2db_sequence_value( + self.sequence_value_edit.value() + ) + return False, self.tr("Could not reset T_Id - no db_connector...") + else: + return True, self.tr("T_Id not set.") diff --git a/QgisModelBaker/gui/panel/tid_configurator_panel.py b/QgisModelBaker/gui/panel/tid_configurator_panel.py index 7daddb901..8926ab7cd 100644 --- a/QgisModelBaker/gui/panel/tid_configurator_panel.py +++ b/QgisModelBaker/gui/panel/tid_configurator_panel.py @@ -20,8 +20,12 @@ from qgis.PyQt.QtWidgets import QWidget +import QgisModelBaker.libs.modelbaker.utils.db_utils as db_utils from QgisModelBaker.gui.panel.layer_tids_panel import LayerTIDsPanel from QgisModelBaker.gui.panel.set_sequence_panel import SetSequencePanel +from QgisModelBaker.libs.modelbaker.iliwrapper.ili2dbconfig import ( + Ili2DbCommandConfiguration, +) from QgisModelBaker.utils import gui_utils WIDGET_UI = gui_utils.get_ui_class("tid_configurator_panel.ui") @@ -44,9 +48,24 @@ def __init__(self, parent=None): self.qgis_project = None self.db_connector = None - def setup_dialog(self, db_connector, qgis_project): + def setup_dialog(self, qgis_project, db_connector=None): self.qgis_project = qgis_project - self.db_connector = db_connector + + if db_connector: + self.db_connector = db_connector + else: + # getting the data source of the first layer in the layer tree + first_tree_layer = qgis_project.layerTreeRoot().findLayers()[0] + if first_tree_layer: + configuration = Ili2DbCommandConfiguration() + source_provider = first_tree_layer.layer().dataProvider() + valid, mode = db_utils.get_configuration_from_sourceprovider( + source_provider, configuration + ) + if valid: + configuration.tool = mode + self.db_connector = db_utils.get_db_connector(configuration) + self._reset_tid_configuration() def _reset_tid_configuration(self): @@ -54,5 +73,9 @@ def _reset_tid_configuration(self): self.set_sequence_panel.load_sequence(self.db_connector) def set_tid_configuration(self): - self.layer_tids_panel.save_tid_config(self.qgis_project) - self.set_sequence_panel.save_sequence(self.db_connector) + result, message = self.set_sequence_panel.save_sequence(self.db_connector) + # only set the project settings when the sequence part succeeds (or is not performed) + if result: + self.layer_tids_panel.save_tid_config(self.qgis_project) + return True, message + return False, message diff --git a/QgisModelBaker/gui/tid_manager.py b/QgisModelBaker/gui/tid_manager.py new file mode 100644 index 000000000..b889da5bb --- /dev/null +++ b/QgisModelBaker/gui/tid_manager.py @@ -0,0 +1,86 @@ +""" +/*************************************************************************** + begin : 10.08.2021 + git sha : :%H$ + copyright : (C) 2021 by Dave Signer + email : david at opengis ch + ***************************************************************************/ + +/*************************************************************************** + * * + * 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 qgis.core import QgsMapLayer, QgsProject +from qgis.PyQt.QtWidgets import QDialog, QMessageBox + +import QgisModelBaker.libs.modelbaker.utils.db_utils as db_utils +from QgisModelBaker.gui.panel.tid_configurator_panel import TIDConfiguratorPanel +from QgisModelBaker.utils import gui_utils + +DIALOG_UI = gui_utils.get_ui_class("tid_manager.ui") + + +class TIDManagerDialog(QDialog, DIALOG_UI): + def __init__(self, iface, parent=None): + + QDialog.__init__(self, parent) + self.iface = iface + self._close_editing() + self.parent = parent + + self.setupUi(self) + + self.tid_configurator_panel = TIDConfiguratorPanel(self.parent) + self.tid_configurator_layout.addWidget(self.tid_configurator_panel) + + self.buttonBox.accepted.connect(self._accepted) + self.buttonBox.rejected.connect(self._rejected) + + self.setStyleSheet(gui_utils.DEFAULT_STYLE) + + self.configuration = configuration + db_connector = db_utils.get_db_connector(self.configuration) + self.tid_configurator_panel.setup_dialog(db_connector, QgsProject.instance()) + + self.tid_configurator_panel.setup_dialog(QgsProject.instance()) + + def _close_editing(self): + editable_layers = [] + for layer in QgsProject.instance().mapLayers().values(): + if layer.type() == QgsMapLayer.VectorLayer: + self.iface.vectorLayerTools().stopEditing(layer) + if layer.isEditable(): + editable_layers.append(layer) + if editable_layers: + # in case it could not close it automatically + warning_box = QMessageBox(self) + warning_box.setIcon(QMessageBox.Warning) + warning_title = self.tr("Layers still editable") + warning_box.setWindowTitle(warning_title) + warning_box.setText( + self.tr( + "You still have layers in edit mode.\nIn case you modify the sequence in the database of those layers, it could lead to database locks.\nEditable layers are:\n - {}" + ).format("\n - ".join([layer.name() for layer in editable_layers])) + ) + warning_box.exec_() + + def _accepted(self): + result, message = self.tid_configurator_panel.set_tid_configuration() + if not result: + error_box = QMessageBox(self) + error_box.setIcon(QMessageBox.Error) + warning_title = self.tr("Problems on setting T_Id sequence.") + error_box.setWindowTitle(warning_title) + error_box.setText(message) + error_box.exec_() + else: + self.close() + + def _rejected(self): + self.close() diff --git a/QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py b/QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py index d08fff9ec..c1635addc 100644 --- a/QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py +++ b/QgisModelBaker/gui/workflow_wizard/tid_configuration_page.py @@ -51,18 +51,22 @@ def __init__(self, parent, title): def set_configuration(self, configuration): self.configuration = configuration db_connector = db_utils.get_db_connector(self.configuration) - self.tid_configurator_panel.setup_dialog(db_connector, QgsProject.instance()) + self.tid_configurator_panel.setup_dialog(QgsProject.instance(), db_connector) def _set_tid_configuration(self): self.progress_bar.setValue(0) # we store the settings to project and db - self.tid_configurator_panel.set_tid_configuration() - self.workflow_wizard.log_panel.print_info( - self.tr("Stored TID configurations to current project") - ) - self.workflow_wizard.log_panel.print_info( - self.tr("Stored the sequence value to current database") - ) - - self.progress_bar.setValue(100) - self.setStyleSheet(gui_utils.SUCCESS_STYLE) + result, message = self.tid_configurator_panel.set_tid_configuration() + if result: + self.workflow_wizard.log_panel.print_info( + self.tr("Stored TID configurations to current project") + ) + self.workflow_wizard.log_panel.print_info( + self.tr("Stored the sequence value to current database") + ) + self.progress_bar.setValue(100) + self.setStyleSheet(gui_utils.SUCCESS_STYLE) + else: + self.workflow_wizard.log_panel.print_info(message) + self.progress_bar.setValue(0) + self.setStyleSheet(gui_utils.ERROR_STYLE) diff --git a/QgisModelBaker/qgismodelbaker.py b/QgisModelBaker/qgismodelbaker.py index cd74c2c06..d1d717012 100644 --- a/QgisModelBaker/qgismodelbaker.py +++ b/QgisModelBaker/qgismodelbaker.py @@ -48,6 +48,7 @@ from QgisModelBaker.gui.drop_message import DropMessageDialog from QgisModelBaker.gui.options import OptionsDialog from QgisModelBaker.gui.panel.dataset_selector import DatasetSelector +from QgisModelBaker.gui.tid_manager import TIDManagerDialog from QgisModelBaker.gui.topping_wizard.topping_wizard import ToppingWizardDialog from QgisModelBaker.gui.validate import ValidateDock from QgisModelBaker.gui.workflow_wizard.workflow_wizard import WorkflowWizardDialog @@ -65,10 +66,12 @@ def __init__(self, iface): self.workflow_wizard_dlg = None self.datasetmanager_dlg = None + self.tidmanager_dlg = None self.topping_wizard_dlg = None self.__workflow_wizard_action = None self.__datasetmanager_action = None + self.__tidmanager_action = None self.__validate_action = None self.__topping_wizard_action = None self.__configure_action = None @@ -131,6 +134,16 @@ def initGui(self): self.tr("Dataset Manager"), None, ) + self.__tidmanager_action = QAction( + QIcon( + os.path.join( + os.path.dirname(__file__), + "images/QgisModelBaker-tidmanager-icon.svg", + ) + ), + self.tr("TID (OID) Manager"), + None, + ) self.__validate_action = QAction( QIcon( os.path.join( @@ -172,11 +185,13 @@ def initGui(self): # set these actions checkable to visualize that the dialog is open self.__workflow_wizard_action.setCheckable(True) self.__datasetmanager_action.setCheckable(True) + self.__tidmanager_action.setCheckable(True) self.__validate_action.setCheckable(True) self.__topping_wizard_action.setCheckable(True) self.__configure_action.triggered.connect(self.show_options_dialog) self.__datasetmanager_action.triggered.connect(self.show_datasetmanager_dialog) + self.__tidmanager_action.triggered.connect(self.show_tidmanager_dialog) self.__validate_action.triggered.connect(self.show_validate_dock) self.__workflow_wizard_action.triggered.connect( self.show_workflow_wizard_dialog @@ -198,6 +213,9 @@ def initGui(self): self.iface.addPluginToDatabaseMenu( self.tr("Model Baker"), self.__datasetmanager_action ) + self.iface.addPluginToDatabaseMenu( + self.tr("Model Baker"), self.__tidmanager_action + ) self.iface.addPluginToDatabaseMenu( self.tr("Model Baker"), self.__topping_wizard_action ) @@ -334,6 +352,23 @@ def datasetmanager_dialog_finished(self): self.__datasetmanager_action.setChecked(False) self.datasetmanager_dlg = None + def show_tidmanager_dialog(self): + if self.tidmanager_dlg: + self.tidmanager_dlg.reject() + else: + self.tidmanager_dlg = TIDManagerDialog(self.iface, self.iface.mainWindow()) + self.tidmanager_dlg.setAttribute(Qt.WA_DeleteOnClose) + self.tidmanager_dlg.setWindowFlags( + self.tidmanager_dlg.windowFlags() | Qt.Tool + ) + self.tidmanager_dlg.show() + self.tidmanager_dlg.finished.connect(self.tidmanager_dialog_finished) + self.__tidmanager_action.setChecked(True) + + def tidmanager_dialog_finished(self): + self.__tidmanager_action.setChecked(False) + self.tidmanager_dlg = None + def show_validate_dock(self): self.__validate_dock.setVisible(not self.__validate_dock.isVisible()) diff --git a/QgisModelBaker/ui/tid_manager.ui b/QgisModelBaker/ui/tid_manager.ui new file mode 100644 index 000000000..2b482e284 --- /dev/null +++ b/QgisModelBaker/ui/tid_manager.ui @@ -0,0 +1,31 @@ + + + tid_manager + + + + 0 + 0 + 800 + 705 + + + + TID (OID) Manager + + + + + + + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + + + + + From 36a777214779cb048b74e8b011d5185ef914b191 Mon Sep 17 00:00:00 2001 From: signedav Date: Mon, 20 Nov 2023 12:14:40 +0100 Subject: [PATCH 11/30] push changes to model on ok when still editing cell in view --- QgisModelBaker/gui/panel/layer_tids_panel.py | 7 ++++--- QgisModelBaker/gui/tid_manager.py | 5 ----- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/QgisModelBaker/gui/panel/layer_tids_panel.py b/QgisModelBaker/gui/panel/layer_tids_panel.py index 20884cf38..81417a630 100644 --- a/QgisModelBaker/gui/panel/layer_tids_panel.py +++ b/QgisModelBaker/gui/panel/layer_tids_panel.py @@ -163,6 +163,7 @@ def setEditorData(self, editor, index): def setModelData(self, editor, model, index): value = editor.expression() + print(f"new exp{value}") model.setData(index, value, int(Qt.EditRole)) def updateEditorGeometry(self, editor, option, index): @@ -211,11 +212,11 @@ def __init__(self, parent=None): ) self.layer_tids_view.setEditTriggers(QAbstractItemView.AllEditTriggers) - # for row in range(0,self.tid_model.rowCount(QModelIndex())): - # self.layer_tids_view.openPersistentEditor(self.tid_model.index(row, TIDModel.Columns.DEFAULT_VALUE)) - def load_tid_config(self, qgis_project=QgsProject.instance()): self.tid_model.load_tid_config(qgis_project) def save_tid_config(self, qgis_project=QgsProject.instance()): + # if a cell is still edited, we need to store it in model by force + index = self.layer_tids_view.currentIndex() + self.layer_tids_view.currentChanged(index, index) self.tid_model.save_tid_config(qgis_project) diff --git a/QgisModelBaker/gui/tid_manager.py b/QgisModelBaker/gui/tid_manager.py index b889da5bb..5987c5f84 100644 --- a/QgisModelBaker/gui/tid_manager.py +++ b/QgisModelBaker/gui/tid_manager.py @@ -19,7 +19,6 @@ from qgis.core import QgsMapLayer, QgsProject from qgis.PyQt.QtWidgets import QDialog, QMessageBox -import QgisModelBaker.libs.modelbaker.utils.db_utils as db_utils from QgisModelBaker.gui.panel.tid_configurator_panel import TIDConfiguratorPanel from QgisModelBaker.utils import gui_utils @@ -44,10 +43,6 @@ def __init__(self, iface, parent=None): self.setStyleSheet(gui_utils.DEFAULT_STYLE) - self.configuration = configuration - db_connector = db_utils.get_db_connector(self.configuration) - self.tid_configurator_panel.setup_dialog(db_connector, QgsProject.instance()) - self.tid_configurator_panel.setup_dialog(QgsProject.instance()) def _close_editing(self): From 1aac0c5dbe40bd64e6783d25690235b2e5aee389 Mon Sep 17 00:00:00 2001 From: signedav Date: Mon, 20 Nov 2023 13:37:13 +0100 Subject: [PATCH 12/30] Descriptive text. Layout finetuning and tooltips. --- QgisModelBaker/gui/panel/layer_tids_panel.py | 41 +++++++++++++++++++ QgisModelBaker/ui/layer_tids_panel.ui | 12 ++++++ QgisModelBaker/ui/set_sequence_panel.ui | 12 ++++++ QgisModelBaker/ui/tid_configurator_panel.ui | 14 ++++++- QgisModelBaker/ui/tid_manager.ui | 22 ++++++++-- .../ui/workflow_wizard/tid_configuration.ui | 33 ++++++--------- 6 files changed, 108 insertions(+), 26 deletions(-) diff --git a/QgisModelBaker/gui/panel/layer_tids_panel.py b/QgisModelBaker/gui/panel/layer_tids_panel.py index 81417a630..cd21e026c 100644 --- a/QgisModelBaker/gui/panel/layer_tids_panel.py +++ b/QgisModelBaker/gui/panel/layer_tids_panel.py @@ -118,6 +118,47 @@ def data(self, index, role): return self.oid_settings[key]["default_value_expression"] if index.column() == TIDModel.Columns.IN_FORM: return self.oid_settings[key]["in_form"] + elif role == int(Qt.ToolTipRole): + key = list(self.oid_settings.keys())[index.row()] + if index.column() == TIDModel.Columns.NAME: + return f"{key} ({self.oid_settings[key]['interlis_topic']})" + if index.column() == TIDModel.Columns.OID_DOMAIN: + message = self.tr( + "

The OID format is not defined, you can use whatever you want, but it should always start with an underscore _ or an alphanumeric value.

" + ) + oid_domain = self.oid_settings[key].get("oid_domain", "") + if oid_domain[-7:] == "UUIDOID": + message = self.tr( + "

The OID should be an Universally Unique Identifier (OID TEXT*36).

" + ) + elif oid_domain[-11:] == "STANDARDOID": + message = self.tr( + """ + +

+ The OID format requireds an 8 char prefix and 8 char postfix. +

+

Prefix (2 + 6 chars): Country identifier + a 'global' identification part assigned once by the official authority.

+

Postfix (8 chars): Sequence (numeric or alphanumeric) of your system as 'local' identification part.

+ + + """ + ) + elif oid_domain[-6:] == "I32OID": + message = self.tr( + "

The OID must be an integer value (OID 0 .. 2147483647).

" + ) + elif oid_domain[-6:] == "ANYOID": + message = self.tr( + "

The OID format could vary depending in what basket the object (entry) is located.

These objects could be in the following topics: {topics}".format( + topics=self.oid_settings[key]["interlis_topic"] + ) + ) + return message + if index.column() == TIDModel.Columns.DEFAULT_VALUE: + return self.oid_settings[key]["default_value_expression"] + if index.column() == TIDModel.Columns.IN_FORM: + return self.tr("Show t_ili_tid field (OID) in attribute form.") elif role == int(TIDModel.Roles.LAYER): key = list(self.oid_settings.keys())[index.row()] return self.oid_settings[key]["layer"] diff --git a/QgisModelBaker/ui/layer_tids_panel.ui b/QgisModelBaker/ui/layer_tids_panel.ui index 7ee47f957..20e792118 100644 --- a/QgisModelBaker/ui/layer_tids_panel.ui +++ b/QgisModelBaker/ui/layer_tids_panel.ui @@ -14,6 +14,18 @@ Select Files + + 0 + + + 0 + + + 0 + + + 0 + diff --git a/QgisModelBaker/ui/set_sequence_panel.ui b/QgisModelBaker/ui/set_sequence_panel.ui index ec1ee3f99..d3f3dff18 100644 --- a/QgisModelBaker/ui/set_sequence_panel.ui +++ b/QgisModelBaker/ui/set_sequence_panel.ui @@ -14,6 +14,18 @@ Select Files + + 0 + + + 0 + + + 0 + + + 0 + diff --git a/QgisModelBaker/ui/tid_configurator_panel.ui b/QgisModelBaker/ui/tid_configurator_panel.ui index 617e5a10c..6bbe5c264 100644 --- a/QgisModelBaker/ui/tid_configurator_panel.ui +++ b/QgisModelBaker/ui/tid_configurator_panel.ui @@ -6,7 +6,7 @@ 0 0 - 800 + 797 443 @@ -14,6 +14,18 @@ Select Files + + 0 + + + 0 + + + 0 + + + 0 + diff --git a/QgisModelBaker/ui/tid_manager.ui b/QgisModelBaker/ui/tid_manager.ui index 2b482e284..1cc68744d 100644 --- a/QgisModelBaker/ui/tid_manager.ui +++ b/QgisModelBaker/ui/tid_manager.ui @@ -7,23 +7,37 @@ 0 0 800 - 705 + 604 TID (OID) Manager - - + + + + 6 + + - + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + Define the default expression values used for the t_ili_tid field in the attribute forms according to the OID definition from the INTERLIS model. + + + true + + + diff --git a/QgisModelBaker/ui/workflow_wizard/tid_configuration.ui b/QgisModelBaker/ui/workflow_wizard/tid_configuration.ui index d537e32c6..a0ec7bef8 100644 --- a/QgisModelBaker/ui/workflow_wizard/tid_configuration.ui +++ b/QgisModelBaker/ui/workflow_wizard/tid_configuration.ui @@ -14,7 +14,7 @@ Select Files - + @@ -29,7 +29,7 @@ - <html><head/><body><p>Configure the OIDs (<span style=" font-family:'monospace';">t_ili_tid</span>) default values of the layers in the generated project.</p></body></html> + <html><head/><body><p>Define the default expression values used for the t_ili_tid field in the attribute forms according to the OID definition from the INTERLIS model.</p></body></html> Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop @@ -39,30 +39,21 @@ - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - + 0 - + + + + QLayout::SetMaximumSize + + + + Qt::Horizontal @@ -75,7 +66,7 @@ - + Set configuration From a065b1ea1ab8393b47bebccaf93a134813150f39 Mon Sep 17 00:00:00 2001 From: signedav Date: Thu, 23 Nov 2023 13:18:17 +0100 Subject: [PATCH 13/30] Documentation for TID Generation --- docs/assets/oid_physical_data.png | Bin 0 -> 14680 bytes docs/assets/oid_tid_manager.png | Bin 0 -> 177346 bytes .../workflow_wizard_tid_generator_page.png | Bin 0 -> 235560 bytes docs/background_info/oid_tid_generator.md | 145 ++++++++++++++++++ docs/user_guide/import_workflow.md | 25 ++- mkdocs.yml | 3 + 6 files changed, 166 insertions(+), 7 deletions(-) create mode 100644 docs/assets/oid_physical_data.png create mode 100644 docs/assets/oid_tid_manager.png create mode 100644 docs/assets/workflow_wizard_tid_generator_page.png create mode 100644 docs/background_info/oid_tid_generator.md diff --git a/docs/assets/oid_physical_data.png b/docs/assets/oid_physical_data.png new file mode 100644 index 0000000000000000000000000000000000000000..9c0a80b15ab7a1a4f5338b237255768505df90ec GIT binary patch literal 14680 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 fKM+0*S$8QoMvcgrr^nd?9YenT+ literal 0 HcmV?d00001 diff --git a/docs/assets/oid_tid_manager.png b/docs/assets/oid_tid_manager.png new file mode 100644 index 0000000000000000000000000000000000000000..fb077bcd900139053eafc4c00cd27f8c0699ea85 GIT binary patch literal 177346 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

H|JzPq+&u3q^Z+l$CEpNy&GWfGBr^Lzs!ly2oSR z7fn8EHBMv$BFjeh~r zQR#I@j?Goi(Ab)*vAcqnX}{mPM*83_BP zG_X4ro6kB^eu4Ue?4@*Fn7;)UX-~-}uKPvZO2^wDD+WI>hq)~>xQ-B;!!t~7t%N0o zxYE)G6%EnDGPg6`Jb=2gh!~GmeAbeyZRZem(VLQHD=o!#CrkCrW6hDC!K{v|GUoSb zc??~Rjg7-^=HU_K{K4VjgTu7zw6({VhHct=rpq;R?%%&th*AGRPmT?KJXHGpo}CTF zkTWybuEK6eiZLR32%rCND7e;B1Go`uE?j39pkXJtOKGE99zWLE&Y+irP}uEyG&vT^ zt7k%1+Rw1}7jV6q>g?>)E8eJAHsgswgqX74A}^Ju4O{a^I0^R)aLuXV#H&JWM5 zI4=9UUOEV#)@x6rpy>C8c)gYMt_{Mesi%Cz>F!&FJwX3p+~EFy#XfN!LUI<%zv}}| zRLdZn6X+t(h^XeKc`+3c5)QuXP1&7--1DUTRnEqV@;;pbW-RQm@bm zAMu2a^nZmp|McjyTxAA*L~5yEeW@E--DnWMM+1ZB%PLH@V`AbW`q6$q8V0i>JK4eP z2Q0J~Xa1}2TE;TBm#nv3H8V)y{fG*6OiXX8<=0Jggs)7(G5-TCz^qcurkIl^X9OE( znw0)oLa-LEWnUXK72p2m-wkA(2FuS9-ff_u5Lbc zcLLA<+-;qvVe#Y2r!&dj!L8Cqz`Ez5Dw4-^Q&wBCZ1UsZ)?A~l;|I4X^otjAM*d@Z zo0j?DiD0985bC2n;t$H7(^c3_Nj3nzUwaplj~3u)EHgtF+3KRWmPxQwHXeDQ2g8g9 zjp|>zzusho`2NQ@7~h`#&q3ECGafpoG&N6K5D3J-uOHLTp%9Qg0Ci>{^9rPttYCnoT;}hrthKyu@Ga&@a3-yq(b^ic)r;^Y zw8LmZ*&O838`S#Ebyd#XJ9Me^Dr?e(`8b0x0Xs_2g*HRd+cz*ul z@7+|Cg}sBBiS>bhFCaNUZ_=hERd0Ea0Rc$r!by5B%<7^$eEH@HKEgwjmQWBc6E*bv F{{V8I!(ada literal 0 HcmV?d00001 diff --git a/docs/background_info/oid_tid_generator.md b/docs/background_info/oid_tid_generator.md new file mode 100644 index 000000000..84bba2b02 --- /dev/null +++ b/docs/background_info/oid_tid_generator.md @@ -0,0 +1,145 @@ +## OID, TID, BID, t_ili_tid, tid... Sorry, what? + +Often the models definition requires a cross-system unique identificator. The so called **OID**. + +``` +[...] + TOPIC Constructions = + BASKET OID AS INTERLIS.UUIDOID; + OID AS INTERLIS.STANDARDOID; +[...] +``` + +### In the data transferfile (`xtf`-file)... + +... the OID of the *basket* is named `BID` + +... the OID of the *objects* is named `TID` + +```xml + + Rue des Fleures1 + Rue des Fleures2 +``` + +### In the physical schema... + +... those OIDs are written to the column `t_ili_tid`. + +... while the `t_id` column contains just a ***schema-internal*** sequence used for foreign keys etc. Those `t_id`s are ***not*** the cross-system unique identificator. + +![oid physical data](../assets/oid_physical_data.png) + +!!! Note + There are situations when that you can find the `t_id` as `TID` in your data. It's when there is no `t_ili_tid` available ili2db could use. But be aware those `TID`s are not stable then. + +### OID Domains + +There are different types of OID domains. In Model Baker we try to set default values that fits into the definition. + +- UUIDOID +- I32OID +- STANDARDOID +- ANYOID +- User defined OID + +#### `UUIDOID` + +It's defined as `OID TEXT*36` and needs to be an [Universally Unique Identifier (UUID)](https://datatracker.ietf.org/doc/html/rfc4122). While the probability that a UUID will be duplicated is not zero, it is generally considered close enough to zero to be negligible. + +In the QGIS Project the default value expression for `t_ili_tid` is therefore this: +``` +uuid('WithoutBraces') +``` + +#### `I32OID` + +It's defined as `OID 0 .. 2147483647` what means it needs to be a positive 4 byte integer value. + +As a counter we take the one provided by the `t_id` sequence. + +In the QGIS Project the default value expression for `t_ili_tid` is therefore this: + +``` +t_id +``` + +#### `STANDARDOID` + +It's defined as `OID TEXT*16` and follows some specific requirements. + +It requireds an 8 char prefix and 8 char postfix: + +- **Prefix (2 + 6 chars):** Country identifier + a *global identification part* assigned once by the [official authority](https://www.interlis.ch/dienste/oid-bestellen) + +- **Postfix (8 chars):** Sequence (numeric or alphanumeric) of your system as *local identification part* + +Model Baker does not know what your *global identification part* is, why it's important that you edit this part of the expression. + +As *local identification part* Model Baker suggests the couter provided by the `t_id` sequence. + +In the QGIS Project the default value expression for `t_ili_tid` is therefore this: + +``` +'ch100000' || lpad( T_Id, 8, 0 ) +``` + +#### `ANYOID` + +The `ANYOID` does not define a format of the OID but just that an OID needs to be defined in all the extended models. This domain is only used on topics that needs to be extended. There this sollution has some [limitations](#limitations). + +#### User and not defined OIDs + +For user defined OIDs or when OIDs are required but not defined, Model Baker tries to suggest something reasonable. + +If there is no definition with OID AS, ili2db assumes TEXT and therefore they need to fulfill the rules of the XML-ID-type. This means the **first character** must be a **letter or underscore**, followed by letters, numbers, dots, minus signs, underscores; no colons (!), see [www.w3.org/TR/REC-xml](http://www.w3.org/TR/REC-xml). + +In the QGIS Project the default value expression for `t_ili_tid` is therefore this: + +``` +'_' || uuid('WithoutBraces') +``` + +#### Summary +| OID domain | Suggested default value expression | +|---|---| +| INTERLIS.UUIDOID | `uuid('WithoutBraces')` | +| INTERLIS.I32OID | `t_id` | +| INTERLIS.STANDARDOID | `'ch100000' \|\| lpad( t_id, 8, 0 )` | +| INTERLIS.ANYOID | `'_' \|\| uuid('WithoutBraces')` | +| City_V1.TypeID | `'_' \|\| uuid('WithoutBraces')` | +| not defined | `'_' \|\| uuid('WithoutBraces')` | + +### TID (OID) Manager + +Since the user have to be able to edit those values, they are provided in the GUI. + +Additionally to the [page implemented in the wizard](../../user_guide/import_workflow/#tid_(oid)_values) the configuration of the TIDs can be made on existing QGIS Projects. + +Find the **TID (OID) Manager** via the *Database > Model Baker* menu. + +![tid manager](../assets/oid_tid_manager.png) + +Here you can use the QGIS Expression Dialog to edit the default value expression for the `t_ili_tid` field of each layer. + +If you want to have the `t_ili_tid` exposed to the form, you can select ***Show***. + +If you need a counter in the expressions, you can use the `t_id` field, that has a schema-wide sequence counting up. This sequence can be reset as well by the user, but be carefull not to set it lower than already existing `t_id`s in your project. See below the [limitations](#limitations). + +### Limitations + +This sollution covers a lot, but not everything. + +#### ANYOID + +If a class is designed in a topic with an OID definition `ANYOID` and it's extended in multiple other topics with other OID definitions, we cannot say what should be the default value, since it could divert depending in what basket you work. + +#### OIDs on another system + +When the OIDs are not UUIDs but e.g. `STANDARDOID`s instead, it's not possible to know in a system, wheter in other systems the same OIDs are generated. This means it's in the responsibility of the user to set the expressions (and the counters) in a way, that they don't conflict with OIDS of object generated some where else. + +#### T_Id conflicts + +When resetting the T_Id (Sequence) value one needs to be careful, because it's used for the technical sequence id (used for foreign keys etc.) as well. This means it should not conflict with the `t_id`s of objects already existing. That's why it should only be decreased if you really know what you are doing. + +The conflicts are handled differently depending on the database system. On PostgreSQL you would encounter a duplicate key violation while on GeoPackage it would take the next available autogenerated t_id, but since it's not known on creating the TID (OID) it would break those values (e.g. write to it `ch100000Autogene`.) diff --git a/docs/user_guide/import_workflow.md b/docs/user_guide/import_workflow.md index 586ee4957..91b874170 100644 --- a/docs/user_guide/import_workflow.md +++ b/docs/user_guide/import_workflow.md @@ -138,7 +138,19 @@ Then, with a simple click you generate your project. All the toppings received f ![baked project](../assets/generated_project.png) -Bon appetit! +### TID (OID) Values + +Often the models definition requires unique and cross-system identificators. So called OIDs or TIDs, what are represented in the physical database as the `t_ili_tid` column. Find a clear definition and more details about them in the [corresponding chapter](../../background_info/oid_tid_generator). + +On creating a QGIS Project with Model Baker, there are default default value expression generated for the `t_ili_tid` field on the attribute form. But often those default value expressions need to be edited by the user (like e.g. the prefix in the `STANDARDOID`). + +![tid generator](../assets/workflow_wizard_tid_generator_page.png) + +Here you can use the QGIS Expression Dialog to edit the default value expression for the `t_ili_tid` field of each layer. + +If you need a counter in the expressions, you can use the `t_id` field, that has a schema-wide sequence counting up. This sequence can be reset as well by the user, but be carefull not to set it lower than already existing `t_id`s in your project. + +This settings can be made on an existing QGIS Project as well. Find the [TID (OID) Manager](../../background_info/oid_tid_generator/#tid_(oid)_manager) via the *Database > Model Baker* menu. ### Optimize QGIS Project if extended @@ -147,16 +159,15 @@ In case you gereate your project for an extended model structure that was create ![project generation](../assets/workflow_wizard_project_generation.png) Choose your optimization strategy in the checkbox: -- ***Hide unused base class layers*** - Base class layers with same named extensions will be *hidden* and and base class layers with multiple extensions *as well*. Except if the extension is in the *same model*, then it's will *not* be *hidden* but *renamed*. +- ***Hide unused base class layers*** + Base class layers with same named extensions will be *hidden* and and base class layers with multiple extensions *as well*. Except if the extension is in the *same model*, then it's will *not* be *hidden* but *renamed*. - Relations of hidden layers will *not* be *created* and with them *no* widgets + Relations of hidden layers will *not* be *created* and with them *no* widgets - ***Group unused base class layers*** + Base class layers with same named extensions will be *collected in a group* and base class layers with multiple extensions *as well*. Except if the extension is in the *same model*, then it's will *not* be *grouped* but *renamed*. - Base class layers with same named extensions will be *collected in a group* and base class layers with multiple extensions *as well*. Except if the extension is in the *same model*, then it's will *not* be *grouped* but *renamed*. - - Relations of grouped layers will be *created* but the widgets are *not applied* to the form. + Relations of grouped layers will be *created* but the widgets are *not applied* to the form. For more information about the optimization of extended models, see the [corresponding chapter](../../background_info/extended_models_optimization). diff --git a/mkdocs.yml b/mkdocs.yml index cbd7810bb..dd35b19f1 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -44,6 +44,7 @@ nav: - Tipps & Tricks: - Repositories: background_info/repositories.md - Basket and Dataset Handling: background_info/basket_handling.md + - OIDs and TID Generator: background_info/oid_tid_generator.md - UsabILIty Hub: - Model Baker Integration: background_info/usabilityhub/modelbaker_integration.md - Technical Concept: background_info/usabilityhub/technical_concept.md @@ -78,6 +79,8 @@ plugins: Plugin Configuration: Plugin Konfiguration Repositories: Repositories Basket and Dataset Handling: Dataset und Basket Handling + OIDs and TID Generator: OID und TID Generator + Optimized Projects for Extended Models : Optimierte Projekte für erweiterte Modelle Model Baker Integration: Model Baker Integration Technical Concept: Technisches Konzept Catalogues and their special cases: Kataloge und ihre Spezialfälle From 3300f61467fd56ff9adbba5d9ab0ca6df9a61fa8 Mon Sep 17 00:00:00 2001 From: signedav Date: Thu, 23 Nov 2023 13:40:51 +0100 Subject: [PATCH 14/30] fix typos --- docs/background_info/oid_tid_generator.md | 12 ++++++------ docs/user_guide/import_workflow.md | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/background_info/oid_tid_generator.md b/docs/background_info/oid_tid_generator.md index 84bba2b02..10afd1824 100644 --- a/docs/background_info/oid_tid_generator.md +++ b/docs/background_info/oid_tid_generator.md @@ -88,9 +88,9 @@ In the QGIS Project the default value expression for `t_ili_tid` is therefore th The `ANYOID` does not define a format of the OID but just that an OID needs to be defined in all the extended models. This domain is only used on topics that needs to be extended. There this sollution has some [limitations](#limitations). -#### User and not defined OIDs +#### User defined OIDs and not defined OIDs -For user defined OIDs or when OIDs are required but not defined, Model Baker tries to suggest something reasonable. +For user defined OIDs or when OIDs are not defined, Model Baker tries to suggest something reasonable. If there is no definition with OID AS, ili2db assumes TEXT and therefore they need to fulfill the rules of the XML-ID-type. This means the **first character** must be a **letter or underscore**, followed by letters, numbers, dots, minus signs, underscores; no colons (!), see [www.w3.org/TR/REC-xml](http://www.w3.org/TR/REC-xml). @@ -103,10 +103,10 @@ In the QGIS Project the default value expression for `t_ili_tid` is therefore th #### Summary | OID domain | Suggested default value expression | |---|---| -| INTERLIS.UUIDOID | `uuid('WithoutBraces')` | -| INTERLIS.I32OID | `t_id` | -| INTERLIS.STANDARDOID | `'ch100000' \|\| lpad( t_id, 8, 0 )` | -| INTERLIS.ANYOID | `'_' \|\| uuid('WithoutBraces')` | +| INTERLIS.UUIDOID | `uuid('WithoutBraces')` | +| INTERLIS.I32OID | `t_id` | +| INTERLIS.STANDARDOID | `'ch100000' \|\| lpad( t_id, 8, 0 )` | +| INTERLIS.ANYOID | `'_' \|\| uuid('WithoutBraces')` | | City_V1.TypeID | `'_' \|\| uuid('WithoutBraces')` | | not defined | `'_' \|\| uuid('WithoutBraces')` | diff --git a/docs/user_guide/import_workflow.md b/docs/user_guide/import_workflow.md index 91b874170..8f9484703 100644 --- a/docs/user_guide/import_workflow.md +++ b/docs/user_guide/import_workflow.md @@ -140,7 +140,7 @@ Then, with a simple click you generate your project. All the toppings received f ### TID (OID) Values -Often the models definition requires unique and cross-system identificators. So called OIDs or TIDs, what are represented in the physical database as the `t_ili_tid` column. Find a clear definition and more details about them in the [corresponding chapter](../../background_info/oid_tid_generator). +Often the models definition requires cross-system unique identificators. So called OIDs or TIDs, what are represented in the physical database as the `t_ili_tid` column. Find a clear definition and more details about them in the [corresponding chapter](../../background_info/oid_tid_generator). On creating a QGIS Project with Model Baker, there are default default value expression generated for the `t_ili_tid` field on the attribute form. But often those default value expressions need to be edited by the user (like e.g. the prefix in the `STANDARDOID`). From a8cee7e62c1f2449624bf5295ddc0aafb8221107 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 08:42:36 +0100 Subject: [PATCH 15/30] Update docs/user_guide/import_workflow.md Co-authored-by: Matthias Kuhn --- docs/user_guide/import_workflow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user_guide/import_workflow.md b/docs/user_guide/import_workflow.md index 8f9484703..9634ea1db 100644 --- a/docs/user_guide/import_workflow.md +++ b/docs/user_guide/import_workflow.md @@ -148,7 +148,7 @@ On creating a QGIS Project with Model Baker, there are default default value exp Here you can use the QGIS Expression Dialog to edit the default value expression for the `t_ili_tid` field of each layer. -If you need a counter in the expressions, you can use the `t_id` field, that has a schema-wide sequence counting up. This sequence can be reset as well by the user, but be carefull not to set it lower than already existing `t_id`s in your project. +If you need a counter in the expressions, you can use the `t_id` field, that has a schema-wide sequence counting up. This sequence can be reset as well by the user, but be careful not to set it lower than already existing `t_id`s in your project. This settings can be made on an existing QGIS Project as well. Find the [TID (OID) Manager](../../background_info/oid_tid_generator/#tid_(oid)_manager) via the *Database > Model Baker* menu. From a7ea3a9c165e8783114e13142c4a4693dc682adf Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 08:43:02 +0100 Subject: [PATCH 16/30] Update docs/background_info/oid_tid_generator.md Co-authored-by: Matthias Kuhn --- docs/background_info/oid_tid_generator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/background_info/oid_tid_generator.md b/docs/background_info/oid_tid_generator.md index 10afd1824..5401ede5d 100644 --- a/docs/background_info/oid_tid_generator.md +++ b/docs/background_info/oid_tid_generator.md @@ -128,7 +128,7 @@ If you need a counter in the expressions, you can use the `t_id` field, that has ### Limitations -This sollution covers a lot, but not everything. +This solution covers a lot, but not everything. #### ANYOID From 7ffa813f64664260977e9af75dd9b0a9814f89cb Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 08:43:08 +0100 Subject: [PATCH 17/30] Update docs/background_info/oid_tid_generator.md Co-authored-by: Matthias Kuhn --- docs/background_info/oid_tid_generator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/background_info/oid_tid_generator.md b/docs/background_info/oid_tid_generator.md index 5401ede5d..edd92bcac 100644 --- a/docs/background_info/oid_tid_generator.md +++ b/docs/background_info/oid_tid_generator.md @@ -124,7 +124,7 @@ Here you can use the QGIS Expression Dialog to edit the default value expression If you want to have the `t_ili_tid` exposed to the form, you can select ***Show***. -If you need a counter in the expressions, you can use the `t_id` field, that has a schema-wide sequence counting up. This sequence can be reset as well by the user, but be carefull not to set it lower than already existing `t_id`s in your project. See below the [limitations](#limitations). +If you need a counter in the expressions, you can use the `t_id` field, that has a schema-wide sequence counting up. This sequence can be reset as well by the user, but be careful not to set it lower than already existing `t_id`s in your project. See below the [limitations](#limitations). ### Limitations From b9ea04daa7daf775a652c576a4bcb357cb7e777e Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 08:43:16 +0100 Subject: [PATCH 18/30] Update docs/background_info/oid_tid_generator.md Co-authored-by: Matthias Kuhn --- docs/background_info/oid_tid_generator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/background_info/oid_tid_generator.md b/docs/background_info/oid_tid_generator.md index edd92bcac..a450e15bb 100644 --- a/docs/background_info/oid_tid_generator.md +++ b/docs/background_info/oid_tid_generator.md @@ -35,7 +35,7 @@ Often the models definition requires a cross-system unique identificator. The so ### OID Domains -There are different types of OID domains. In Model Baker we try to set default values that fits into the definition. +There are different types of OID domains. In Model Baker we try to set default values that fit into the definition. - UUIDOID - I32OID From cb32d9bb632ded9817785feefe11d2d8030eec1a Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 08:43:23 +0100 Subject: [PATCH 19/30] Update docs/background_info/oid_tid_generator.md Co-authored-by: Matthias Kuhn --- docs/background_info/oid_tid_generator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/background_info/oid_tid_generator.md b/docs/background_info/oid_tid_generator.md index a450e15bb..593ae16e3 100644 --- a/docs/background_info/oid_tid_generator.md +++ b/docs/background_info/oid_tid_generator.md @@ -68,7 +68,7 @@ t_id It's defined as `OID TEXT*16` and follows some specific requirements. -It requireds an 8 char prefix and 8 char postfix: +It requires an 8 char prefix and 8 char postfix: - **Prefix (2 + 6 chars):** Country identifier + a *global identification part* assigned once by the [official authority](https://www.interlis.ch/dienste/oid-bestellen) From 9377aa5a157fe48eee7c31cec2893a33753f975b Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 08:43:36 +0100 Subject: [PATCH 20/30] Update docs/background_info/oid_tid_generator.md Co-authored-by: Matthias Kuhn --- docs/background_info/oid_tid_generator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/background_info/oid_tid_generator.md b/docs/background_info/oid_tid_generator.md index 593ae16e3..22c85dac9 100644 --- a/docs/background_info/oid_tid_generator.md +++ b/docs/background_info/oid_tid_generator.md @@ -70,7 +70,7 @@ It's defined as `OID TEXT*16` and follows some specific requirements. It requires an 8 char prefix and 8 char postfix: -- **Prefix (2 + 6 chars):** Country identifier + a *global identification part* assigned once by the [official authority](https://www.interlis.ch/dienste/oid-bestellen) +- **Prefix (2 + 6 chars):** Country identifier + a *global identification part*. The global identification part can be ordered from the [official authority](https://www.interlis.ch/dienste/oid-bestellen) - **Postfix (8 chars):** Sequence (numeric or alphanumeric) of your system as *local identification part* From 762971ceb132f01099f3f55d9244c0dcbb63a5a4 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 08:53:28 +0100 Subject: [PATCH 21/30] Update docs/background_info/oid_tid_generator.md Co-authored-by: Matthias Kuhn --- docs/background_info/oid_tid_generator.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/background_info/oid_tid_generator.md b/docs/background_info/oid_tid_generator.md index 22c85dac9..d76f37bea 100644 --- a/docs/background_info/oid_tid_generator.md +++ b/docs/background_info/oid_tid_generator.md @@ -84,6 +84,7 @@ In the QGIS Project the default value expression for `t_ili_tid` is therefore th 'ch100000' || lpad( T_Id, 8, 0 ) ``` +assuming `ch` as the country code and `100000` as the registered OID prefix. #### `ANYOID` The `ANYOID` does not define a format of the OID but just that an OID needs to be defined in all the extended models. This domain is only used on topics that needs to be extended. There this sollution has some [limitations](#limitations). From 6b5a2a1be1b66542bb7e674e91e8c7fc051df156 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 08:57:00 +0100 Subject: [PATCH 22/30] Update docs/background_info/oid_tid_generator.md --- docs/background_info/oid_tid_generator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/background_info/oid_tid_generator.md b/docs/background_info/oid_tid_generator.md index d76f37bea..a5554dbd4 100644 --- a/docs/background_info/oid_tid_generator.md +++ b/docs/background_info/oid_tid_generator.md @@ -76,7 +76,7 @@ It requires an 8 char prefix and 8 char postfix: Model Baker does not know what your *global identification part* is, why it's important that you edit this part of the expression. -As *local identification part* Model Baker suggests the couter provided by the `t_id` sequence. +As *local identification part* Model Baker suggests the counter provided by the `t_id` sequence. In the QGIS Project the default value expression for `t_ili_tid` is therefore this: From 3d2894e34cd30acbb966e97b589a48d96813d3c3 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 08:58:09 +0100 Subject: [PATCH 23/30] Update docs/user_guide/import_workflow.md --- docs/user_guide/import_workflow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/user_guide/import_workflow.md b/docs/user_guide/import_workflow.md index 9634ea1db..d0f3dbcf3 100644 --- a/docs/user_guide/import_workflow.md +++ b/docs/user_guide/import_workflow.md @@ -142,7 +142,7 @@ Then, with a simple click you generate your project. All the toppings received f Often the models definition requires cross-system unique identificators. So called OIDs or TIDs, what are represented in the physical database as the `t_ili_tid` column. Find a clear definition and more details about them in the [corresponding chapter](../../background_info/oid_tid_generator). -On creating a QGIS Project with Model Baker, there are default default value expression generated for the `t_ili_tid` field on the attribute form. But often those default value expressions need to be edited by the user (like e.g. the prefix in the `STANDARDOID`). +On creating a QGIS Project with Model Baker, there are preset default value expression generated for the `t_ili_tid` field on the attribute form. But often those default value expressions need to be edited by the user (like e.g. the prefix in the `STANDARDOID`). ![tid generator](../assets/workflow_wizard_tid_generator_page.png) From 64333f78a2dd0842ab6d3c3b7623f21b1ba0d4f7 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 08:59:06 +0100 Subject: [PATCH 24/30] Update docs/background_info/oid_tid_generator.md Co-authored-by: Matthias Kuhn --- docs/background_info/oid_tid_generator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/background_info/oid_tid_generator.md b/docs/background_info/oid_tid_generator.md index a5554dbd4..0adbe9912 100644 --- a/docs/background_info/oid_tid_generator.md +++ b/docs/background_info/oid_tid_generator.md @@ -87,7 +87,7 @@ In the QGIS Project the default value expression for `t_ili_tid` is therefore th assuming `ch` as the country code and `100000` as the registered OID prefix. #### `ANYOID` -The `ANYOID` does not define a format of the OID but just that an OID needs to be defined in all the extended models. This domain is only used on topics that needs to be extended. There this sollution has some [limitations](#limitations). +The `ANYOID` does not define a format of the OID but just that an OID needs to be defined in all the extended models. This domain is only used on topics that need to be extended. This solution has some [limitations](#limitations). #### User defined OIDs and not defined OIDs From 840f76d8202e340796dc4fac2838691e233261fa Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 09:02:31 +0100 Subject: [PATCH 25/30] Update docs/background_info/oid_tid_generator.md Co-authored-by: Matthias Kuhn --- docs/background_info/oid_tid_generator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/background_info/oid_tid_generator.md b/docs/background_info/oid_tid_generator.md index 0adbe9912..b37d28157 100644 --- a/docs/background_info/oid_tid_generator.md +++ b/docs/background_info/oid_tid_generator.md @@ -113,7 +113,7 @@ In the QGIS Project the default value expression for `t_ili_tid` is therefore th ### TID (OID) Manager -Since the user have to be able to edit those values, they are provided in the GUI. +Since the user has to be able to edit those values, they are provided in the GUI. Additionally to the [page implemented in the wizard](../../user_guide/import_workflow/#tid_(oid)_values) the configuration of the TIDs can be made on existing QGIS Projects. From f7642b686a8aa2d49cabd3b40f1c2ae378128ca5 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 09:08:31 +0100 Subject: [PATCH 26/30] remove comment --- docs/background_info/oid_tid_generator.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/background_info/oid_tid_generator.md b/docs/background_info/oid_tid_generator.md index b37d28157..cb134c3d3 100644 --- a/docs/background_info/oid_tid_generator.md +++ b/docs/background_info/oid_tid_generator.md @@ -84,7 +84,6 @@ In the QGIS Project the default value expression for `t_ili_tid` is therefore th 'ch100000' || lpad( T_Id, 8, 0 ) ``` -assuming `ch` as the country code and `100000` as the registered OID prefix. #### `ANYOID` The `ANYOID` does not define a format of the OID but just that an OID needs to be defined in all the extended models. This domain is only used on topics that need to be extended. This solution has some [limitations](#limitations). From f23f7513b6e756579a9840a838036b0fc78e4ec7 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 10:15:20 +0100 Subject: [PATCH 27/30] icon --- .../gui/panel/tid_configurator_panel.py | 34 ++++++++++--------- .../images/QgisModelBaker-tidmanager-icon.svg | 2 ++ QgisModelBaker/qgismodelbaker.py | 4 +++ 3 files changed, 24 insertions(+), 16 deletions(-) create mode 100644 QgisModelBaker/images/QgisModelBaker-tidmanager-icon.svg diff --git a/QgisModelBaker/gui/panel/tid_configurator_panel.py b/QgisModelBaker/gui/panel/tid_configurator_panel.py index 8926ab7cd..9ea585b3d 100644 --- a/QgisModelBaker/gui/panel/tid_configurator_panel.py +++ b/QgisModelBaker/gui/panel/tid_configurator_panel.py @@ -51,22 +51,24 @@ def __init__(self, parent=None): def setup_dialog(self, qgis_project, db_connector=None): self.qgis_project = qgis_project - if db_connector: - self.db_connector = db_connector - else: - # getting the data source of the first layer in the layer tree - first_tree_layer = qgis_project.layerTreeRoot().findLayers()[0] - if first_tree_layer: - configuration = Ili2DbCommandConfiguration() - source_provider = first_tree_layer.layer().dataProvider() - valid, mode = db_utils.get_configuration_from_sourceprovider( - source_provider, configuration - ) - if valid: - configuration.tool = mode - self.db_connector = db_utils.get_db_connector(configuration) - - self._reset_tid_configuration() + if self.qgis_project: + if db_connector: + self.db_connector = db_connector + else: + # getting the data source of the first layer in the layer tree + layers = qgis_project.layerTreeRoot().findLayers() + if layers: + first_tree_layer = layers[0] + configuration = Ili2DbCommandConfiguration() + source_provider = first_tree_layer.layer().dataProvider() + valid, mode = db_utils.get_configuration_from_sourceprovider( + source_provider, configuration + ) + if valid: + configuration.tool = mode + self.db_connector = db_utils.get_db_connector(configuration) + + self._reset_tid_configuration() def _reset_tid_configuration(self): self.layer_tids_panel.load_tid_config(self.qgis_project) diff --git a/QgisModelBaker/images/QgisModelBaker-tidmanager-icon.svg b/QgisModelBaker/images/QgisModelBaker-tidmanager-icon.svg new file mode 100644 index 000000000..f98a61e85 --- /dev/null +++ b/QgisModelBaker/images/QgisModelBaker-tidmanager-icon.svg @@ -0,0 +1,2 @@ + +image/svg+xml123ab diff --git a/QgisModelBaker/qgismodelbaker.py b/QgisModelBaker/qgismodelbaker.py index d1d717012..976b74d7b 100644 --- a/QgisModelBaker/qgismodelbaker.py +++ b/QgisModelBaker/qgismodelbaker.py @@ -257,6 +257,9 @@ def unload(self): self.iface.removePluginDatabaseMenu( self.tr("Model Baker"), self.__datasetmanager_action ) + self.iface.removePluginDatabaseMenu( + self.tr("Model Baker"), self.__tidmanager_action + ) self.iface.removePluginDatabaseMenu( self.tr("Model Baker"), self.__validate_action ) @@ -275,6 +278,7 @@ def unload(self): ) del self.__workflow_wizard_action del self.__datasetmanager_action + del self.__tidmanager_action del self.__validate_action del self.__configure_action del self.__help_action From 5f162b04520695d4a48b3dcd5b0afbdf0b69f259 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 10:32:26 +0100 Subject: [PATCH 28/30] Update docs/background_info/oid_tid_generator.md --- docs/background_info/oid_tid_generator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/background_info/oid_tid_generator.md b/docs/background_info/oid_tid_generator.md index cb134c3d3..768b2d211 100644 --- a/docs/background_info/oid_tid_generator.md +++ b/docs/background_info/oid_tid_generator.md @@ -74,7 +74,7 @@ It requires an 8 char prefix and 8 char postfix: - **Postfix (8 chars):** Sequence (numeric or alphanumeric) of your system as *local identification part* -Model Baker does not know what your *global identification part* is, why it's important that you edit this part of the expression. +Model Baker does not know what your *global identification part* is and uses a sample-prefix `ch100000`. It's important that replace this part with your own prefix. As *local identification part* Model Baker suggests the counter provided by the `t_id` sequence. From dd7fc02da654cc009e1bd1a21cff4c1656b05f22 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 12:31:47 +0100 Subject: [PATCH 29/30] change ch100000 to %change% --- docs/background_info/oid_tid_generator.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/background_info/oid_tid_generator.md b/docs/background_info/oid_tid_generator.md index 768b2d211..9d91ee2e4 100644 --- a/docs/background_info/oid_tid_generator.md +++ b/docs/background_info/oid_tid_generator.md @@ -74,14 +74,14 @@ It requires an 8 char prefix and 8 char postfix: - **Postfix (8 chars):** Sequence (numeric or alphanumeric) of your system as *local identification part* -Model Baker does not know what your *global identification part* is and uses a sample-prefix `ch100000`. It's important that replace this part with your own prefix. +Model Baker does not know what your *global identification part* is and uses a sample-prefix `%change%`. It's important that replace this part with your own prefix. As *local identification part* Model Baker suggests the counter provided by the `t_id` sequence. In the QGIS Project the default value expression for `t_ili_tid` is therefore this: ``` -'ch100000' || lpad( T_Id, 8, 0 ) +'%change%' || lpad( T_Id, 8, 0 ) ``` #### `ANYOID` @@ -105,7 +105,7 @@ In the QGIS Project the default value expression for `t_ili_tid` is therefore th |---|---| | INTERLIS.UUIDOID | `uuid('WithoutBraces')` | | INTERLIS.I32OID | `t_id` | -| INTERLIS.STANDARDOID | `'ch100000' \|\| lpad( t_id, 8, 0 )` | +| INTERLIS.STANDARDOID | `'%change%' \|\| lpad( t_id, 8, 0 )` | | INTERLIS.ANYOID | `'_' \|\| uuid('WithoutBraces')` | | City_V1.TypeID | `'_' \|\| uuid('WithoutBraces')` | | not defined | `'_' \|\| uuid('WithoutBraces')` | @@ -142,4 +142,4 @@ When the OIDs are not UUIDs but e.g. `STANDARDOID`s instead, it's not possible t When resetting the T_Id (Sequence) value one needs to be careful, because it's used for the technical sequence id (used for foreign keys etc.) as well. This means it should not conflict with the `t_id`s of objects already existing. That's why it should only be decreased if you really know what you are doing. -The conflicts are handled differently depending on the database system. On PostgreSQL you would encounter a duplicate key violation while on GeoPackage it would take the next available autogenerated t_id, but since it's not known on creating the TID (OID) it would break those values (e.g. write to it `ch100000Autogene`.) +The conflicts are handled differently depending on the database system. On PostgreSQL you would encounter a duplicate key violation while on GeoPackage it would take the next available autogenerated t_id, but since it's not known on creating the TID (OID) it would break those values (e.g. write to it `chMBakerAutogene` instead of e.g. `chMBaker00000042`.) From 24a9124cd214413695bd87e3bb56a991437257c6 Mon Sep 17 00:00:00 2001 From: signedav Date: Fri, 24 Nov 2023 12:32:19 +0100 Subject: [PATCH 30/30] wording --- docs/background_info/oid_tid_generator.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/background_info/oid_tid_generator.md b/docs/background_info/oid_tid_generator.md index 9d91ee2e4..4cd118567 100644 --- a/docs/background_info/oid_tid_generator.md +++ b/docs/background_info/oid_tid_generator.md @@ -74,7 +74,7 @@ It requires an 8 char prefix and 8 char postfix: - **Postfix (8 chars):** Sequence (numeric or alphanumeric) of your system as *local identification part* -Model Baker does not know what your *global identification part* is and uses a sample-prefix `%change%`. It's important that replace this part with your own prefix. +Model Baker does not know what your *global identification part* is and uses a placeholder-prefix `%change%`. It's important that replace this part with your own prefix. As *local identification part* Model Baker suggests the counter provided by the `t_id` sequence.