From 0f8ec58f941be045ebb370a44ecfa5db78bb62e3 Mon Sep 17 00:00:00 2001 From: smaspons Date: Fri, 6 Sep 2024 08:49:10 +0200 Subject: [PATCH 01/26] chore: upgrade metadata version --- metadata.txt | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/metadata.txt b/metadata.txt index 07c663c17..56e304b2e 100644 --- a/metadata.txt +++ b/metadata.txt @@ -4,21 +4,10 @@ qgisMinimumVersion=3.22 qgisMaximumVersion=3.38 description=Plugin to manage water networks (water supply, sewerage and urban drainage) using QGIS and PostGIS-PostgreSQL about=Disclaimer: This plugin is released using the open source GNU-GPL3 license. Although a reasonable effort has been made to assure that the results obtained are correct, some of the capabilities provided by Giswater are experimental, therefore the development team and the Giswater Association are not responsible and assume no liability whatsoever for any results or any use made of the results obtained from the program, nor for any damages or litigation that result from the use of these programs for any purpose. -version=3.6.012 +version=3.6.013 author=David Erill, Barbara Rzepka, Sergi Muñoz, Josep Lluís Sala, Edgar Fusté, Albert Bofill, Sergi Maspons, Elies Bertran, Abel García Juanes, Maria Guzmán, Jordi Blanch, Xavier Torret, Daniel Marín, Ferran Martínez -Changelog=Version 3.6.012 - - Change "Set archive" button to "Toggle archive" (go2epa manager) - - Show the dates when an EPA result has been corporate - - New button "Show INP data" in go2epa manager - - Add the option to set geometry to a document (it can automatically get coordinates from the document's metadata) - - Add "name" field for documents - - Add workcat, psector & visit tabs in document dialog - - Create workcat manager - - Allow tab ordering in GwInfo (via config_form_tabs) - - New style manager & style change button - - Improve mincut dialog by ordering the toolbar actions - - Remove prices manager +Changelog=Version 3.6.013 tags= giswater, water networks, sewerage, urban drainage, EPANET, SWMM From f04c2870b991021dcf61eba7bc69701eb4f98663 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nico=20P=C3=A9rez?= Date: Fri, 6 Sep 2024 09:29:35 +0200 Subject: [PATCH 02/26] chore(libs): update submodule --- libs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs b/libs index 69c065838..bd88df2ad 160000 --- a/libs +++ b/libs @@ -1 +1 @@ -Subproject commit 69c06583873a9b2f07451f7da692afb3b1fd1b3a +Subproject commit bd88df2ad6e993d4e6130e3528b82a7cd9bc8cfa From edfc78c5859575726bbfca75ca7e627931dee5ea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nico=20P=C3=A9rez?= Date: Mon, 9 Sep 2024 10:49:33 +0200 Subject: [PATCH 03/26] feat(GwFeatureTypeChangeUi): make dynamic this form, getting widgets from database. --- .../edit/featuretype_change_button.py | 333 ++++++++++-------- core/ui/toolbars/edit/featuretype_change.ui | 246 +------------ core/utils/tools_gw.py | 2 + 3 files changed, 205 insertions(+), 376 deletions(-) diff --git a/core/toolbars/edit/featuretype_change_button.py b/core/toolbars/edit/featuretype_change_button.py index 6d4ceefda..14d3ae6a6 100644 --- a/core/toolbars/edit/featuretype_change_button.py +++ b/core/toolbars/edit/featuretype_change_button.py @@ -18,7 +18,9 @@ from ...utils import tools_gw from ....libs import tools_qgis, tools_qt, tools_db from .... import global_vars - +from qgis.PyQt.QtWidgets import QAction, QAbstractItemView, QCheckBox, QComboBox, QCompleter, QDoubleSpinBox, \ + QDateEdit, QGridLayout, QLabel, QLineEdit, QListWidget, QListWidgetItem, QPushButton, QSizePolicy, \ + QSpinBox, QSpacerItem, QTableView, QTabWidget, QWidget, QTextEdit, QRadioButton, QToolBox class GwFeatureTypeChangeButton(GwMaptool): """ Button 28: Change feature type @@ -153,79 +155,6 @@ def _set_active_layer(self, name): self.current_layer = tools_qgis.get_layer_by_tablename(tablename) self.iface.setActiveLayer(self.current_layer) - - def _open_catalog(self, feature_type): - - # Get feature_type - child_type = tools_qt.get_text(self.dlg_change, self.dlg_change.feature_type_new) - if child_type == 'null': - msg = "New feature type is null. Please, select a valid value" - tools_qt.show_info_box(msg, "Info") - return - - self.catalog = GwCatalog() - self.catalog.open_catalog(self.dlg_change, 'featurecat_id', feature_type, child_type) - - - def _edit_change_elem_type_accept(self): - """ Update current type of feature and save changes in database """ - - project_type = tools_gw.get_project_type() - feature_type_new = tools_qt.get_text(self.dlg_change, self.dlg_change.feature_type_new) - featurecat_id = tools_qt.get_text(self.dlg_change, self.dlg_change.featurecat_id) - - if feature_type_new != "null": - - if (featurecat_id != "null" and featurecat_id is not None and project_type == 'ws') or ( - project_type == 'ud'): - - # Get function input parameters - feature = f'"type":"{self.feature_type}"' - extras = f'"feature_id":"{self.feature_id}"' - extras += f', "feature_type_new":"{feature_type_new}"' - extras += f', "featurecat_id":"{featurecat_id}"' - body = tools_gw.create_body(feature=feature, extras=extras) - - # Execute SQL function and show result to the user - complet_result = tools_gw.execute_procedure('gw_fct_setchangefeaturetype', body) - if not complet_result: - message = "Error replacing feature" - tools_qgis.show_warning(message) - # Check in init config file if user wants to keep map tool active or not - self.manage_active_maptool() - tools_gw.close_dialog(self.dlg_change) - return - - tools_gw.set_config_parser("btn_featuretype_change", "feature_type_new", feature_type_new) - tools_gw.set_config_parser("btn_featuretype_change", "featurecat_id", featurecat_id) - message = "Values has been updated" - tools_qgis.show_info(message) - - else: - message = "Field catalog_id required!" - tools_qgis.show_warning(message, dialog=self.dlg_change) - return - - else: - message = "Feature has not been updated because no catalog has been selected" - tools_qgis.show_warning(message) - - # Close form - tools_gw.close_dialog(self.dlg_change) - - # Refresh map canvas - self.refresh_map_canvas() - - # Check if the expression is valid - expr_filter = f"{self.feature_type}_id = '{self.feature_id}'" - (is_valid, expr) = tools_qt.check_expression_filter(expr_filter) # @UnusedVariable - if not is_valid: - return - - # Check in init config file if user wants to keep map tool active or not - self.manage_active_maptool() - - def _open_custom_form(self, layer, expr): """ Open custom from selected layer """ @@ -242,76 +171,97 @@ def _open_custom_form(self, layer, expr): dialog.dlg_closed.connect(partial(tools_qgis.restore_user_layer, self.tablename)) - def _change_elem_type(self, feature): + def _open_dialog(self): + """ Open Feature Change Dialog dynamic """ - # Create the dialog, fill feature_type and define its signals + feature = f'"tableName":"{self.tablename}", "id":"{self.feature_id}"' + body = tools_gw.create_body(feature = feature) + json_result = tools_gw.execute_procedure('gw_fct_getfeaturereplace', body) self.dlg_change = GwFeatureTypeChangeUi(self) tools_gw.load_settings(self.dlg_change) - tools_gw.add_icon(self.dlg_change.btn_catalog, "195") - - # Get featuretype_id from current feature - project_type = tools_gw.get_project_type() - if project_type == 'ws': - self.dlg_change.feature_type_new.currentIndexChanged.connect(partial(self._filter_catalog)) - elif project_type == 'ud': - sql = (f"SELECT DISTINCT(id), id as idval " - f"FROM {self.cat_table} " - f"WHERE active IS TRUE OR active IS NULL " - f"ORDER BY id") - rows = tools_db.get_rows(sql, log_sql=True) - tools_qt.fill_combo_values(self.dlg_change.featurecat_id, rows) - - # Set default value - featurecat_id = tools_gw.get_config_parser("btn_featuretype_change", "featurecat_id", "user", "session") - if featurecat_id not in (None, "None"): - tools_qt.set_combo_value(self.dlg_change.featurecat_id, featurecat_id, 1, add_new=False) - tools_qt.set_autocompleter(self.dlg_change.featurecat_id) - - # Get feature type from current feature - feature_type = feature.attribute(self.feature_edit_type) - self.dlg_change.feature_type.setText(feature_type) - - # Fill 1st combo boxes-new system feature type - sql = (f"SELECT DISTINCT(id), id as idval " - f"FROM cat_feature " - f"WHERE lower(feature_type) = '{self.feature_type}' AND active is True " - f"ORDER BY id") - rows = tools_db.get_rows(sql) - rows.insert(0, ['', '']) - feature_type_new = tools_gw.get_config_parser("btn_featuretype_change", "feature_type_new", "user", "session") - tools_qt.fill_combo_values(self.dlg_change.feature_type_new, rows) - if feature_type_new in (None, "None"): - feature_type_new = feature_type - in_combo = tools_qt.set_combo_value(self.dlg_change.feature_type_new, feature_type_new, 0, add_new=False) - if not in_combo: - tools_qt.set_combo_value(self.dlg_change.feature_type_new, feature_type, 0) - - # Set buttons signals - self.dlg_change.btn_catalog.clicked.connect(partial(self._open_catalog, self.feature_type)) - self.dlg_change.btn_accept.clicked.connect(self._edit_change_elem_type_accept) - self.dlg_change.btn_cancel.clicked.connect(partial(tools_gw.close_dialog, self.dlg_change)) - - # Open dialog + self._manage_dlg_widgets(self.dlg_change, json_result) tools_gw.open_dialog(self.dlg_change, 'featuretype_change') - def _filter_catalog(self): - - feature_type_new = tools_qt.get_text(self.dlg_change, self.dlg_change.feature_type_new) - if feature_type_new == "null": - return - - # Populate catalog_id - sql = (f"SELECT DISTINCT(id), id as idval " - f"FROM {self.cat_table} " - f"WHERE {self.feature_type}type_id = '{feature_type_new}' AND (active IS TRUE OR active IS NULL) " - f"ORDER BY id") - rows = tools_db.get_rows(sql) - tools_qt.fill_combo_values(self.dlg_change.featurecat_id, rows) - featurecat_id = tools_gw.get_config_parser("btn_featuretype_change", "featurecat_id", "user", "session") - if featurecat_id not in (None, "None"): - tools_qt.set_combo_value(self.dlg_change.featurecat_id, featurecat_id, 1, add_new=False) - tools_qt.set_autocompleter(self.dlg_change.featurecat_id) + def _manage_dlg_widgets(self, dialog,complet_result): + """ Creates and populates all the widgets """ + + layout_list = [] + widget_offset = 0 + prev_layout = "" + for field in complet_result['body']['data']['fields']: + if field.get('hidden'): + continue + + if field['widgettype'] is "button": + continue + + if field.get('widgetcontrols') and field['widgetcontrols'].get('hiddenWhenNull') \ + and field.get('value') in (None, ''): + continue + label, widget = tools_gw.set_widgets(dialog, complet_result, field, self.tablename, self) + if widget is None: + continue + + layout = dialog.findChild(QGridLayout, field['layoutname']) + if layout is not None: + if layout.objectName() != prev_layout: + widget_offset = 0 + prev_layout = layout.objectName() + # Take the QGridLayout with the intention of adding a QSpacerItem later + if layout not in layout_list and layout.objectName() in ('lyt_main_1', 'lyt_main_2', 'lyt_main_3','lyt_buttons'): + layout_list.append(layout) + + if field['layoutorder'] is None: + message = "The field layoutorder is not configured for" + msg = f"formname:{self.tablename}, columnname:{field['columnname']}" + tools_qgis.show_message(message, 2, parameter=msg, dialog=dialog) + continue + + # Manage widget and label positions + label_pos = field['widgetcontrols']['labelPosition'] if ( + 'widgetcontrols' in field and field['widgetcontrols'] and 'labelPosition' in field[ + 'widgetcontrols']) else None + widget_pos = field['layoutorder'] + widget_offset + + # The data tab is somewhat special (it has 2 columns) + if 'lyt_data' in layout.objectName() or 'lyt_epa_data' in layout.objectName(): + tools_gw.add_widget(dialog, field, label, widget) + # If the widget has a label + elif label: + # If it has a labelPosition configured + if label_pos is not None: + if label_pos == 'top': + layout.addWidget(label, 0, widget_pos) + if type(widget) is QSpacerItem: + layout.addItem(widget, 1, widget_pos) + else: + layout.addWidget(widget, 1, widget_pos) + elif label_pos == 'left': + layout.addWidget(label, 0, widget_pos) + if type(widget) is QSpacerItem: + layout.addItem(widget, 0, widget_pos + 1) + else: + layout.addWidget(widget, 0, widget_pos + 1) + widget_offset += 1 + else: + if type(widget) is QSpacerItem: + layout.addItem(widget, 0, widget_pos) + else: + layout.addWidget(widget, 0, widget_pos) + # If widget has label but labelPosition is not configured (put it on the left by default) + else: + layout.addWidget(label, 0, widget_pos) + if type(widget) is QSpacerItem: + layout.addItem(widget, 0, widget_pos + 1) + else: + layout.addWidget(widget, 0, widget_pos + 1) + # If the widget has no label + else: + if type(widget) is QSpacerItem: + layout.addItem(widget, 0, widget_pos) + else: + layout.addWidget(widget, 0, widget_pos) def _featuretype_change(self, event): @@ -349,6 +299,109 @@ def _featuretype_change(self, event): self.feature_edit_type = f'{self.feature_type}_type' self.feature_type_cat = f'{self.feature_type}type_id' self.feature_id = snapped_feat.attribute(f'{self.feature_type}_id') - self._change_elem_type(snapped_feat) + self._open_dialog() + # endregion + + +def btn_cancel_featuretype_change(**kwargs): + """ Close form """ + + dialog = kwargs["dialog"] + tools_gw.close_dialog(dialog) + + +def btn_accept_featuretype_change(**kwargs): + """ Update current type of feature and save changes in database """ + + this = kwargs["class"] + dialog = kwargs["dialog"] + + project_type = tools_gw.get_project_type() + feature_type_new = tools_qt.get_widget_value(dialog, "tab_none_feature_type_new") + featurecat_id = tools_qt.get_widget_value(dialog, "tab_none_featurecat_id") + + if feature_type_new != "null": + + if (featurecat_id != "null" and featurecat_id is not None and project_type == 'ws') or ( + project_type == 'ud'): + + # Get function input parameters + feature = f'"type":"{this.feature_type}"' + extras = f'"feature_id":"{this.feature_id}"' + extras += f', "feature_type_new":"{feature_type_new}"' + extras += f', "featurecat_id":"{featurecat_id}"' + body = tools_gw.create_body(feature=feature, extras=extras) + + # Execute SQL function and show result to the user + complet_result = tools_gw.execute_procedure('gw_fct_setchangefeaturetype', body) + if not complet_result: + message = "Error replacing feature" + tools_qgis.show_warning(message) + # Check in init config file if user wants to keep map tool active or not + this.manage_active_maptool() + tools_gw.close_dialog(dialog) + return + + tools_gw.set_config_parser("btn_featuretype_change", "feature_type_new", feature_type_new) + tools_gw.set_config_parser("btn_featuretype_change", "featurecat_id", featurecat_id) + message = "Values has been updated" + tools_qgis.show_info(message) + + else: + message = "Field catalog_id required!" + tools_qgis.show_warning(message, dialog=dialog) + return + + else: + message = "Feature has not been updated because no catalog has been selected" + tools_qgis.show_warning(message) + + # Close form + tools_gw.close_dialog(dialog) + + # Refresh map canvas + this.refresh_map_canvas() + + # Check if the expression is valid + expr_filter = f"{this.feature_type}_id = '{this.feature_id}'" + (is_valid, expr) = tools_qt.check_expression_filter(expr_filter) # @UnusedVariable + if not is_valid: + return + + # Check in init config file if user wants to keep map tool active or not + this.manage_active_maptool() + + +def btn_catalog_featuretype_change(**kwargs): + """ Open Catalog form """ + + dialog = kwargs["dialog"] + this = kwargs["class"] + + # Get feature_type + child_type = tools_qt.get_text(dialog, "tab_none_feature_type_new") + if child_type == 'null': + msg = "New feature type is null. Please, select a valid value" + tools_qt.show_info_box(msg, "Info") + return + + this.catalog = GwCatalog() + this.catalog.open_catalog(dialog, 'tab_none_featurecat_id', this.feature_type, child_type) + + +def cmb_new_featuretype_selection_changed(**kwargs): + """ When new featuretype change, catalog_id changes as well """ + + dialog = kwargs["dialog"] + cmb_new_feature_type = kwargs["widget"] + this = kwargs["class"] + cmb_catalog_id = tools_qt.get_widget(dialog,"tab_none_featurecat_id") - # endregion \ No newline at end of file + # Populate catalog_id + feature_type_new = tools_qt.get_widget_value(dialog, cmb_new_feature_type) + sql = (f"SELECT DISTINCT(id), id as idval " + f"FROM {this.cat_table} " + f"WHERE {this.feature_type}type_id = '{feature_type_new}' AND (active IS TRUE OR active IS NULL) " + f"ORDER BY id") + rows = tools_db.get_rows(sql) + tools_qt.fill_combo_values(cmb_catalog_id, rows) \ No newline at end of file diff --git a/core/ui/toolbars/edit/featuretype_change.ui b/core/ui/toolbars/edit/featuretype_change.ui index 369c0a372..799d43e6f 100644 --- a/core/ui/toolbars/edit/featuretype_change.ui +++ b/core/ui/toolbars/edit/featuretype_change.ui @@ -6,254 +6,28 @@ 0 0 - 319 - 161 + 630 + 294 Change feature type - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 250 - 20 - - - - - - - - - 0 - 0 - - - - Cancel - - + + - - - - - 0 - 0 - - - - Accept - - + + - - - - - - - 8 - - - - QFrame::NoFrame - - - QFrame::Raised - - - New feature type: - - - 3 - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 36 - 20 - - - - - - - - true - - - - 0 - 0 - - - - true - - - - - - - - - - - - 8 - - - - QFrame::NoFrame - - - QFrame::Raised - - - Current feature type: - - - 3 - - - Qt::LinksAccessibleByMouse - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 20 - 20 - - - - - - - - - - - - + + - - - - - - - 0 - 0 - - - - - 8 - - - - QFrame::NoFrame - - - QFrame::Raised - - - Catalog id: - - - 3 - - - - - - - Qt::Horizontal - - - QSizePolicy::Fixed - - - - 73 - 20 - - - - - - - - true - - - - - - - - 0 - 0 - - - - - 24 - 24 - - - - - 24 - 24 - - - - - - - - 24 - 24 - - - - - + + - - feature_type - diff --git a/core/utils/tools_gw.py b/core/utils/tools_gw.py index e1f57a23b..b9d66111b 100644 --- a/core/utils/tools_gw.py +++ b/core/utils/tools_gw.py @@ -53,6 +53,7 @@ # These imports are for the add_{widget} functions (modules need to be imported in order to find it by its name) # noinspection PyUnresolvedReferences from ..shared import info, mincut_tools +from ..toolbars.edit import featuretype_change_button QgsGeometryType = Literal['line', 'point', 'polygon'] @@ -1576,6 +1577,7 @@ def add_button(**kwargs): module = tools_backend_calls -> def manage_document(doc_id, **kwargs): module = tools_backend_calls -> def manage_element(element_id, **kwargs): module = tools_backend_calls -> def open_selected_element(**kwargs): + module = featuretype_change_button -> def btn_accept_featuretype_change(**kwargs): """ field = kwargs['field'] From 7aa3ead04c43067a8f459c11ccb3380221f6337d Mon Sep 17 00:00:00 2001 From: smaspons Date: Mon, 9 Sep 2024 16:13:55 +0200 Subject: [PATCH 04/26] fix(qgisproject templates): fix valves symbology --- resources/templates/qgisproject/en_US/ws_epa.qgs | 4 ++-- resources/templates/qgisproject/en_US/ws_inventory.qgs | 4 ++-- resources/templates/qgisproject/en_US/ws_master.qgs | 4 ++-- resources/templates/qgisproject/en_US/ws_om.qgs | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/resources/templates/qgisproject/en_US/ws_epa.qgs b/resources/templates/qgisproject/en_US/ws_epa.qgs index f846dcc53..8584b069b 100644 --- a/resources/templates/qgisproject/en_US/ws_epa.qgs +++ b/resources/templates/qgisproject/en_US/ws_epa.qgs @@ -27857,8 +27857,8 @@ def my_form_open(dialog, layer, feature): - - + + diff --git a/resources/templates/qgisproject/en_US/ws_inventory.qgs b/resources/templates/qgisproject/en_US/ws_inventory.qgs index 083ffd555..78e7043e4 100644 --- a/resources/templates/qgisproject/en_US/ws_inventory.qgs +++ b/resources/templates/qgisproject/en_US/ws_inventory.qgs @@ -16020,8 +16020,8 @@ def my_form_open(dialog, layer, feature): - - + + diff --git a/resources/templates/qgisproject/en_US/ws_master.qgs b/resources/templates/qgisproject/en_US/ws_master.qgs index dc9021579..efe6bd039 100644 --- a/resources/templates/qgisproject/en_US/ws_master.qgs +++ b/resources/templates/qgisproject/en_US/ws_master.qgs @@ -28624,8 +28624,8 @@ def my_form_open(dialog, layer, feature): - - + + diff --git a/resources/templates/qgisproject/en_US/ws_om.qgs b/resources/templates/qgisproject/en_US/ws_om.qgs index 045901eaf..b9083d2fe 100644 --- a/resources/templates/qgisproject/en_US/ws_om.qgs +++ b/resources/templates/qgisproject/en_US/ws_om.qgs @@ -16094,8 +16094,8 @@ def my_form_open(dialog, layer, feature): - - + + From 532cda1860d05009c46958bff511bf66716040a4 Mon Sep 17 00:00:00 2001 From: smaspons Date: Mon, 9 Sep 2024 16:25:43 +0200 Subject: [PATCH 05/26] fix(style manager): manage close button --- core/toolbars/utilities/style_manager.py | 2 ++ core/ui/toolbars/utilities/style_manager.ui | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/core/toolbars/utilities/style_manager.py b/core/toolbars/utilities/style_manager.py index a42d41907..47c9360c9 100644 --- a/core/toolbars/utilities/style_manager.py +++ b/core/toolbars/utilities/style_manager.py @@ -59,6 +59,8 @@ def manage_styles(self): self.style_mng_dlg.btn_update_style.clicked.connect(self._update_selected_style) self.style_mng_dlg.btn_refresh_all.clicked.connect(self._refresh_all_styles) + self.style_mng_dlg.btn_close.clicked.connect(partial(tools_gw.close_dialog, self.style_mng_dlg, True, 'core')) + # Open the style management dialog tools_gw.open_dialog(self.style_mng_dlg, 'style_manager') diff --git a/core/ui/toolbars/utilities/style_manager.ui b/core/ui/toolbars/utilities/style_manager.ui index 439aff1c1..fae766106 100644 --- a/core/ui/toolbars/utilities/style_manager.ui +++ b/core/ui/toolbars/utilities/style_manager.ui @@ -21,7 +21,7 @@ - + Close From c2ec98582daa162ab76329c630fe11cda8c9d136 Mon Sep 17 00:00:00 2001 From: Ferran Date: Mon, 16 Sep 2024 09:37:19 +0200 Subject: [PATCH 06/26] fix(style_manager): show msg in the dialog --- core/toolbars/utilities/style_manager.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/toolbars/utilities/style_manager.py b/core/toolbars/utilities/style_manager.py index 47c9360c9..4eded54d6 100644 --- a/core/toolbars/utilities/style_manager.py +++ b/core/toolbars/utilities/style_manager.py @@ -57,7 +57,7 @@ def manage_styles(self): # Connect signals to the style buttons self.style_mng_dlg.btn_delete_style.clicked.connect(self._delete_selected_styles) self.style_mng_dlg.btn_update_style.clicked.connect(self._update_selected_style) - self.style_mng_dlg.btn_refresh_all.clicked.connect(self._refresh_all_styles) + self.style_mng_dlg.btn_refresh_all.clicked.connect(partial(self._refresh_all_styles, self.style_mng_dlg)) self.style_mng_dlg.btn_close.clicked.connect(partial(tools_gw.close_dialog, self.style_mng_dlg, True, 'core')) @@ -550,7 +550,7 @@ def _update_selected_style(self): tools_qgis.show_warning(f"Failed to update styles: {e}", dialog=self.style_mng_dlg) - def _refresh_all_styles(self): + def _refresh_all_styles(self, dialog): """Refresh all styles in the database based on the current QGIS layer styles.""" try: # Get all loaded layers in the project @@ -578,7 +578,7 @@ def _refresh_all_styles(self): # tools_qgis.show_warning(f"Style '{style}' not found in database.", dialog=self.style_mng_dlg) msg = "All layers have been successfully refreshed." - tools_qgis.show_success(msg) + tools_qgis.show_success(msg, dialog=dialog) self._load_styles() except Exception as e: From 6cc286c7b627f2d6831e4b7588691d47a352e930 Mon Sep 17 00:00:00 2001 From: Ferran Date: Mon, 16 Sep 2024 11:45:41 +0200 Subject: [PATCH 07/26] fix(go2epa_manager): use json input --- core/toolbars/epa/go2epa_manager_button.py | 5 ++++- dbmodel | 2 +- libs | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/core/toolbars/epa/go2epa_manager_button.py b/core/toolbars/epa/go2epa_manager_button.py index 48f4e0cc3..017946364 100644 --- a/core/toolbars/epa/go2epa_manager_button.py +++ b/core/toolbars/epa/go2epa_manager_button.py @@ -440,7 +440,10 @@ def _show_inp_data(self, dialog, widget): if not result_ids: return - result_ids_json = "ARRAY[" + ",".join(f"'{result_id}'" for result_id in result_ids) + "]" + input_param = { + "result_ids": result_ids + } + result_ids_json = f"'{json.dumps(input_param)}'::json" json_result = tools_gw.execute_procedure( function_name="gw_fct_getinpdata", parameters=result_ids_json, diff --git a/dbmodel b/dbmodel index 8bf67a6ae..400241193 160000 --- a/dbmodel +++ b/dbmodel @@ -1 +1 @@ -Subproject commit 8bf67a6ae1541d68641fe5d31690717b2841b7fe +Subproject commit 400241193d8117c4c1e1d52c10ed9fc2390764e7 diff --git a/libs b/libs index bd88df2ad..1a519e572 160000 --- a/libs +++ b/libs @@ -1 +1 @@ -Subproject commit bd88df2ad6e993d4e6130e3528b82a7cd9bc8cfa +Subproject commit 1a519e572660bc8a528053fe150635b8c54ceafe From 21be30dea3ad6d332b402d94353087bbf99f69a3 Mon Sep 17 00:00:00 2001 From: Ferran Date: Tue, 17 Sep 2024 13:22:31 +0200 Subject: [PATCH 08/26] fix(tools_backend_calls): make tab document in info work with doc_name --- core/utils/tools_backend_calls.py | 10 +++++++--- i18n/giswater_ca_ES.qm | Bin 228068 -> 228070 bytes i18n/giswater_ca_ES.ts | 2 +- i18n/giswater_en_US.qm | Bin 216417 -> 216421 bytes i18n/giswater_en_US.ts | 2 +- i18n/giswater_es_ES.qm | Bin 231351 -> 231359 bytes i18n/giswater_es_ES.ts | 2 +- 7 files changed, 10 insertions(+), 6 deletions(-) diff --git a/core/utils/tools_backend_calls.py b/core/utils/tools_backend_calls.py index 0a6c39fe2..326dd7f2d 100644 --- a/core/utils/tools_backend_calls.py +++ b/core/utils/tools_backend_calls.py @@ -78,6 +78,9 @@ def add_object(**kwargs): # Check if this object is already associated to current feature field_object_id = dialog.findChild(QWidget, func_params['sourcewidget']).property('columnname') + if qtable_name == 'tbl_document' or 'doc' in tab_name: + field_object_id = 'doc_id' + tablename = func_params['sourceview'] + "_x_" + feature_type sql = ("SELECT * FROM " + str(tablename) + "" " WHERE " + str(field_id) + " = '" + str(feature_id) + "'" @@ -211,7 +214,8 @@ def open_visit(**kwargs): def manage_document(doc_id, **kwargs): """ Function called in class tools_gw.add_button(...) --> - widget.clicked.connect(partial(getattr(self, function_name), **kwargs)) """ + widget.clicked.connect(partial(getattr(self, function_name), **kwargs)) + Function called by: columnname ='btn_doc_new' """ feature = None complet_result = kwargs['complet_result'] feature_type = complet_result['body']['feature']['featureType'] @@ -937,12 +941,12 @@ def _get_list(complet_result, form_name='', tab_name='', filter_fields='', widge def _manage_document_new(doc, **kwargs): """ Get inserted doc_id and add it to current feature """ - if doc.doc_id is None: + if doc.doc_name is None: return dialog = kwargs['dialog'] func_params = kwargs['func_params'] - tools_qt.set_widget_text(dialog, f"{func_params['sourcewidget']}", doc.doc_id) + tools_qt.set_widget_text(dialog, f"{func_params['sourcewidget']}", doc.doc_name) add_object(**kwargs) diff --git a/i18n/giswater_ca_ES.qm b/i18n/giswater_ca_ES.qm index 449d0b263b0fac4b41e734ac959543a62602b140..785588c5af55631b9f12d4d83c2a58a7c2bdf73d 100644 GIT binary patch delta 8491 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 lbl_doc_id - Id doc: + Nom doc: tooltip_lbl_doc_id diff --git a/i18n/giswater_en_US.qm b/i18n/giswater_en_US.qm index 3c75b2f9c82da7d85177beb956a33da31f4eeea8..dc6a432e6e79224135fc667b0a61c969befda596 100644 GIT binary patch delta 8524 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 diff --git a/i18n/giswater_en_US.ts b/i18n/giswater_en_US.ts index a767c89dd..4434794f1 100644 --- a/i18n/giswater_en_US.ts +++ b/i18n/giswater_en_US.ts @@ -6439,7 +6439,7 @@ lbl_doc_id - Doc id: + Doc name: tooltip_lbl_doc_id diff --git a/i18n/giswater_es_ES.qm b/i18n/giswater_es_ES.qm index f115a0cfc0734eb6b8a1a36aa43a44230a9feb52..ed1311ac1c8dd1ad1e504fdff57bffafd6c75651 100644 GIT binary patch delta 8515 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 delta 8516 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 diff --git a/i18n/giswater_es_ES.ts b/i18n/giswater_es_ES.ts index e1c0a14fb..973037ae7 100644 --- a/i18n/giswater_es_ES.ts +++ b/i18n/giswater_es_ES.ts @@ -6439,7 +6439,7 @@ Por otro lado, debe saber que la tabla de trazabilidad almacenará información lbl_doc_id - Id doc: + Nombre doc: tooltip_lbl_doc_id From 76d00197cf974c3293daa024ffa560cbf7660003 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nico=20P=C3=A9rez?= Date: Wed, 18 Sep 2024 09:38:16 +0200 Subject: [PATCH 09/26] style(basic): add lyt_byuttons QGridLayout in all forms in giswater\core\ui\toolbars\basic except info_corresct.ui --- core/ui/toolbars/basic/info_epa_demand.ui | 10 +++++----- core/ui/toolbars/basic/info_epa_dwf.ui | 12 ++++++------ core/ui/toolbars/basic/info_epa_orifice.ui | 12 ++++++------ core/ui/toolbars/basic/info_epa_outlet.ui | 12 ++++++------ core/ui/toolbars/basic/info_epa_pump.ui | 6 +++--- core/ui/toolbars/basic/info_epa_weir.ui | 12 ++++++------ core/ui/toolbars/basic/info_feature.ui | 22 +++++++++++----------- core/ui/toolbars/basic/search.ui | 7 +++++-- core/ui/toolbars/basic/search_workcat.ui | 6 +++--- 9 files changed, 51 insertions(+), 48 deletions(-) diff --git a/core/ui/toolbars/basic/info_epa_demand.ui b/core/ui/toolbars/basic/info_epa_demand.ui index 25bfb9c67..af5eceb58 100644 --- a/core/ui/toolbars/basic/info_epa_demand.ui +++ b/core/ui/toolbars/basic/info_epa_demand.ui @@ -25,7 +25,7 @@ 0 0 947 - 404 + 407 @@ -82,8 +82,8 @@ - - + + Qt::Horizontal @@ -96,7 +96,7 @@ - + false @@ -106,7 +106,7 @@ - + Cancel diff --git a/core/ui/toolbars/basic/info_epa_dwf.ui b/core/ui/toolbars/basic/info_epa_dwf.ui index 9ed752ef1..4bee6062b 100644 --- a/core/ui/toolbars/basic/info_epa_dwf.ui +++ b/core/ui/toolbars/basic/info_epa_dwf.ui @@ -25,7 +25,7 @@ 0 0 947 - 379 + 384 @@ -85,7 +85,7 @@ 0 0 947 - 379 + 384 @@ -142,8 +142,8 @@ - - + + Qt::Horizontal @@ -156,7 +156,7 @@ - + false @@ -166,7 +166,7 @@ - + Cancel diff --git a/core/ui/toolbars/basic/info_epa_orifice.ui b/core/ui/toolbars/basic/info_epa_orifice.ui index 59a99d693..c69049d8f 100644 --- a/core/ui/toolbars/basic/info_epa_orifice.ui +++ b/core/ui/toolbars/basic/info_epa_orifice.ui @@ -25,7 +25,7 @@ 0 0 947 - 379 + 384 @@ -85,7 +85,7 @@ 0 0 947 - 379 + 384 @@ -142,8 +142,8 @@ - - + + Qt::Horizontal @@ -156,7 +156,7 @@ - + false @@ -166,7 +166,7 @@ - + Cancel diff --git a/core/ui/toolbars/basic/info_epa_outlet.ui b/core/ui/toolbars/basic/info_epa_outlet.ui index d739c4241..40f31a310 100644 --- a/core/ui/toolbars/basic/info_epa_outlet.ui +++ b/core/ui/toolbars/basic/info_epa_outlet.ui @@ -25,7 +25,7 @@ 0 0 947 - 379 + 384 @@ -85,7 +85,7 @@ 0 0 947 - 379 + 384 @@ -142,8 +142,8 @@ - - + + Qt::Horizontal @@ -156,7 +156,7 @@ - + false @@ -166,7 +166,7 @@ - + Cancel diff --git a/core/ui/toolbars/basic/info_epa_pump.ui b/core/ui/toolbars/basic/info_epa_pump.ui index 7e6dada6b..1ba1227c2 100644 --- a/core/ui/toolbars/basic/info_epa_pump.ui +++ b/core/ui/toolbars/basic/info_epa_pump.ui @@ -25,7 +25,7 @@ 0 0 947 - 379 + 384 @@ -85,7 +85,7 @@ 0 0 947 - 379 + 384 @@ -142,7 +142,7 @@ - + diff --git a/core/ui/toolbars/basic/info_epa_weir.ui b/core/ui/toolbars/basic/info_epa_weir.ui index 22f41cb93..ce7af32e9 100644 --- a/core/ui/toolbars/basic/info_epa_weir.ui +++ b/core/ui/toolbars/basic/info_epa_weir.ui @@ -25,7 +25,7 @@ 0 0 947 - 379 + 384 @@ -85,7 +85,7 @@ 0 0 947 - 379 + 384 @@ -142,8 +142,8 @@ - - + + Qt::Horizontal @@ -156,7 +156,7 @@ - + false @@ -166,7 +166,7 @@ - + Cancel diff --git a/core/ui/toolbars/basic/info_feature.ui b/core/ui/toolbars/basic/info_feature.ui index e353f7eb8..774bc9e25 100644 --- a/core/ui/toolbars/basic/info_feature.ui +++ b/core/ui/toolbars/basic/info_feature.ui @@ -25,8 +25,8 @@ - - + + Qt::Horizontal @@ -39,21 +39,21 @@ - + Accept - + Cancel - + Apply @@ -78,7 +78,7 @@ QTabWidget::Rounded - 0 + 4 @@ -95,8 +95,8 @@ 0 0 - 726 - 335 + 734 + 365 @@ -151,8 +151,8 @@ 0 0 - 111 - 64 + 734 + 357 @@ -191,7 +191,7 @@ 0 0 98 - 42 + 36 diff --git a/core/ui/toolbars/basic/search.ui b/core/ui/toolbars/basic/search.ui index b5adf27dc..7c7ee9d8d 100644 --- a/core/ui/toolbars/basic/search.ui +++ b/core/ui/toolbars/basic/search.ui @@ -6,8 +6,8 @@ 0 0 - 349 - 282 + 395 + 278 @@ -33,6 +33,9 @@ + + + diff --git a/core/ui/toolbars/basic/search_workcat.ui b/core/ui/toolbars/basic/search_workcat.ui index 56327499d..835d4238d 100644 --- a/core/ui/toolbars/basic/search_workcat.ui +++ b/core/ui/toolbars/basic/search_workcat.ui @@ -381,8 +381,8 @@ - - + + Qt::Horizontal @@ -395,7 +395,7 @@ - + From 9fcf2481a2d87da33b8ae50d2bdb939909b3d67b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nico=20P=C3=A9rez?= Date: Wed, 18 Sep 2024 13:18:21 +0200 Subject: [PATCH 10/26] style(ui): add lyt_buttons QGridLayout for all dialogs. --- core/ui/toolbars/edit/arc_fusion.ui | 65 ++++--- core/ui/toolbars/edit/auxcircle.ui | 65 ++++--- core/ui/toolbars/edit/auxpoint.ui | 68 ++++--- core/ui/toolbars/edit/dimensioning.ui | 12 +- core/ui/toolbars/edit/doc.ui | 2 +- core/ui/toolbars/edit/doc_manager.ui | 85 ++++---- core/ui/toolbars/edit/element.ui | 67 ++++--- core/ui/toolbars/edit/element_manager.ui | 89 +++++---- core/ui/toolbars/edit/feature_delete.ui | 47 +++-- core/ui/toolbars/edit/feature_end.ui | 2 +- core/ui/toolbars/edit/feature_end_connec.ui | 73 +++---- core/ui/toolbars/edit/feature_replace.ui | 69 +++---- core/ui/toolbars/edit/featuretype_change.ui | 16 +- core/ui/toolbars/edit/workcat_manager.ui | 69 ++++--- core/ui/toolbars/epa/dscenario_manager.ui | 48 +++-- core/ui/toolbars/epa/go2epa.ui | 32 +-- core/ui/toolbars/epa/go2epa_manager.ui | 111 ++++++----- core/ui/toolbars/epa/go2epa_options.ui | 20 +- core/ui/toolbars/epa/go2epa_selector.ui | 65 ++++--- core/ui/toolbars/epa/nonvisual_controls.ui | 82 ++++---- core/ui/toolbars/epa/nonvisual_curve.ui | 82 ++++---- core/ui/toolbars/epa/nonvisual_lids.ui | 25 +-- core/ui/toolbars/epa/nonvisual_manager.ui | 48 +++-- core/ui/toolbars/epa/nonvisual_pattern_ud.ui | 26 +-- core/ui/toolbars/epa/nonvisual_pattern_ws.ui | 68 +++---- core/ui/toolbars/epa/nonvisual_print.ui | 2 +- core/ui/toolbars/epa/nonvisual_roughness.ui | 70 +++---- core/ui/toolbars/epa/nonvisual_rules.ui | 82 ++++---- core/ui/toolbars/epa/nonvisual_timeseries.ui | 28 +-- core/ui/toolbars/om/mincut.ui | 34 ++-- core/ui/toolbars/om/mincut_composer.ui | 2 +- core/ui/toolbars/om/mincut_connec.ui | 9 +- core/ui/toolbars/om/mincut_end.ui | 93 ++++----- core/ui/toolbars/om/mincut_hydrometer.ui | 9 +- core/ui/toolbars/om/mincut_manager.ui | 3 + core/ui/toolbars/om/profile.ui | 5 +- core/ui/toolbars/om/profile_list.ui | 57 +++--- core/ui/toolbars/om/selector_date.ui | 59 +++--- core/ui/toolbars/plan/netscenario.ui | 37 ++-- core/ui/toolbars/plan/netscenario_manager.ui | 151 ++++++++------- core/ui/toolbars/plan/psector.ui | 13 +- core/ui/toolbars/plan/psector_duplicate.ui | 81 ++++---- core/ui/toolbars/plan/psector_manager.ui | 182 +++++++++--------- core/ui/toolbars/plan/psector_rapport.ui | 64 +++--- core/ui/toolbars/plan/psector_repair.ui | 45 +++-- core/ui/toolbars/plan/replace_arc.ui | 15 +- core/ui/toolbars/utilities/config.ui | 27 +-- .../toolbars/utilities/create_style_group.ui | 59 +++--- core/ui/toolbars/utilities/csv.ui | 2 +- core/ui/toolbars/utilities/mapzone_config.ui | 123 ++++++------ core/ui/toolbars/utilities/mapzone_manager.ui | 48 +++-- core/ui/toolbars/utilities/print.ui | 87 +++++---- core/ui/toolbars/utilities/project_check.ui | 51 ++--- core/ui/toolbars/utilities/style_manager.ui | 121 ++++++------ core/ui/toolbars/utilities/toolbox.ui | 3 + core/ui/toolbars/utilities/toolbox_reports.ui | 4 +- core/ui/toolbars/utilities/toolbox_tool.ui | 93 ++++----- .../ui/toolbars/utilities/workspace_create.ui | 85 ++++---- .../toolbars/utilities/workspace_manager.ui | 126 ++++++------ 59 files changed, 1701 insertions(+), 1505 deletions(-) diff --git a/core/ui/toolbars/edit/arc_fusion.ui b/core/ui/toolbars/edit/arc_fusion.ui index 02c80e580..5405d2469 100644 --- a/core/ui/toolbars/edit/arc_fusion.ui +++ b/core/ui/toolbars/edit/arc_fusion.ui @@ -14,6 +14,40 @@ Arc fusion + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + OK + + + + + + + Cancel + + + + + @@ -260,37 +294,6 @@ - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - OK - - - - - - - Cancel - - - - - diff --git a/core/ui/toolbars/edit/auxcircle.ui b/core/ui/toolbars/edit/auxcircle.ui index 61da61ace..101b631bf 100644 --- a/core/ui/toolbars/edit/auxcircle.ui +++ b/core/ui/toolbars/edit/auxcircle.ui @@ -6,8 +6,8 @@ 0 0 - 422 - 142 + 376 + 107 @@ -17,33 +17,6 @@ true - - - - Accept - - - - - - - Cancel - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -74,6 +47,40 @@ + + + + 0 + + + + + Accept + + + + + + + Qt::Horizontal + + + + 40 + 0 + + + + + + + + Cancel + + + + + diff --git a/core/ui/toolbars/edit/auxpoint.ui b/core/ui/toolbars/edit/auxpoint.ui index ef0e40088..dc15293bc 100644 --- a/core/ui/toolbars/edit/auxpoint.ui +++ b/core/ui/toolbars/edit/auxpoint.ui @@ -6,8 +6,8 @@ 0 0 - 435 - 234 + 412 + 211 @@ -17,36 +17,6 @@ true - - - - Qt::Horizontal - - - QSizePolicy::Expanding - - - - 40 - 20 - - - - - - - - Cancel - - - - - - - Accept - - - @@ -187,6 +157,40 @@ + + + + + + Qt::Horizontal + + + QSizePolicy::Expanding + + + + 40 + 20 + + + + + + + + Accept + + + + + + + Cancel + + + + + diff --git a/core/ui/toolbars/edit/dimensioning.ui b/core/ui/toolbars/edit/dimensioning.ui index c293113d1..35320c0c4 100644 --- a/core/ui/toolbars/edit/dimensioning.ui +++ b/core/ui/toolbars/edit/dimensioning.ui @@ -6,8 +6,8 @@ 0 0 - 674 - 549 + 660 + 433 @@ -56,8 +56,8 @@ - - + + Qt::Horizontal @@ -70,14 +70,14 @@ - + Accept - + Cancel diff --git a/core/ui/toolbars/edit/doc.ui b/core/ui/toolbars/edit/doc.ui index 65994c7e6..115a27300 100644 --- a/core/ui/toolbars/edit/doc.ui +++ b/core/ui/toolbars/edit/doc.ui @@ -583,7 +583,7 @@ - + diff --git a/core/ui/toolbars/edit/doc_manager.ui b/core/ui/toolbars/edit/doc_manager.ui index 847075884..a625a0ad3 100644 --- a/core/ui/toolbars/edit/doc_manager.ui +++ b/core/ui/toolbars/edit/doc_manager.ui @@ -6,8 +6,8 @@ 0 0 - 421 - 785 + 393 + 633 @@ -20,28 +20,8 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Close - - - - - + + 0 @@ -49,19 +29,19 @@ - + Delete - - - - Filter by: Doc name + + + + true - - + + 0 @@ -69,7 +49,7 @@ - Delete + Create @@ -86,15 +66,15 @@ - - - - true + + + + Filter by: Doc name - - + + 0 @@ -102,10 +82,37 @@ - Create + + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + + + diff --git a/core/ui/toolbars/edit/element.ui b/core/ui/toolbars/edit/element.ui index 272604ba5..02f3dce9a 100644 --- a/core/ui/toolbars/edit/element.ui +++ b/core/ui/toolbars/edit/element.ui @@ -7,7 +7,7 @@ 0 0 418 - 604 + 661 @@ -23,37 +23,6 @@ - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Accept - - - - - - - Cancel - - - - - @@ -710,6 +679,40 @@ + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Accept + + + + + + + Cancel + + + + + diff --git a/core/ui/toolbars/edit/element_manager.ui b/core/ui/toolbars/edit/element_manager.ui index 7e7130669..9d11346c9 100644 --- a/core/ui/toolbars/edit/element_manager.ui +++ b/core/ui/toolbars/edit/element_manager.ui @@ -27,45 +27,13 @@ - - - - - 0 - 0 - - - - Delete - - - - - - - - 0 - 0 - - + + - + Create - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -86,20 +54,59 @@ - - + + + + + 0 + 0 + + - Close + Delete - - + + + + + 0 + 0 + + - Create + + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + + + diff --git a/core/ui/toolbars/edit/feature_delete.ui b/core/ui/toolbars/edit/feature_delete.ui index 825384ad9..be8164295 100644 --- a/core/ui/toolbars/edit/feature_delete.ui +++ b/core/ui/toolbars/edit/feature_delete.ui @@ -14,26 +14,6 @@ Delete feature - - - - Close - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -171,6 +151,33 @@ + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + + + diff --git a/core/ui/toolbars/edit/feature_end.ui b/core/ui/toolbars/edit/feature_end.ui index d68436ded..8858d8137 100644 --- a/core/ui/toolbars/edit/feature_end.ui +++ b/core/ui/toolbars/edit/feature_end.ui @@ -370,7 +370,7 @@ - + diff --git a/core/ui/toolbars/edit/feature_end_connec.ui b/core/ui/toolbars/edit/feature_end_connec.ui index 2cfc3e995..66398cd94 100644 --- a/core/ui/toolbars/edit/feature_end_connec.ui +++ b/core/ui/toolbars/edit/feature_end_connec.ui @@ -7,7 +7,7 @@ 0 0 696 - 551 + 583 @@ -20,27 +20,6 @@ - - - - true - - - - - - - Cancel - - - - - - - Accept - - - @@ -52,18 +31,12 @@ - - - - Qt::Horizontal - - - - 40 - 20 - + + + + true - + @@ -108,6 +81,40 @@ + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Accept + + + + + + + Cancel + + + + + diff --git a/core/ui/toolbars/edit/feature_replace.ui b/core/ui/toolbars/edit/feature_replace.ui index 354617ca0..52fb721ba 100644 --- a/core/ui/toolbars/edit/feature_replace.ui +++ b/core/ui/toolbars/edit/feature_replace.ui @@ -6,14 +6,48 @@ 0 0 - 499 - 386 + 490 + 422 Replace feature + + + + 0 + + + + + Ok + + + + + + + Cancel + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + @@ -529,37 +563,6 @@ - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Ok - - - - - - - Cancel - - - - - diff --git a/core/ui/toolbars/edit/featuretype_change.ui b/core/ui/toolbars/edit/featuretype_change.ui index 799d43e6f..1daa02b91 100644 --- a/core/ui/toolbars/edit/featuretype_change.ui +++ b/core/ui/toolbars/edit/featuretype_change.ui @@ -6,26 +6,26 @@ 0 0 - 630 - 294 + 642 + 354 Change feature type - - - - - - + + + + + + diff --git a/core/ui/toolbars/edit/workcat_manager.ui b/core/ui/toolbars/edit/workcat_manager.ui index 2d91c1710..01b5c7220 100644 --- a/core/ui/toolbars/edit/workcat_manager.ui +++ b/core/ui/toolbars/edit/workcat_manager.ui @@ -20,26 +20,6 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Close - - - @@ -60,6 +40,19 @@ + + + + + 0 + 0 + + + + Create + + + @@ -93,18 +86,32 @@ - - - - - 0 - 0 - + + + + 0 - - Create - - + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + + diff --git a/core/ui/toolbars/epa/dscenario_manager.ui b/core/ui/toolbars/epa/dscenario_manager.ui index de8ea0ecc..b5ec06833 100644 --- a/core/ui/toolbars/epa/dscenario_manager.ui +++ b/core/ui/toolbars/epa/dscenario_manager.ui @@ -20,26 +20,6 @@ - - - - Close - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -169,12 +149,38 @@ + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + + + btn_delete tbl_dscenario - btn_cancel diff --git a/core/ui/toolbars/epa/go2epa.ui b/core/ui/toolbars/epa/go2epa.ui index 9b2c390df..3391feded 100644 --- a/core/ui/toolbars/epa/go2epa.ui +++ b/core/ui/toolbars/epa/go2epa.ui @@ -15,18 +15,11 @@ - - - QLayout::SetDefaultConstraint + + + 0 - - - - - - - - + Qt::Horizontal @@ -39,7 +32,14 @@ - + + + + + + + + @@ -52,14 +52,14 @@ - + Cancel - + @@ -95,7 +95,7 @@ 0 0 571 - 489 + 494 @@ -419,7 +419,7 @@ 0 0 571 - 489 + 494 diff --git a/core/ui/toolbars/epa/go2epa_manager.ui b/core/ui/toolbars/epa/go2epa_manager.ui index 6e84e2984..29a4d7deb 100644 --- a/core/ui/toolbars/epa/go2epa_manager.ui +++ b/core/ui/toolbars/epa/go2epa_manager.ui @@ -57,30 +57,10 @@ - - - - Close - - - - - - - Filter by: Result id - - - - - - - - 0 - 0 - - - - Delete + + + + true @@ -97,35 +77,32 @@ - - + + - Set corporate + Show inp data - - + + - + 0 0 + + Delete + - - - - Qt::Horizontal - - - - 40 - 20 - + + + + Edit - + @@ -134,27 +111,57 @@ - - + + - Edit + Set corporate - - - - true + + + + Filter by: Result id - - - - Show inp data + + + + + 0 + 0 + + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + + + diff --git a/core/ui/toolbars/epa/go2epa_options.ui b/core/ui/toolbars/epa/go2epa_options.ui index c086ae47d..e896803ef 100644 --- a/core/ui/toolbars/epa/go2epa_options.ui +++ b/core/ui/toolbars/epa/go2epa_options.ui @@ -34,8 +34,8 @@ 0 0 - 396 - 336 + 404 + 349 @@ -124,8 +124,8 @@ 0 0 - 396 - 336 + 404 + 349 @@ -187,11 +187,11 @@ - - - QLayout::SetDefaultConstraint + + + 0 - + Qt::Horizontal @@ -204,7 +204,7 @@ - + @@ -217,7 +217,7 @@ - + diff --git a/core/ui/toolbars/epa/go2epa_selector.ui b/core/ui/toolbars/epa/go2epa_selector.ui index 8c43064b3..7fa5f90b8 100644 --- a/core/ui/toolbars/epa/go2epa_selector.ui +++ b/core/ui/toolbars/epa/go2epa_selector.ui @@ -14,6 +14,40 @@ Result compare selector + + + + 0 + + + + + Accept + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Cancel + + + + + @@ -279,37 +313,6 @@ - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Accept - - - - - - - Cancel - - - - - diff --git a/core/ui/toolbars/epa/nonvisual_controls.ui b/core/ui/toolbars/epa/nonvisual_controls.ui index f255755c2..6fb2c28ab 100644 --- a/core/ui/toolbars/epa/nonvisual_controls.ui +++ b/core/ui/toolbars/epa/nonvisual_controls.ui @@ -14,47 +14,6 @@ Simple Controls Editor - - - - QLayout::SetDefaultConstraint - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - OK - - - - - - - Cancel - - - - - - - - - Qt::Horizontal - - - @@ -111,6 +70,47 @@ + + + + Qt::Horizontal + + + + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + OK + + + + + + + Cancel + + + + + diff --git a/core/ui/toolbars/epa/nonvisual_curve.ui b/core/ui/toolbars/epa/nonvisual_curve.ui index e4782e984..1645b382d 100644 --- a/core/ui/toolbars/epa/nonvisual_curve.ui +++ b/core/ui/toolbars/epa/nonvisual_curve.ui @@ -14,47 +14,6 @@ Curve Editor - - - - QLayout::SetDefaultConstraint - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - OK - - - - - - - Cancel - - - - - - - - - Qt::Horizontal - - - @@ -217,6 +176,47 @@ + + + + Qt::Horizontal + + + + + + + 0 + + + + + OK + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Cancel + + + + + diff --git a/core/ui/toolbars/epa/nonvisual_lids.ui b/core/ui/toolbars/epa/nonvisual_lids.ui index bb8a7d54e..2ed7b62d5 100644 --- a/core/ui/toolbars/epa/nonvisual_lids.ui +++ b/core/ui/toolbars/epa/nonvisual_lids.ui @@ -913,8 +913,18 @@ - - + + + 0 + + + + + Cancel + + + + Qt::Horizontal @@ -927,21 +937,14 @@ - + OK - - - - Cancel - - - - + Help diff --git a/core/ui/toolbars/epa/nonvisual_manager.ui b/core/ui/toolbars/epa/nonvisual_manager.ui index 8ea9ecbad..13b117383 100644 --- a/core/ui/toolbars/epa/nonvisual_manager.ui +++ b/core/ui/toolbars/epa/nonvisual_manager.ui @@ -92,19 +92,6 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -148,13 +135,6 @@ - - - - Close - - - @@ -187,13 +167,39 @@ + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + + + txt_filter btn_duplicate btn_delete - btn_cancel diff --git a/core/ui/toolbars/epa/nonvisual_pattern_ud.ui b/core/ui/toolbars/epa/nonvisual_pattern_ud.ui index 61121399d..e075cb115 100644 --- a/core/ui/toolbars/epa/nonvisual_pattern_ud.ui +++ b/core/ui/toolbars/epa/nonvisual_pattern_ud.ui @@ -14,12 +14,19 @@ Pattern Editor - - - - QLayout::SetDefaultConstraint + + + + 0 - + + + + OK + + + + Qt::Horizontal @@ -32,14 +39,7 @@ - - - - OK - - - - + Cancel diff --git a/core/ui/toolbars/epa/nonvisual_pattern_ws.ui b/core/ui/toolbars/epa/nonvisual_pattern_ws.ui index 8972656f9..ec168013e 100644 --- a/core/ui/toolbars/epa/nonvisual_pattern_ws.ui +++ b/core/ui/toolbars/epa/nonvisual_pattern_ws.ui @@ -14,40 +14,6 @@ Pattern Editor - - - - QLayout::SetDefaultConstraint - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - OK - - - - - - - Cancel - - - - - @@ -252,6 +218,40 @@ + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + OK + + + + + + + Cancel + + + + + diff --git a/core/ui/toolbars/epa/nonvisual_print.ui b/core/ui/toolbars/epa/nonvisual_print.ui index 3d92af294..d9379bea2 100644 --- a/core/ui/toolbars/epa/nonvisual_print.ui +++ b/core/ui/toolbars/epa/nonvisual_print.ui @@ -36,7 +36,7 @@ - + diff --git a/core/ui/toolbars/epa/nonvisual_roughness.ui b/core/ui/toolbars/epa/nonvisual_roughness.ui index 150cb0915..a114cd7f9 100644 --- a/core/ui/toolbars/epa/nonvisual_roughness.ui +++ b/core/ui/toolbars/epa/nonvisual_roughness.ui @@ -7,47 +7,13 @@ 0 0 344 - 353 + 420 Rule-Based Controls Editor - - - - QLayout::SetDefaultConstraint - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - OK - - - - - - - Cancel - - - - - @@ -154,6 +120,40 @@ + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + OK + + + + + + + Cancel + + + + + diff --git a/core/ui/toolbars/epa/nonvisual_rules.ui b/core/ui/toolbars/epa/nonvisual_rules.ui index e00cdf945..d741f29cb 100644 --- a/core/ui/toolbars/epa/nonvisual_rules.ui +++ b/core/ui/toolbars/epa/nonvisual_rules.ui @@ -14,47 +14,6 @@ Rule-Based Controls Editor - - - - QLayout::SetDefaultConstraint - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - OK - - - - - - - Cancel - - - - - - - - - Qt::Horizontal - - - @@ -111,6 +70,47 @@ + + + + Qt::Horizontal + + + + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + OK + + + + + + + Cancel + + + + + diff --git a/core/ui/toolbars/epa/nonvisual_timeseries.ui b/core/ui/toolbars/epa/nonvisual_timeseries.ui index d63c7b1ea..adbc16658 100644 --- a/core/ui/toolbars/epa/nonvisual_timeseries.ui +++ b/core/ui/toolbars/epa/nonvisual_timeseries.ui @@ -14,12 +14,19 @@ Time Series Editor - - - - QLayout::SetDefaultConstraint + + + + Qt::Horizontal + + + + + + + 0 - + Qt::Horizontal @@ -32,14 +39,14 @@ - + OK - + Cancel @@ -48,13 +55,6 @@ - - - - Qt::Horizontal - - - diff --git a/core/ui/toolbars/om/mincut.ui b/core/ui/toolbars/om/mincut.ui index 9dc871e3e..467261e71 100644 --- a/core/ui/toolbars/om/mincut.ui +++ b/core/ui/toolbars/om/mincut.ui @@ -31,8 +31,8 @@ 0 0 - 574 - 652 + 578 + 666 @@ -929,15 +929,11 @@ - - - - - - - - - + + + 0 + + Qt::Horizontal @@ -950,21 +946,28 @@ - + + + + + + + + OK - + Cancel task - + Cancel @@ -1154,9 +1157,6 @@ scrollArea tbl_hydro txt_infolog - btn_accept - btn_cancel_task - btn_cancel diff --git a/core/ui/toolbars/om/mincut_composer.ui b/core/ui/toolbars/om/mincut_composer.ui index 1c1e963f3..eb850e582 100644 --- a/core/ui/toolbars/om/mincut_composer.ui +++ b/core/ui/toolbars/om/mincut_composer.ui @@ -115,7 +115,7 @@ - + diff --git a/core/ui/toolbars/om/mincut_connec.ui b/core/ui/toolbars/om/mincut_connec.ui index a91611480..379432dee 100644 --- a/core/ui/toolbars/om/mincut_connec.ui +++ b/core/ui/toolbars/om/mincut_connec.ui @@ -86,8 +86,11 @@ - - + + + 0 + + Qt::Horizontal @@ -100,7 +103,7 @@ - + Accept diff --git a/core/ui/toolbars/om/mincut_end.ui b/core/ui/toolbars/om/mincut_end.ui index aeba4796d..9db8951da 100644 --- a/core/ui/toolbars/om/mincut_end.ui +++ b/core/ui/toolbars/om/mincut_end.ui @@ -6,53 +6,14 @@ 0 0 - 380 - 577 + 365 + 467 Mincut end - - - - Qt::Horizontal - - - - 155 - 20 - - - - - - - - - 0 - 0 - - - - Accept - - - - - - - - 0 - 0 - - - - Cancel - - - @@ -468,12 +429,54 @@ + + + + 0 + + + + + + 0 + 0 + + + + Accept + + + + + + + Qt::Horizontal + + + + 155 + 20 + + + + + + + + + 0 + 0 + + + + Cancel + + + + + - - btn_accept - btn_cancel - diff --git a/core/ui/toolbars/om/mincut_hydrometer.ui b/core/ui/toolbars/om/mincut_hydrometer.ui index 6ad06f7e2..536057c2b 100644 --- a/core/ui/toolbars/om/mincut_hydrometer.ui +++ b/core/ui/toolbars/om/mincut_hydrometer.ui @@ -151,8 +151,11 @@ - - + + + 0 + + Qt::Horizontal @@ -165,7 +168,7 @@ - + Accept diff --git a/core/ui/toolbars/om/mincut_manager.ui b/core/ui/toolbars/om/mincut_manager.ui index 86eb4d8be..94295b6f3 100644 --- a/core/ui/toolbars/om/mincut_manager.ui +++ b/core/ui/toolbars/om/mincut_manager.ui @@ -39,6 +39,9 @@ + + + diff --git a/core/ui/toolbars/om/profile.ui b/core/ui/toolbars/om/profile.ui index 5c188b359..77bedd8d6 100644 --- a/core/ui/toolbars/om/profile.ui +++ b/core/ui/toolbars/om/profile.ui @@ -26,7 +26,7 @@ 0 0 317 - 403 + 394 @@ -146,6 +146,9 @@ + + + diff --git a/core/ui/toolbars/om/profile_list.ui b/core/ui/toolbars/om/profile_list.ui index a3f272db7..cf932a190 100644 --- a/core/ui/toolbars/om/profile_list.ui +++ b/core/ui/toolbars/om/profile_list.ui @@ -6,26 +6,13 @@ 0 0 - 249 - 300 + 247 + 329 Load profiles - - - - 160 - 270 - 75 - 23 - - - - Open - - @@ -49,18 +36,44 @@ - + - 75 + 29 270 - 75 - 23 + 201 + 41 - - Delete - + + + + + Open + + + + + + + Delete + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + diff --git a/core/ui/toolbars/om/selector_date.ui b/core/ui/toolbars/om/selector_date.ui index 7095bce92..a4929ac2c 100644 --- a/core/ui/toolbars/om/selector_date.ui +++ b/core/ui/toolbars/om/selector_date.ui @@ -6,7 +6,7 @@ 0 0 - 357 + 363 150 @@ -140,38 +140,41 @@ - - - - Qt::Horizontal - - - - 125 - 20 - - - - - - - - Close - - - - - - - OK - - + + + + + + Qt::Horizontal + + + + 125 + 20 + + + + + + + + OK + + + + + + + Close + + + + date_from - btn_close diff --git a/core/ui/toolbars/plan/netscenario.ui b/core/ui/toolbars/plan/netscenario.ui index a7846fdef..4e3be1d07 100644 --- a/core/ui/toolbars/plan/netscenario.ui +++ b/core/ui/toolbars/plan/netscenario.ui @@ -14,6 +14,13 @@ Dialog + + + + -1 + + + @@ -143,22 +150,22 @@ - - - - Qt::Horizontal - - - QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - -1 + + + + 0 - + + + + Qt::Horizontal + + + QDialogButtonBox::Cancel|QDialogButtonBox::Ok + + + + diff --git a/core/ui/toolbars/plan/netscenario_manager.ui b/core/ui/toolbars/plan/netscenario_manager.ui index acf78e219..783e3859b 100644 --- a/core/ui/toolbars/plan/netscenario_manager.ui +++ b/core/ui/toolbars/plan/netscenario_manager.ui @@ -20,13 +20,6 @@ - - - - Toggle active - - - @@ -34,26 +27,13 @@ - - - - + + + + QAbstractItemView::SingleSelection - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -67,17 +47,13 @@ - - - - Current netscenario + + + + - - - - - Update + @@ -106,50 +82,24 @@ - - - - - 0 - 0 - - - - - - - - - + + - + Current netscenario - - - - - 0 - 0 - - + + - Delete + Toggle active - - + + - Close - - - - - - - QAbstractItemView::SingleSelection + Update @@ -166,13 +116,23 @@ - - - + + + + + + + + + + 0 + 0 + + - + Delete @@ -183,6 +143,53 @@ + + + + + + + + + + + + 0 + 0 + + + + + + + + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + + + diff --git a/core/ui/toolbars/plan/psector.ui b/core/ui/toolbars/plan/psector.ui index a3035d8aa..3aa55a0b9 100644 --- a/core/ui/toolbars/plan/psector.ui +++ b/core/ui/toolbars/plan/psector.ui @@ -972,7 +972,7 @@ 0 0 916 - 301 + 304 @@ -1730,8 +1730,11 @@ - - + + + 0 + + Qt::Horizontal @@ -1744,14 +1747,14 @@ - + Accept - + Cancel diff --git a/core/ui/toolbars/plan/psector_duplicate.ui b/core/ui/toolbars/plan/psector_duplicate.ui index 483bd6c6b..df68aee7d 100644 --- a/core/ui/toolbars/plan/psector_duplicate.ui +++ b/core/ui/toolbars/plan/psector_duplicate.ui @@ -146,44 +146,51 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - Accept - - - - - - - - 0 - 0 - - - - Cancel + + + + 0 - + + + + + 0 + 0 + + + + Accept + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Cancel + + + + diff --git a/core/ui/toolbars/plan/psector_manager.ui b/core/ui/toolbars/plan/psector_manager.ui index 063a96cea..211a34117 100644 --- a/core/ui/toolbars/plan/psector_manager.ui +++ b/core/ui/toolbars/plan/psector_manager.ui @@ -14,6 +14,31 @@ Psector management + + + + + 380 + 16777215 + + + + + + + + + + Info: + + + + + + + + + @@ -26,15 +51,8 @@ - - - - Show inactive - - - - - + + 0 @@ -42,25 +60,33 @@ - Delete + Toggle active - - - - - 0 - 0 - + + + + Filter by: Psector name + + + + - + Merge - - + + + + Show inactive + + + + + 0 @@ -68,14 +94,14 @@ - Toggle active + Duplicate - - + + - Filter by: Psector name + Create @@ -92,19 +118,6 @@ - - - - - 0 - 0 - - - - Duplicate - - - @@ -118,33 +131,32 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - + + + + + 0 + 0 + + - Create + Delete - - + + + + + 0 + 0 + + - Close + @@ -161,37 +173,32 @@ - - - - Merge - - - - - - - - - - - 380 - 16777215 - - - - - - - - - - Info: - - - - - + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + + @@ -203,7 +210,6 @@ btn_update_psector btn_delete tbl_psm - btn_cancel diff --git a/core/ui/toolbars/plan/psector_rapport.ui b/core/ui/toolbars/plan/psector_rapport.ui index 758ef7b2a..2dcab396c 100644 --- a/core/ui/toolbars/plan/psector_rapport.ui +++ b/core/ui/toolbars/plan/psector_rapport.ui @@ -7,40 +7,13 @@ 0 0 479 - 304 + 241 Psector rapport - - - - Create - - - - - - - Qt::Horizontal - - - - 254 - 20 - - - - - - - - Cancel - - - @@ -157,12 +130,39 @@ + + + + + + Create + + + + + + + Qt::Horizontal + + + + 254 + 20 + + + + + + + + Cancel + + + + + - - btn_ok - btn_cancel - diff --git a/core/ui/toolbars/plan/psector_repair.ui b/core/ui/toolbars/plan/psector_repair.ui index 849b51212..e6b27394d 100644 --- a/core/ui/toolbars/plan/psector_repair.ui +++ b/core/ui/toolbars/plan/psector_repair.ui @@ -14,26 +14,12 @@ Dialog - - - - - - - true - - - - - - - - - - - - + + + 0 + + Qt::Horizontal @@ -46,14 +32,14 @@ - + Repair - + Close @@ -62,6 +48,23 @@ + + + + + + + true + + + + + + + + + + diff --git a/core/ui/toolbars/plan/replace_arc.ui b/core/ui/toolbars/plan/replace_arc.ui index 522171a4b..fd636649b 100644 --- a/core/ui/toolbars/plan/replace_arc.ui +++ b/core/ui/toolbars/plan/replace_arc.ui @@ -82,8 +82,8 @@ 0 0 - 98 - 89 + 327 + 118 @@ -99,8 +99,11 @@ - - + + + 0 + + Qt::Horizontal @@ -113,14 +116,14 @@ - + Accept - + Cancel diff --git a/core/ui/toolbars/utilities/config.ui b/core/ui/toolbars/utilities/config.ui index 052d15110..7bb90b183 100644 --- a/core/ui/toolbars/utilities/config.ui +++ b/core/ui/toolbars/utilities/config.ui @@ -22,8 +22,11 @@ - - + + + 0 + + Qt::Horizontal @@ -36,14 +39,14 @@ - + Accept - + Cancel @@ -325,8 +328,8 @@ 0 0 - 159 - 206 + 866 + 600 @@ -474,8 +477,8 @@ 0 0 - 233 - 130 + 866 + 600 @@ -643,8 +646,8 @@ 0 0 - 98 - 59 + 866 + 600 @@ -700,8 +703,8 @@ 0 0 - 177 - 130 + 866 + 600 diff --git a/core/ui/toolbars/utilities/create_style_group.ui b/core/ui/toolbars/utilities/create_style_group.ui index c63c5c279..f602e15d9 100644 --- a/core/ui/toolbars/utilities/create_style_group.ui +++ b/core/ui/toolbars/utilities/create_style_group.ui @@ -14,26 +14,6 @@ Add category - - - - Cancel - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -168,12 +148,39 @@ - - - - Accept + + + + 0 - + + + + Accept + + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Cancel + + + + @@ -183,8 +190,6 @@ idval descript sys_role - btn_add - btn_cancel diff --git a/core/ui/toolbars/utilities/csv.ui b/core/ui/toolbars/utilities/csv.ui index 7f2e4667b..92d20e4f9 100644 --- a/core/ui/toolbars/utilities/csv.ui +++ b/core/ui/toolbars/utilities/csv.ui @@ -38,7 +38,7 @@ - + diff --git a/core/ui/toolbars/utilities/mapzone_config.ui b/core/ui/toolbars/utilities/mapzone_config.ui index 631ea7442..91eaebcc2 100644 --- a/core/ui/toolbars/utilities/mapzone_config.ui +++ b/core/ui/toolbars/utilities/mapzone_config.ui @@ -14,38 +14,7 @@ Mapzone Config - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - OK - - - - - - - Cancel - - - - - - + @@ -158,7 +127,36 @@ - + + + + + 0 + 0 + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:5.5pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">Using this form you can configure graphconfig field for the selected mapzone. </span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9.75pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">How does it work?</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">1- Select the header of the mapzone using the nodeParent selection tool.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">2- Select the direction of the water using the toArc selection tool. Multiple selection is allowed.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">3- Press ADD to visualize your configuration on the Preview. If there are more headers, repeat the process and they will be added to the Preview.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">4- If you want to configure a node that will always be closed for this mapzone, select it using the forceClosed tool and ADD.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">To remove some wrong configuration, you have to select the affected nodeParent and click REMOVE. This node and its related toArc will be deleted from the Preview.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9.75pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">Click OK to end set your Preview as the value on graphconfig field.</span></p></body></html> + + + + @@ -200,34 +198,39 @@ - - - - - 0 - 0 - - - - true - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">Using this form you can configure graphconfig field for the selected mapzone. </span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9.75pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">How does it work?</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">1- Select the header of the mapzone using the nodeParent selection tool.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">2- Select the direction of the water using the toArc selection tool. Multiple selection is allowed.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">3- Press ADD to visualize your configuration on the Preview. If there are more headers, repeat the process and they will be added to the Preview.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">4- If you want to configure a node that will always be closed for this mapzone, select it using the forceClosed tool and ADD.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">To remove some wrong configuration, you have to select the affected nodeParent and click REMOVE. This node and its related toArc will be deleted from the Preview.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9.75pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">Click OK to end set your Preview as the value on graphconfig field.</span></p></body></html> + + + + 0 - + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + OK + + + + + + + Cancel + + + + diff --git a/core/ui/toolbars/utilities/mapzone_manager.ui b/core/ui/toolbars/utilities/mapzone_manager.ui index c387930e4..18cd73fe9 100644 --- a/core/ui/toolbars/utilities/mapzone_manager.ui +++ b/core/ui/toolbars/utilities/mapzone_manager.ui @@ -81,13 +81,6 @@ - - - - Close - - - @@ -114,19 +107,6 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -187,13 +167,39 @@ + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + + + txt_name btn_config btn_delete - btn_cancel diff --git a/core/ui/toolbars/utilities/print.ui b/core/ui/toolbars/utilities/print.ui index 14294e1cd..8ee1e34b5 100644 --- a/core/ui/toolbars/utilities/print.ui +++ b/core/ui/toolbars/utilities/print.ui @@ -14,22 +14,37 @@ Fastprint + + + + Map options: + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - + + + 0 + + Qt::NoFocus @@ -39,7 +54,7 @@ - + Qt::NoFocus @@ -49,7 +64,20 @@ - + + + + Qt::Horizontal + + + + 40 + 20 + + + + + Qt::NoFocus @@ -73,31 +101,6 @@ - - - - Map options: - - - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - diff --git a/core/ui/toolbars/utilities/project_check.ui b/core/ui/toolbars/utilities/project_check.ui index 6a330680d..17ff0be04 100644 --- a/core/ui/toolbars/utilities/project_check.ui +++ b/core/ui/toolbars/utilities/project_check.ui @@ -14,30 +14,6 @@ Check project - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Accept - - - - - @@ -85,6 +61,33 @@ + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Accept + + + + + diff --git a/core/ui/toolbars/utilities/style_manager.ui b/core/ui/toolbars/utilities/style_manager.ui index fae766106..4210e527b 100644 --- a/core/ui/toolbars/utilities/style_manager.ui +++ b/core/ui/toolbars/utilities/style_manager.ui @@ -20,61 +20,40 @@ - - - - Close - - - - - - - true - - - - - - - Filter by: layername - - - - - + + 0 0 + + + 150 + 0 + + - - + + 0 0 - - - 150 - 0 - - - + Delete style - - + + 0 @@ -82,7 +61,7 @@ - + Update style @@ -109,8 +88,8 @@ - - + + 0 @@ -118,12 +97,26 @@ - Delete style + Add style - - + + + + Filter by: layername + + + + + + + true + + + + + 0 @@ -131,12 +124,12 @@ - Update style + - - + + 0 @@ -144,7 +137,7 @@ - Add style + @@ -161,19 +154,6 @@ - - - - Qt::Horizontal - - - - 40 - 20 - - - - @@ -181,6 +161,33 @@ + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + + + diff --git a/core/ui/toolbars/utilities/toolbox.ui b/core/ui/toolbars/utilities/toolbox.ui index d3c45b2bd..c7f03b7a6 100644 --- a/core/ui/toolbars/utilities/toolbox.ui +++ b/core/ui/toolbars/utilities/toolbox.ui @@ -35,6 +35,9 @@ + + + diff --git a/core/ui/toolbars/utilities/toolbox_reports.ui b/core/ui/toolbars/utilities/toolbox_reports.ui index 7cdd0eacb..eceb428d8 100644 --- a/core/ui/toolbars/utilities/toolbox_reports.ui +++ b/core/ui/toolbars/utilities/toolbox_reports.ui @@ -40,7 +40,7 @@ - + true @@ -117,7 +117,7 @@ - + diff --git a/core/ui/toolbars/utilities/toolbox_tool.ui b/core/ui/toolbars/utilities/toolbox_tool.ui index 38183a9f1..7a90d24ac 100644 --- a/core/ui/toolbars/utilities/toolbox_tool.ui +++ b/core/ui/toolbars/utilities/toolbox_tool.ui @@ -14,6 +14,54 @@ + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + + + + + + + Cancel + + + + + + + Run + + + + + + + Close + + + + + @@ -163,51 +211,6 @@ - - - - - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Run - - - - - - - Cancel - - - - - - - Close - - - - - diff --git a/core/ui/toolbars/utilities/workspace_create.ui b/core/ui/toolbars/utilities/workspace_create.ui index 8ab38380b..73d6a1508 100644 --- a/core/ui/toolbars/utilities/workspace_create.ui +++ b/core/ui/toolbars/utilities/workspace_create.ui @@ -14,45 +14,6 @@ Create new workspace - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - - 0 - 0 - - - - Accept - - - - - - - - 0 - 0 - - - - Cancel - - - @@ -157,6 +118,52 @@ + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + + 0 + 0 + + + + Accept + + + + + + + + 0 + 0 + + + + Cancel + + + + + diff --git a/core/ui/toolbars/utilities/workspace_manager.ui b/core/ui/toolbars/utilities/workspace_manager.ui index d13212678..e768e3813 100644 --- a/core/ui/toolbars/utilities/workspace_manager.ui +++ b/core/ui/toolbars/utilities/workspace_manager.ui @@ -6,8 +6,8 @@ 0 0 - 1003 - 786 + 1008 + 788 @@ -61,8 +61,8 @@ - - + + 0 @@ -70,45 +70,39 @@ - Set current + Toggle privacy - - + + + + QAbstractItemView::SingleSelection + + + + + - + 0 0 - Delete + - - + + - Filter by: Workspace name + Update - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - + + 0 @@ -116,21 +110,20 @@ - + Create - - - - Update + + + + + 0 + 0 + - - - - - Close + Delete @@ -147,8 +140,8 @@ - - + + 0 @@ -156,32 +149,19 @@ - Create - - - - - - - QAbstractItemView::SingleSelection + Set current - - - - - 0 - 0 - - + + - + Filter by: Workspace name - - + + 0 @@ -189,10 +169,37 @@ - Toggle privacy + + + + + 0 + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Close + + + + + @@ -203,7 +210,6 @@ btn_current btn_delete tbl_wrkspcm - btn_cancel From 2699d765801f438970000db89b7edf8cacc1f035 Mon Sep 17 00:00:00 2001 From: Ferran Date: Thu, 19 Sep 2024 13:41:09 +0200 Subject: [PATCH 11/26] feat(mapzone_manager): add 'ignore' to mapzone config --- core/toolbars/utilities/mapzone_manager.py | 96 ++++++++++++- core/ui/toolbars/utilities/mapzone_config.ui | 134 ++++++++++++++----- dbmodel | 2 +- 3 files changed, 198 insertions(+), 34 deletions(-) diff --git a/core/toolbars/utilities/mapzone_manager.py b/core/toolbars/utilities/mapzone_manager.py index 240847c44..83e56aa06 100644 --- a/core/toolbars/utilities/mapzone_manager.py +++ b/core/toolbars/utilities/mapzone_manager.py @@ -268,6 +268,7 @@ def manage_config(self, dialog, tableview=None): tools_gw.add_icon(self.config_dlg.btn_snapping_nodeParent, "137") tools_gw.add_icon(self.config_dlg.btn_snapping_toArc, "137") tools_gw.add_icon(self.config_dlg.btn_snapping_forceClosed, "137") + tools_gw.add_icon(self.config_dlg.btn_snapping_ignore, "137") # Set variables self._reset_config_vars() @@ -306,6 +307,16 @@ def manage_config(self, dialog, tableview=None): self.config_dlg.btn_remove_forceClosed.clicked.connect( partial(self._remove_force_closed, self.config_dlg) ) + # Ignore + self.config_dlg.btn_snapping_ignore.clicked.connect( + partial(self.get_snapped_feature_id, self.config_dlg, self.config_dlg.btn_snapping_ignore, + 'v_edit_node', 'ignore', None, self.child_type)) + self.config_dlg.btn_add_ignore.clicked.connect( + partial(self._add_ignore, self.config_dlg) + ) + self.config_dlg.btn_remove_ignore.clicked.connect( + partial(self._remove_ignore, self.config_dlg) + ) # Preview self.config_dlg.btn_clear_preview.clicked.connect(partial(self._clear_preview, self.config_dlg)) # Dialog buttons @@ -366,6 +377,11 @@ def _reset_config_vars(self, mode=0): tools_qt.set_widget_text(self.config_dlg, 'txt_forceClosed', '') tools_qt.set_widget_enabled(self.config_dlg, 'btn_add_forceClosed', False) tools_qt.set_widget_enabled(self.config_dlg, self.config_dlg.btn_remove_forceClosed, False) + if mode in (0, 4): + self.ignore_list = set() + tools_qt.set_widget_text(self.config_dlg, 'txt_ignore', '') + tools_qt.set_widget_enabled(self.config_dlg, 'btn_add_ignore', False) + tools_qt.set_widget_enabled(self.config_dlg, self.config_dlg.btn_remove_ignore, False) def get_snapped_feature_id(self, dialog, action, layer_name, option, widget_name, child_type): """ Snap feature and set a value into dialog """ @@ -440,7 +456,7 @@ def _get_id(self, dialog, action, option, emit_point, child_type, point, event): # @options{'key':['att to get from snapped feature', 'function to call']} options = {'nodeParent': ['node_id', '_set_node_parent'], 'toArc': ['arc_id', '_set_to_arc'], - 'forceClosed': ['node_id', '_set_force_closed']} + 'forceClosed': ['node_id', '_set_force_closed'], 'ignore': ['node_id', '_set_ignore']} if event == Qt.RightButton: self._cancel_snapping_tool(dialog, action) @@ -521,6 +537,20 @@ def _set_force_closed(self, feat_id): tools_qt.set_widget_enabled(self.config_dlg, self.config_dlg.btn_add_forceClosed, True) tools_qt.set_widget_enabled(self.config_dlg, self.config_dlg.btn_remove_forceClosed, True) + def _set_ignore(self, feat_id): + """ + Function called in def _get_id(self, dialog, action, option, point, event): + getattr(self, options[option][1])(feat_id) + + :param feat_id: Id of the snapped feature + """ + # Set variable, set widget text and enable add button + self.ignore_list.add(feat_id) + ignore_list_aux = [int(ignore) for ignore in self.ignore_list] + tools_qt.set_widget_text(self.config_dlg, 'txt_ignore', f"{ignore_list_aux}") + tools_qt.set_widget_enabled(self.config_dlg, self.config_dlg.btn_add_ignore, True) + tools_qt.set_widget_enabled(self.config_dlg, self.config_dlg.btn_remove_ignore, True) + def _add_node_parent(self, dialog): """ ADD button for nodeParent """ @@ -649,6 +679,70 @@ def _remove_force_closed(self, dialog): self._cancel_snapping_tool(dialog, dialog.btn_add_forceClosed) self._reset_config_vars(3) + def _add_ignore(self, dialog): + """ ADD button for ignore """ + + ignore_list = json.dumps(list(self.ignore_list)) + preview = tools_qt.get_text(dialog, 'txt_preview') + + parameters = f'"action": "ADD", "configZone": "{self.mapzone_type}", "mapzoneId": "{self.mapzone_id}", ' \ + f'"ignore": {ignore_list}' + if self.netscenario_id is not None: + parameters += f', "netscenarioId": {self.netscenario_id}' + if preview: + parameters += f', "config": {preview}' + extras = f'"parameters": {{{parameters}}}' + body = tools_gw.create_body(extras=extras) + json_result = tools_gw.execute_procedure('gw_fct_config_mapzones', body) + if json_result is None: + return + + if 'status' in json_result and json_result['status'] == 'Accepted': + if json_result['message']: + level = 1 + if 'level' in json_result['message']: + level = int(json_result['message']['level']) + tools_qgis.show_message(json_result['message']['text'], level, dialog=dialog) + + preview = json_result['body']['data'].get('preview') + if preview: + tools_qt.set_widget_text(dialog, 'txt_preview', json.dumps(preview)) + + self._cancel_snapping_tool(dialog, dialog.btn_add_ignore) + self._reset_config_vars(4) + + def _remove_ignore(self, dialog): + """ REMOVE button for ignore """ + + ignore_list = json.dumps(list(self.ignore_list)) + preview = tools_qt.get_text(dialog, 'txt_preview') + + parameters = f'"action": "REMOVE", "configZone": "{self.mapzone_type}", "mapzoneId": "{self.mapzone_id}", ' \ + f'"ignore": {ignore_list}' + if self.netscenario_id is not None: + parameters += f', "netscenarioId": {self.netscenario_id}' + if preview: + parameters += f', "config": {preview}' + extras = f'"parameters": {{{parameters}}}' + body = tools_gw.create_body(extras=extras) + json_result = tools_gw.execute_procedure('gw_fct_config_mapzones', body) + if json_result is None: + return + + if 'status' in json_result and json_result['status'] == 'Accepted': + if json_result['message']: + level = 1 + if 'level' in json_result['message']: + level = int(json_result['message']['level']) + tools_qgis.show_message(json_result['message']['text'], level, dialog=dialog) + + preview = json_result['body']['data'].get('preview') + if preview: + tools_qt.set_widget_text(dialog, 'txt_preview', json.dumps(preview)) + + self._cancel_snapping_tool(dialog, dialog.btn_remove_ignore) + self._reset_config_vars(4) + def _clear_preview(self, dialog): """ Set preview textbox to '' """ diff --git a/core/ui/toolbars/utilities/mapzone_config.ui b/core/ui/toolbars/utilities/mapzone_config.ui index 91eaebcc2..ecefd191d 100644 --- a/core/ui/toolbars/utilities/mapzone_config.ui +++ b/core/ui/toolbars/utilities/mapzone_config.ui @@ -16,10 +16,16 @@ - - + + + + + 0 + 0 + + - nodeParent: + @@ -43,17 +49,10 @@ - - - - false - - - - - - - true + + + + forceClosed: @@ -64,28 +63,29 @@ - - - - - 0 - 0 - - + + - + nodeParent: - - + + - forceClosed: + ADD - - + + + + true + + + + + 0 @@ -104,13 +104,20 @@ - - + + ADD + + + + false + + + @@ -118,13 +125,47 @@ - - + + + + + 0 + 0 + + + + + + + + + + + ignore + + + + + + + true + + + + + ADD + + + + REMOVE + + + @@ -198,10 +239,39 @@ p, li { white-space: pre-wrap; } +<<<<<<< Updated upstream 0 +======= + + + + + 0 + 0 + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">Using this form you can configure graphconfig field for the selected mapzone. </span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9.75pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">How does it work?</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">1- Select the header of the mapzone using the nodeParent selection tool.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">2- Select the direction of the water using the toArc selection tool. Multiple selection is allowed.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">3- Press ADD to visualize your configuration on the Preview. If there are more headers, repeat the process and they will be added to the Preview.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">4- If you want to configure a node that will always be closed for this mapzone, select it using the forceClosed tool and ADD.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">To remove some wrong configuration, you have to select the affected nodeParent and click REMOVE. This node and its related toArc will be deleted from the Preview.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9.75pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">Click OK to end set your Preview as the value on graphconfig field.</span></p></body></html> +>>>>>>> Stashed changes diff --git a/dbmodel b/dbmodel index 400241193..e8c3e4274 160000 --- a/dbmodel +++ b/dbmodel @@ -1 +1 @@ -Subproject commit 400241193d8117c4c1e1d52c10ed9fc2390764e7 +Subproject commit e8c3e427401f77122e68060f352e087d0efcf633 From f6a4c355b654d35b1b8d1e2413a59c6c54f257fe Mon Sep 17 00:00:00 2001 From: Ferran Date: Fri, 20 Sep 2024 09:23:06 +0200 Subject: [PATCH 12/26] fix(mapzone_config.ui): fix last commit --- core/ui/toolbars/utilities/mapzone_config.ui | 341 ++++++++----------- 1 file changed, 151 insertions(+), 190 deletions(-) diff --git a/core/ui/toolbars/utilities/mapzone_config.ui b/core/ui/toolbars/utilities/mapzone_config.ui index ecefd191d..c7b61ea34 100644 --- a/core/ui/toolbars/utilities/mapzone_config.ui +++ b/core/ui/toolbars/utilities/mapzone_config.ui @@ -6,53 +6,125 @@ 0 0 - 658 - 492 + 865 + 566 Mapzone Config - - - - - - - 0 - 0 - - + + + + - + Preview: - - + + + + + + Qt::Horizontal + + + + 40 + 20 + + + + + + + + Clear Preview + + + + + + + true - - - - - 0 - 0 - + + + + + + + 0 + 0 + + + + true + + + <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> +<html><head><meta name="qrichtext" content="1" /><style type="text/css"> +p, li { white-space: pre-wrap; } +</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">Using this form you can configure graphconfig field for the selected mapzone. </span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9.75pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">How does it work?</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">1- Select the header of the mapzone using the nodeParent selection tool.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">2- Select the direction of the water using the toArc selection tool. Multiple selection is allowed.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">3- Press ADD to visualize your configuration on the Preview. If there are more headers, repeat the process and they will be added to the Preview.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">4- If you want to configure a node that will always be closed for this mapzone, select it using the forceClosed tool and ADD.</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">To remove some wrong configuration, you have to select the affected nodeParent and click REMOVE. This node and its related toArc will be deleted from the Preview.</span></p> +<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9.75pt;"><br /></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">Click OK to end set your Preview as the value on graphconfig field.</span></p></body></html> + + + + + + + 0 + + + + + Qt::Horizontal + + + 40 + 20 + + + + + + - + OK - - + + - forceClosed: + Cancel + + + + + + + + + + + nodeParent: @@ -63,17 +135,17 @@ - - - - nodeParent: + + + + false - - + + - ADD + forceClosed: @@ -84,19 +156,20 @@ - - - - - 0 - 0 - - + + + + + + true + + + @@ -104,29 +177,41 @@ - - + + ADD - - - - false + + + + + 0 + 0 + + + + - - + + + + + 0 + 0 + + - REMOVE + - - + + 0 @@ -138,6 +223,13 @@ + + + + ADD + + + @@ -146,16 +238,12 @@ - - - true - - + - - + + - ADD + REMOVE @@ -166,137 +254,10 @@ - - - - - - - 0 - 0 - - - - true - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:5.5pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">Using this form you can configure graphconfig field for the selected mapzone. </span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9.75pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">How does it work?</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">1- Select the header of the mapzone using the nodeParent selection tool.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">2- Select the direction of the water using the toArc selection tool. Multiple selection is allowed.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">3- Press ADD to visualize your configuration on the Preview. If there are more headers, repeat the process and they will be added to the Preview.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">4- If you want to configure a node that will always be closed for this mapzone, select it using the forceClosed tool and ADD.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">To remove some wrong configuration, you have to select the affected nodeParent and click REMOVE. This node and its related toArc will be deleted from the Preview.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9.75pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">Click OK to end set your Preview as the value on graphconfig field.</span></p></body></html> - - - - - - - - - Preview: - - - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Clear Preview - - - - - - - - - true - - - - - -<<<<<<< Updated upstream - - - - 0 -======= - - - - - 0 - 0 - - - - true - - - <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> -<html><head><meta name="qrichtext" content="1" /><style type="text/css"> -p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:7.8pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">Using this form you can configure graphconfig field for the selected mapzone. </span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9.75pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">How does it work?</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">1- Select the header of the mapzone using the nodeParent selection tool.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">2- Select the direction of the water using the toArc selection tool. Multiple selection is allowed.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">3- Press ADD to visualize your configuration on the Preview. If there are more headers, repeat the process and they will be added to the Preview.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">4- If you want to configure a node that will always be closed for this mapzone, select it using the forceClosed tool and ADD.</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">To remove some wrong configuration, you have to select the affected nodeParent and click REMOVE. This node and its related toArc will be deleted from the Preview.</span></p> -<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:9.75pt;"><br /></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-size:9.75pt;">Click OK to end set your Preview as the value on graphconfig field.</span></p></body></html> ->>>>>>> Stashed changes - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - OK - - - - - + + - Cancel + ADD From 8d13b7e8b83e58447d02bd704d9a1ea0725bdb21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nico=20P=C3=A9rez?= Date: Fri, 20 Sep 2024 10:26:03 +0200 Subject: [PATCH 13/26] fix(9fcf248): save in first tab changes in info_feature.ui --- core/ui/toolbars/basic/info_feature.ui | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/ui/toolbars/basic/info_feature.ui b/core/ui/toolbars/basic/info_feature.ui index 774bc9e25..d984f6c0e 100644 --- a/core/ui/toolbars/basic/info_feature.ui +++ b/core/ui/toolbars/basic/info_feature.ui @@ -78,7 +78,7 @@ QTabWidget::Rounded - 4 + 0 @@ -116,8 +116,8 @@ 0 0 - 98 - 28 + 734 + 365 From 37043d2da782bfb9fca1e2e872640bc838984004 Mon Sep 17 00:00:00 2001 From: Ferran Date: Fri, 20 Sep 2024 11:29:44 +0200 Subject: [PATCH 14/26] fix(advanced_menu): remove toolbars_shortcuts from init.config --- config/giswater.config | 2 +- config/user_params.config | 56 +++------------------------------------ 2 files changed, 5 insertions(+), 53 deletions(-) diff --git a/config/giswater.config b/config/giswater.config index 808b7d3ca..6bcad26bb 100644 --- a/config/giswater.config +++ b/config/giswater.config @@ -5,7 +5,7 @@ use_notify = TRUE # Use postgres notify show_help = 0 locale = en_US, es_ES, ca_ES, pt_BR, pt_PT, fr_FR deprecated_section_init = psector_rapport, cadtools, search, qgis_toolbar_hidebuttons, dialogs, btn_search, - current_selections, action_shortcuts + current_selections, action_shortcuts, toolbars_shortcuts deprecated_section_session = psector_rapport, cadtools, visit, import_file, search deprecated_vars_init = system.super_user, system.log_sql_shortcut, system.log_level, system.log_sql, system.db_limit_characters, system.check_backend_function, system.user_level, system.log_limit_characters, diff --git a/config/user_params.config b/config/user_params.config index 5c3adc898..8be997300 100644 --- a/config/user_params.config +++ b/config/user_params.config @@ -29,58 +29,6 @@ shortcut_reset_plugin = None #Shortcut to perform a reset of Giswater shortcut_open_curselectors = None #Shortcut to open the current selectors docker shortcut_toggle_log_db = Alt+1 #Shortcut to show DB&Notify logs -[init.toolbars_shortcuts] -# basic -37 = None #GwInfoButton -142 = None #GwSelectorButton -143 = None #GwSearchButton -# om -26 = None #GwMincutButton -27 = None #GwMincutManagerButton -43 = None #GwProfileButton -56 = None #GwFlowTraceButton -57 = None #GwFlowExitButton -64 = None #GwVisitButton -65 = None #GwVisitManagerButton -84 = None #GwDateSelectorButton -# edit -01 = None #GwPointAddButton -02 = None #GwArcAddButton -16 = None #GwArcDivideButton -17 = None #GwArcFusionButton -20 = None #GwConnectLinkButton -28 = None #GwFeatureTypeChangeButton -33 = None #GwElementButton -34 = None #GwDocumentButton -39 = None #GwDimensioningButton -44 = None #GwFeatureReplaceButton -66 = None #GwDocumentManagerButton -67 = None #GwElementManagerButton -68 = None #GwFeatureEndButton -69 = None #GwFeatureDeleteButton -# cad -71 = None #GwAuxCircleAddButton -72 = None #GwAuxPointAddButton -# epa -23 = None #GwGo2EpaButton -25 = None #GwGo2EpaManagerButton -29 = None #GwGo2EpaSelectorButton -215 = None #GwDscenarioManagerButton -# plan -45 = None #GwPsectorButton -46 = None #GwPsectorManagerButton -# utilities -58 = None #GwPrintButton -59 = None #GwProjectCheckButton -83 = None #GwCSVButton -99 = None #GwConfigButton -206 = None #GwToolBoxButton -214 = None #GwWorkspaceManagerButton -# toc -306 = None #GwAddChildLayerButton -218 = None -308 = None - [init.toolbars_position] _toolbars_order = basic, om, edit, cad, epa, plan, utilities, toc @@ -329,6 +277,8 @@ _dlg_style_manager_width = None _dlg_style_manager_height = None _dlg_feature_add_width = None _dlg_feature_add_height = None +_dlg_nonvisual_roughness_width = None +_dlg_nonvisual_roughness_height = None [session.dialogs_position] dlg_admin_translation_x = None @@ -537,6 +487,8 @@ _dlg_style_manager_x = None _dlg_style_manager_y = None _dlg_feature_add_x = None _dlg_feature_add_y = None +_dlg_nonvisual_roughness_x = None +_dlg_nonvisual_roughness_y = None [session.dialogs_tab] _dlg_selector_basic = None From d7dba0fc054f443622c0622786a20ef9d3f694b7 Mon Sep 17 00:00:00 2001 From: Ferran Date: Fri, 20 Sep 2024 11:31:35 +0200 Subject: [PATCH 15/26] fix(advanced_menu): make value 'None' when empty parameters --- core/load_project_menu.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/load_project_menu.py b/core/load_project_menu.py index 2003d3a20..7aca79e16 100644 --- a/core/load_project_menu.py +++ b/core/load_project_menu.py @@ -254,6 +254,8 @@ def _set_config_value(self, item, column): section = item.parent().text(0) parameter = item.text(1) value = item.text(2) + if value == '': + value = "None" tools_gw.set_config_parser(section, parameter, value, file_name=file_name, prefix=False, chk_user_params=False) From 1277bd31b8881019e7fe8187fa6d2e86e7668936 Mon Sep 17 00:00:00 2001 From: edgarfuste <34737125+edgarfuste@users.noreply.github.com> Date: Fri, 20 Sep 2024 12:38:54 +0200 Subject: [PATCH 16/26] fix: Manage refresh mincut before change valve status --- core/shared/mincut.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/core/shared/mincut.py b/core/shared/mincut.py index 2f38e895a..b82682d77 100644 --- a/core/shared/mincut.py +++ b/core/shared/mincut.py @@ -2085,7 +2085,7 @@ def _mincut_task_finished(self, snapped_point, elem_type, element_id, signal): self.dlg_mincut.btn_accept.setEnabled(True) - def _refresh_mincut(self, triggered=None, action="mincutNetwork"): + def _refresh_mincut(self, triggered=None, action="mincutNetwork", zoom=True): """ B2-125: Refresh current mincut """ # Manage if task is already running @@ -2125,10 +2125,10 @@ def _refresh_mincut(self, triggered=None, action="mincutNetwork"): self.mincut_task = GwAutoMincutTask("Mincut execute", self, element_id, action=action, timer=self.timer) QgsApplication.taskManager().addTask(self.mincut_task) QgsApplication.taskManager().triggerTask(self.mincut_task) - self.mincut_task.task_finished.connect(partial(self._refresh_mincut_finished)) + self.mincut_task.task_finished.connect(partial(self._refresh_mincut_finished, zoom)) - def _refresh_mincut_finished(self, signal): + def _refresh_mincut_finished(self, zoom, signal): try: self.dlg_mincut.btn_cancel_task.hide() @@ -2155,7 +2155,7 @@ def _refresh_mincut_finished(self, signal): # Zoom to rectangle (zoom to mincut) polygon = complet_result['body']['data'].get('geometry') - if polygon: + if polygon and zoom: polygon = polygon[9:len(polygon) - 2] polygon = polygon.split(',') if polygon[0] == '': @@ -2246,6 +2246,7 @@ def _custom_mincut_snapping(self, action, point, btn): self._custom_mincut_execute(element_id) elif action.objectName() == "actionChangeValveStatus": self._change_valve_status_execute(element_id) + self._refresh_mincut(zoom=False) tools_qgis.refresh_map_canvas(True) self.set_visible_mincut_layers() self._remove_selection() From f9b183b9ac3a02d64254141aeb3304bf73338fe4 Mon Sep 17 00:00:00 2001 From: smaspons Date: Mon, 23 Sep 2024 10:27:45 +0200 Subject: [PATCH 17/26] fix(tools_gw): check if dialog isdeleted (fixes `C/C++ object has been deleted`) --- core/utils/tools_gw.py | 3 ++- libs | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/core/utils/tools_gw.py b/core/utils/tools_gw.py index b9d66111b..df6b52cd0 100644 --- a/core/utils/tools_gw.py +++ b/core/utils/tools_gw.py @@ -16,6 +16,7 @@ from typing import Literal, Dict import webbrowser import xml.etree.ElementTree as ET +from sip import isdeleted if 'nt' in sys.builtin_module_names: import ctypes @@ -3176,7 +3177,7 @@ def set_tablemodel_config(dialog, widget, table_name, sort_order=0, schema_name= """ Configuration of tables. Set visibility and width of columns """ widget = tools_qt.get_widget(dialog, widget) - if not widget: + if not widget or isdeleted(widget): return widget if schema_name is not None: diff --git a/libs b/libs index 1a519e572..b0e738a16 160000 --- a/libs +++ b/libs @@ -1 +1 @@ -Subproject commit 1a519e572660bc8a528053fe150635b8c54ceafe +Subproject commit b0e738a1640e7b3a40aae489e503698199fd1edc From f6d73d7cf91239290bb08e1f628ceec661a2eb3e Mon Sep 17 00:00:00 2001 From: Ferran Date: Mon, 23 Sep 2024 14:06:02 +0200 Subject: [PATCH 18/26] fix(featuretype_change): create dinamic dialog --- .../edit/featuretype_change_button.py | 133 ++++++++---------- core/ui/toolbars/edit/featuretype_change.ui | 23 ++- core/utils/tools_gw.py | 45 +++++- dbmodel | 2 +- 4 files changed, 123 insertions(+), 80 deletions(-) diff --git a/core/toolbars/edit/featuretype_change_button.py b/core/toolbars/edit/featuretype_change_button.py index 14d3ae6a6..693cd48ee 100644 --- a/core/toolbars/edit/featuretype_change_button.py +++ b/core/toolbars/edit/featuretype_change_button.py @@ -176,92 +176,76 @@ def _open_dialog(self): feature = f'"tableName":"{self.tablename}", "id":"{self.feature_id}"' body = tools_gw.create_body(feature = feature) - json_result = tools_gw.execute_procedure('gw_fct_getfeaturereplace', body) + json_result = tools_gw.execute_procedure('gw_fct_getchangefeaturetype', body) self.dlg_change = GwFeatureTypeChangeUi(self) tools_gw.load_settings(self.dlg_change) self._manage_dlg_widgets(self.dlg_change, json_result) tools_gw.open_dialog(self.dlg_change, 'featuretype_change') - def _manage_dlg_widgets(self, dialog,complet_result): + def _manage_dlg_widgets(self, dialog, complet_result): """ Creates and populates all the widgets """ layout_list = [] widget_offset = 0 prev_layout = "" + layout_orientations = {} + + + for layout_name, layout_info in complet_result['body']['form']['layouts'].items(): + orientation = layout_info.get('lytOrientation') + if orientation: + layout_orientations[layout_name] = orientation + for field in complet_result['body']['data']['fields']: - if field.get('hidden'): - continue - if field['widgettype'] is "button": + if field['columnname'] == 'btn_catalog' and self.feature_type == 'gully': continue + else: + if field.get('hidden'): + continue - if field.get('widgetcontrols') and field['widgetcontrols'].get('hiddenWhenNull') \ - and field.get('value') in (None, ''): - continue - label, widget = tools_gw.set_widgets(dialog, complet_result, field, self.tablename, self) - if widget is None: - continue + if field['widgettype'] is "button": + continue - layout = dialog.findChild(QGridLayout, field['layoutname']) - if layout is not None: - if layout.objectName() != prev_layout: - widget_offset = 0 - prev_layout = layout.objectName() - # Take the QGridLayout with the intention of adding a QSpacerItem later - if layout not in layout_list and layout.objectName() in ('lyt_main_1', 'lyt_main_2', 'lyt_main_3','lyt_buttons'): - layout_list.append(layout) - - if field['layoutorder'] is None: - message = "The field layoutorder is not configured for" - msg = f"formname:{self.tablename}, columnname:{field['columnname']}" - tools_qgis.show_message(message, 2, parameter=msg, dialog=dialog) + if field.get('widgetcontrols') and field['widgetcontrols'].get('hiddenWhenNull') \ + and field.get('value') in (None, ''): + continue + label, widget = tools_gw.set_widgets(dialog, complet_result, field, self.tablename, self) + if widget is None: continue - # Manage widget and label positions - label_pos = field['widgetcontrols']['labelPosition'] if ( - 'widgetcontrols' in field and field['widgetcontrols'] and 'labelPosition' in field[ - 'widgetcontrols']) else None - widget_pos = field['layoutorder'] + widget_offset - - # The data tab is somewhat special (it has 2 columns) - if 'lyt_data' in layout.objectName() or 'lyt_epa_data' in layout.objectName(): - tools_gw.add_widget(dialog, field, label, widget) - # If the widget has a label - elif label: - # If it has a labelPosition configured - if label_pos is not None: - if label_pos == 'top': - layout.addWidget(label, 0, widget_pos) - if type(widget) is QSpacerItem: - layout.addItem(widget, 1, widget_pos) - else: - layout.addWidget(widget, 1, widget_pos) - elif label_pos == 'left': - layout.addWidget(label, 0, widget_pos) - if type(widget) is QSpacerItem: - layout.addItem(widget, 0, widget_pos + 1) - else: - layout.addWidget(widget, 0, widget_pos + 1) - widget_offset += 1 - else: - if type(widget) is QSpacerItem: - layout.addItem(widget, 0, widget_pos) - else: - layout.addWidget(widget, 0, widget_pos) - # If widget has label but labelPosition is not configured (put it on the left by default) + layout = dialog.findChild(QGridLayout, field['layoutname']) + if layout is not None: + if layout.objectName() != prev_layout: + widget_offset = 0 + prev_layout = layout.objectName() + + orientation = layout_orientations.get(layout.objectName(), + "vertical") + layout.setProperty('lytOrientation', orientation) + + # Take the QGridLayout with the intention of adding a QSpacerItem later + if layout not in layout_list and layout.objectName() in ('lyt_main_1', 'lyt_main_2', 'lyt_main_3','lyt_buttons'): + layout_list.append(layout) + + if field['layoutorder'] is None: + message = "The field layoutorder is not configured for" + msg = f"formname:{self.tablename}, columnname:{field['columnname']}" + tools_qgis.show_message(message, 2, parameter=msg, dialog=dialog) + continue + + # Manage widget and label positions + label_pos = field['widgetcontrols']['labelPosition'] if ( + 'widgetcontrols' in field and field['widgetcontrols'] and 'labelPosition' in field[ + 'widgetcontrols']) else None + widget_pos = field['layoutorder'] + widget_offset + + # The data tab is somewhat special (it has 2 columns) + if 'lyt_data' in layout.objectName() or 'lyt_epa_data' in layout.objectName(): + tools_gw.add_widget(dialog, field, label, widget) else: - layout.addWidget(label, 0, widget_pos) - if type(widget) is QSpacerItem: - layout.addItem(widget, 0, widget_pos + 1) - else: - layout.addWidget(widget, 0, widget_pos + 1) - # If the widget has no label - else: - if type(widget) is QSpacerItem: - layout.addItem(widget, 0, widget_pos) - else: - layout.addWidget(widget, 0, widget_pos) + tools_gw.add_widget_combined(dialog, field, label, widget) def _featuretype_change(self, event): @@ -396,12 +380,19 @@ def cmb_new_featuretype_selection_changed(**kwargs): cmb_new_feature_type = kwargs["widget"] this = kwargs["class"] cmb_catalog_id = tools_qt.get_widget(dialog,"tab_none_featurecat_id") + project_type = tools_gw.get_project_type() # Populate catalog_id feature_type_new = tools_qt.get_widget_value(dialog, cmb_new_feature_type) - sql = (f"SELECT DISTINCT(id), id as idval " - f"FROM {this.cat_table} " - f"WHERE {this.feature_type}type_id = '{feature_type_new}' AND (active IS TRUE OR active IS NULL) " - f"ORDER BY id") + if project_type == 'ws': + sql = (f"SELECT DISTINCT(id), id as idval " + f"FROM {this.cat_table} " + f"WHERE {this.feature_type}type_id = '{feature_type_new}' AND (active IS TRUE OR active IS NULL) " + f"ORDER BY id") + else: + sql = (f"SELECT DISTINCT(id), id as idval " + f"FROM {this.cat_table} " + f"WHERE {this.feature_type}_type = '{feature_type_new}' AND (active IS TRUE OR active IS NULL) " + f"ORDER BY id") rows = tools_db.get_rows(sql) tools_qt.fill_combo_values(cmb_catalog_id, rows) \ No newline at end of file diff --git a/core/ui/toolbars/edit/featuretype_change.ui b/core/ui/toolbars/edit/featuretype_change.ui index 1daa02b91..b904f8f81 100644 --- a/core/ui/toolbars/edit/featuretype_change.ui +++ b/core/ui/toolbars/edit/featuretype_change.ui @@ -14,18 +14,31 @@ Change feature type - - - - + - + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + diff --git a/core/utils/tools_gw.py b/core/utils/tools_gw.py index df6b52cd0..d97c9da06 100644 --- a/core/utils/tools_gw.py +++ b/core/utils/tools_gw.py @@ -1509,8 +1509,13 @@ def add_widget(dialog, field, lbl, widget): layout = dialog.findChild(QGridLayout, field['layoutname']) if layout in (None, 'null', 'NULL', 'Null'): return - row = int(field['layoutorder']) - col = 0 + orientation = layout.property('lytOrientation') + if orientation == 'vertical': + row = int(field['layoutorder']) + col = 0 + else: # default + row = 0 + col = int(field['layoutorder']) if lbl is None: col = row row = 0 @@ -1525,6 +1530,40 @@ def add_widget(dialog, field, lbl, widget): layout.setColumnStretch(col, 1) +def add_widget_combined(dialog, field, label, widget): + """ Insert widget into layout based on orientation and label position """ + layout = dialog.findChild(QGridLayout, field['layoutname']) + + orientation = layout.property('lytOrientation') + widget_pos = int(field.get('layoutorder', 0)) + row, col = (0, widget_pos) if orientation == "horizontal" else (widget_pos, 0) + + label_pos = field['widgetcontrols']['labelPosition'] if ( + 'widgetcontrols' in field and field['widgetcontrols'] and 'labelPosition' in field['widgetcontrols']) else None + print("orientation combined: ", orientation) + if label: + layout.addWidget(label, row, col) + if orientation == "horizontal": + if label_pos == 'top': + row += 1 + else: + print("entro col") + col += 1 + else: + if label_pos == 'top': + row += 1 + else: + col = 1 + layout.setColumnStretch(col, 1) + + if isinstance(widget, QSpacerItem): + layout.addItem(widget, row, col) + else: + layout.addWidget(widget, row, col) + + if label and orientation == "horizontal": + layout.setColumnStretch(col, 1) + def get_dialog_changed_values(dialog, chk, widget, field, list, value=None): elem = {} @@ -4411,7 +4450,7 @@ def set_filter_listeners(complet_result, dialog, widget_list, columnname, widget def set_widgets(dialog, complet_result, field, tablename, class_info): """ functions called in -> widget = getattr(self, f"manage_{field['widgettype']}")(**kwargs) - def manage_text(self, **kwargs) + def _manage_text(**kwargs) def manage_typeahead(self, **kwargs) def manage_combo(self, **kwargs) def manage_check(self, **kwargs) diff --git a/dbmodel b/dbmodel index e8c3e4274..289978089 160000 --- a/dbmodel +++ b/dbmodel @@ -1 +1 @@ -Subproject commit e8c3e427401f77122e68060f352e087d0efcf633 +Subproject commit 289978089c86bff6510860c01a9421bd8b829935 From 8e8f51b46a98c3dcb35cec0cec63403dd1571ab1 Mon Sep 17 00:00:00 2001 From: smaspons Date: Mon, 23 Sep 2024 14:26:16 +0200 Subject: [PATCH 19/26] feat: add project variable `gwCurrentStyle` --- core/load_project.py | 1 + core/toolbars/toc/add_child_layer_button.py | 8 ++++++-- core/toolbars/toc/layerstyle_change_button.py | 4 +++- libs | 2 +- main.py | 2 ++ 5 files changed, 13 insertions(+), 4 deletions(-) diff --git a/core/load_project.py b/core/load_project.py index 5b0029532..3c1214ea7 100644 --- a/core/load_project.py +++ b/core/load_project.py @@ -247,6 +247,7 @@ def _get_project_variables(self): lib_vars.project_vars['project_role'] = tools_qgis.get_project_variable('gwProjectRole') lib_vars.project_vars['project_type'] = tools_qgis.get_project_variable('gwProjectType') lib_vars.project_vars['store_credentials'] = tools_qgis.get_project_variable('gwStoreCredentials') + lib_vars.project_vars['current_style'] = tools_qgis.get_project_variable('gwCurrentStyle') def _get_user_variables(self): diff --git a/core/toolbars/toc/add_child_layer_button.py b/core/toolbars/toc/add_child_layer_button.py index bc7b40d43..d3677cf5c 100644 --- a/core/toolbars/toc/add_child_layer_button.py +++ b/core/toolbars/toc/add_child_layer_button.py @@ -16,7 +16,7 @@ from ..dialog import GwAction from ...utils import tools_gw -from ....libs import tools_qgis, tools_qt +from ....libs import tools_qgis, tools_qt, lib_vars class GwAddChildLayerButton(GwAction): @@ -151,10 +151,14 @@ def _check_action_ischecked(self, tablename, the_geom=None, field_id=None, group :param group: Name of the group that will be created in the toc (String) :param is_checked: This parameter is sent by the action itself with the trigger (Bool) """ + + style_id: str = "-1" if state == 2: layer = tools_qgis.get_layer_by_tablename(tablename) if layer is None: - tools_gw.add_layer_database(tablename, the_geom, field_id, group, sub_group, alias=alias, sub_sub_group=sub_sub_group) + if lib_vars.project_vars['current_style'] is not None: + style_id = lib_vars.project_vars['current_style'] + tools_gw.add_layer_database(tablename, the_geom, field_id, group, sub_group, style_id=style_id, alias=alias, sub_sub_group=sub_sub_group) elif state == 0: layer = tools_qgis.get_layer_by_tablename(tablename) if layer is not None: diff --git a/core/toolbars/toc/layerstyle_change_button.py b/core/toolbars/toc/layerstyle_change_button.py index 57baff5e4..418bf29e8 100644 --- a/core/toolbars/toc/layerstyle_change_button.py +++ b/core/toolbars/toc/layerstyle_change_button.py @@ -15,7 +15,7 @@ from qgis.core import QgsMapLayerStyle from ..dialog import GwAction from ...utils import tools_gw -from ....libs import tools_qgis, tools_db +from ....libs import tools_qgis, tools_db, lib_vars def get_contexts_params() -> List[Tuple[int, str]]: @@ -115,4 +115,6 @@ def _apply_context(self, styleconfig_id: int, style_name: str) -> None: """Apply styles for the selected context.""" apply_styles_to_layers(styleconfig_id, style_name) + lib_vars.project_vars['current_style'] = f"{styleconfig_id}" + tools_qgis.set_project_variable('gwCurrentStyle', f"{styleconfig_id}") tools_qgis.show_info(f"Applied styles for context: {style_name}") diff --git a/libs b/libs index b0e738a16..f3e73c104 160000 --- a/libs +++ b/libs @@ -1 +1 @@ -Subproject commit b0e738a1640e7b3a40aae489e503698199fd1edc +Subproject commit f3e73c104f28f9b27c504289b9467bee6bfb90bb diff --git a/main.py b/main.py index 1473d22e0..10c21c3e7 100644 --- a/main.py +++ b/main.py @@ -67,6 +67,8 @@ def unload(self, hide_gw_button=None): lib_vars.project_vars['main_schema'] = None lib_vars.project_vars['project_role'] = None lib_vars.project_vars['project_type'] = None + lib_vars.project_vars['store_credentials'] = None + lib_vars.project_vars['current_style'] = None except Exception as e: tools_log.log_info(f"Exception in unload when reset values for lib_vars.project_vars: {e}") From 65020833f7a00cef3555ec57a2f16f6c79961774 Mon Sep 17 00:00:00 2001 From: smaspons Date: Mon, 23 Sep 2024 15:24:24 +0200 Subject: [PATCH 20/26] fix(tools_gw): set layout default orientation to vertical --- core/utils/tools_gw.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/utils/tools_gw.py b/core/utils/tools_gw.py index d97c9da06..278bc82c5 100644 --- a/core/utils/tools_gw.py +++ b/core/utils/tools_gw.py @@ -1510,12 +1510,12 @@ def add_widget(dialog, field, lbl, widget): if layout in (None, 'null', 'NULL', 'Null'): return orientation = layout.property('lytOrientation') - if orientation == 'vertical': - row = int(field['layoutorder']) - col = 0 - else: # default + if orientation == 'horizontal': row = 0 col = int(field['layoutorder']) + else: # default vertical + row = int(field['layoutorder']) + col = 0 if lbl is None: col = row row = 0 From d268dbe80fea056c872c13688ffa4c397909023d Mon Sep 17 00:00:00 2001 From: smaspons Date: Mon, 23 Sep 2024 15:25:09 +0200 Subject: [PATCH 21/26] feat(go2epa options): refresh map canvas if networkmode changed --- core/toolbars/epa/go2epa_button.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/core/toolbars/epa/go2epa_button.py b/core/toolbars/epa/go2epa_button.py index 274a12229..214434adc 100644 --- a/core/toolbars/epa/go2epa_button.py +++ b/core/toolbars/epa/go2epa_button.py @@ -556,10 +556,9 @@ def _update_values(self, _json): return False tools_gw.manage_current_selections_docker(json_result) - """# TODO: do this with symbology?""" # Refresh epa world view if is active and it has changed - # if tools_gw.is_epa_world_active() and any(widget['widget'] == 'inp_options_networkmode' for widget in _json): - # tools_gw.set_epa_world(True, selector_change=True) + if any(widget['widget'] == 'inp_options_networkmode' for widget in _json): + tools_qgis.force_refresh_map_canvas() message = "Values has been updated" tools_qgis.show_info(message) From 97901abdf4310c60c11c66307bf7a16fda3157ef Mon Sep 17 00:00:00 2001 From: smaspons Date: Mon, 23 Sep 2024 15:37:59 +0200 Subject: [PATCH 22/26] fix(featuretype_change): set maximum height --- core/ui/toolbars/edit/featuretype_change.ui | 38 ++++++++++++++++----- 1 file changed, 30 insertions(+), 8 deletions(-) diff --git a/core/ui/toolbars/edit/featuretype_change.ui b/core/ui/toolbars/edit/featuretype_change.ui index b904f8f81..66e37495b 100644 --- a/core/ui/toolbars/edit/featuretype_change.ui +++ b/core/ui/toolbars/edit/featuretype_change.ui @@ -7,24 +7,46 @@ 0 0 642 - 354 + 250 + + + 16777215 + 250 + + Change feature type - - + + + + QLayout::SetMinimumSize + + - + + + QLayout::SetMinimumSize + + - - + + + + QLayout::SetMinimumSize + + - - + + + + QLayout::SetMinimumSize + + From 743dedb8d6e6e117fd0b1c0cff9285c1d40bb32e Mon Sep 17 00:00:00 2001 From: smaspons Date: Mon, 23 Sep 2024 16:18:44 +0200 Subject: [PATCH 23/26] chore: update metadata changelog and submodules --- dbmodel | 2 +- libs | 2 +- metadata.txt | 5 +++++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/dbmodel b/dbmodel index 289978089..087e7bb52 160000 --- a/dbmodel +++ b/dbmodel @@ -1 +1 @@ -Subproject commit 289978089c86bff6510860c01a9421bd8b829935 +Subproject commit 087e7bb52a0f7c9618dd0de81a49a56498627c91 diff --git a/libs b/libs index f3e73c104..c6b6809c0 160000 --- a/libs +++ b/libs @@ -1 +1 @@ -Subproject commit f3e73c104f28f9b27c504289b9467bee6bfb90bb +Subproject commit c6b6809c083d05181ab6356e2cc92a08f9bd95b1 diff --git a/metadata.txt b/metadata.txt index 56e304b2e..426094fe8 100644 --- a/metadata.txt +++ b/metadata.txt @@ -8,6 +8,11 @@ version=3.6.013 author=David Erill, Barbara Rzepka, Sergi Muñoz, Josep Lluís Sala, Edgar Fusté, Albert Bofill, Sergi Maspons, Elies Bertran, Abel García Juanes, Maria Guzmán, Jordi Blanch, Xavier Torret, Daniel Marín, Ferran Martínez Changelog=Version 3.6.013 + - Configure 'Change feature type' form in config_form_fields and add 4 new widgets: Fluid, Location, Category & Function. + - Fix valves symbology. + - Add 'ignore' to mapzone config. + - Remove toolbars_shortcuts from user config files (it wasn't used). + - Add project variable 'gwCurrentStyle' tags= giswater, water networks, sewerage, urban drainage, EPANET, SWMM From e3cab7c40849a422cfff19ecf22ffb5515852785 Mon Sep 17 00:00:00 2001 From: smaspons Date: Mon, 23 Sep 2024 16:47:51 +0200 Subject: [PATCH 24/26] fix(featuretype_change): show error message if no catalog is present --- core/toolbars/edit/featuretype_change_button.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/core/toolbars/edit/featuretype_change_button.py b/core/toolbars/edit/featuretype_change_button.py index 693cd48ee..81bf3c7b0 100644 --- a/core/toolbars/edit/featuretype_change_button.py +++ b/core/toolbars/edit/featuretype_change_button.py @@ -395,4 +395,8 @@ def cmb_new_featuretype_selection_changed(**kwargs): f"WHERE {this.feature_type}_type = '{feature_type_new}' AND (active IS TRUE OR active IS NULL) " f"ORDER BY id") rows = tools_db.get_rows(sql) - tools_qt.fill_combo_values(cmb_catalog_id, rows) \ No newline at end of file + tools_qt.fill_combo_values(cmb_catalog_id, rows) + + if not rows or len(rows) == 0: + msg = "There is no catalog for this feature type. Please add one in the corresponding table." + tools_qgis.show_critical(msg, dialog=dialog) From 735b5a09c126ff914af7e86718e422f9a145ff69 Mon Sep 17 00:00:00 2001 From: smaspons Date: Mon, 23 Sep 2024 16:50:50 +0200 Subject: [PATCH 25/26] feat(toolbox_execute): manage json exception --- core/threads/toolbox_execute.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/threads/toolbox_execute.py b/core/threads/toolbox_execute.py index 8ffa3b46b..f686af27c 100644 --- a/core/threads/toolbox_execute.py +++ b/core/threads/toolbox_execute.py @@ -186,6 +186,8 @@ def finished(self, result): elif result: tools_gw.fill_tab_log(self.dialog, self.json_result['body']['data'], True, True, 1, False, False) self.dialog.btn_run.setEnabled(False) + elif self.json_result: + tools_gw.manage_json_exception(self.json_result) # If sql function return null elif result is False: msg = f"Database returned null. Check postgres function 'gw_fct_getinfofromid'" From e92845977c82ffe1d5081f49e93f5994e2e9936a Mon Sep 17 00:00:00 2001 From: smaspons Date: Mon, 23 Sep 2024 17:19:47 +0200 Subject: [PATCH 26/26] fix(featuretype_change): change error message and make widget red if no catalog is present --- core/toolbars/edit/featuretype_change_button.py | 6 +++++- dbmodel | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/toolbars/edit/featuretype_change_button.py b/core/toolbars/edit/featuretype_change_button.py index 81bf3c7b0..61ca00492 100644 --- a/core/toolbars/edit/featuretype_change_button.py +++ b/core/toolbars/edit/featuretype_change_button.py @@ -382,6 +382,8 @@ def cmb_new_featuretype_selection_changed(**kwargs): cmb_catalog_id = tools_qt.get_widget(dialog,"tab_none_featurecat_id") project_type = tools_gw.get_project_type() + tools_qt.set_stylesheet(cmb_catalog_id, style="") + # Populate catalog_id feature_type_new = tools_qt.get_widget_value(dialog, cmb_new_feature_type) if project_type == 'ws': @@ -397,6 +399,8 @@ def cmb_new_featuretype_selection_changed(**kwargs): rows = tools_db.get_rows(sql) tools_qt.fill_combo_values(cmb_catalog_id, rows) + # Manage if there is no catalog for the selected feature type if not rows or len(rows) == 0: - msg = "There is no catalog for this feature type. Please add one in the corresponding table." + tools_qt.set_stylesheet(cmb_catalog_id, style="background-color: #ff8080") + msg = "There is no catalog for this feature type. Please add one in the corresponding cat table." tools_qgis.show_critical(msg, dialog=dialog) diff --git a/dbmodel b/dbmodel index 087e7bb52..604c4e50b 160000 --- a/dbmodel +++ b/dbmodel @@ -1 +1 @@ -Subproject commit 087e7bb52a0f7c9618dd0de81a49a56498627c91 +Subproject commit 604c4e50b30107aa302d053ebd5a0d0fe0ccf50e