From a9c81c990132d972284da722954a0a2d945b2a9c Mon Sep 17 00:00:00 2001 From: Paolo Tormene Date: Tue, 1 Oct 2024 16:36:37 +0200 Subject: [PATCH 1/4] In the dialog driving the oq-engine, save new column widths when the user resizes them with the mouse --- svir/dialogs/drive_oq_engine_server_dialog.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/svir/dialogs/drive_oq_engine_server_dialog.py b/svir/dialogs/drive_oq_engine_server_dialog.py index 766473265..49fbc6161 100644 --- a/svir/dialogs/drive_oq_engine_server_dialog.py +++ b/svir/dialogs/drive_oq_engine_server_dialog.py @@ -153,6 +153,7 @@ class DriveOqEngineServerDialog(QDialog, FORM_CLASS): def __init__(self, iface, viewer_dock, hostname=None): self.iface = iface self.viewer_dock = viewer_dock # needed to change the output_type + self.col_widths = [340, 60, 135, 70, 80] QDialog.__init__(self) # Set up the user interface from Designer. self.setupUi(self) @@ -190,6 +191,9 @@ def __init__(self, iface, viewer_dock, hostname=None): self.message_bar = QgsMessageBar(self) self.layout().insertWidget(0, self.message_bar) + self.calc_list_tbl.horizontalHeader().sectionResized.connect( + self.on_column_resized) + self.engine_version = None self.num_login_attempts = 0 @@ -199,6 +203,9 @@ def __init__(self, iface, viewer_dock, hostname=None): self.is_gui_enabled = False self.attempt_login() + def on_column_resized(self, index, old_size, new_size): + self.col_widths[index] = new_size + def on_job_id_chosen(self): try: job_id = int(self.retrieve_job_by_id_le.text()) @@ -347,7 +354,6 @@ def refresh_calc_list(self): 'description', 'id', 'calculation_mode', 'owner', 'status'] col_names = [ 'Description', 'Job ID', 'Calculation Mode', 'Owner', 'Status'] - col_widths = [340, 60, 135, 70, 80] if not self.calc_list: self.calc_list_tbl.blockSignals(True) if self.calc_list_tbl.rowCount() > 0: @@ -359,7 +365,7 @@ def refresh_calc_list(self): self.calc_list_tbl.setHorizontalHeaderLabels(col_names) self.calc_list_tbl.horizontalHeader().setStyleSheet( "font-weight: bold;") - self.set_calc_list_widths(col_widths) + self.set_calc_list_widths(self.col_widths) self.calc_list_tbl.blockSignals(False) return False actions = [ @@ -432,7 +438,7 @@ def refresh_calc_list(self): self.calc_list_tbl.setHorizontalHeaderLabels(headers) self.calc_list_tbl.horizontalHeader().setStyleSheet( "font-weight: bold;") - self.set_calc_list_widths(col_widths) + self.set_calc_list_widths(self.col_widths) if self.pointed_calc_id: self.highlight_and_scroll_to_calc_id(self.pointed_calc_id) # if a running calculation is selected, the corresponding outputs will From 0c638a9b801826a7e538e4761aa6417cb41f9119 Mon Sep 17 00:00:00 2001 From: Paolo Tormene Date: Wed, 2 Oct 2024 10:00:20 +0200 Subject: [PATCH 2/4] Trigger row selection/delselection by clicking on it --- svir/dialogs/drive_oq_engine_server_dialog.py | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/svir/dialogs/drive_oq_engine_server_dialog.py b/svir/dialogs/drive_oq_engine_server_dialog.py index 49fbc6161..682990168 100644 --- a/svir/dialogs/drive_oq_engine_server_dialog.py +++ b/svir/dialogs/drive_oq_engine_server_dialog.py @@ -765,23 +765,21 @@ def on_same_fs(self, checksum_file_path, ipt_checksum): else: return result - @pyqtSlot(int, int, int, int) - def on_calc_list_tbl_currentCellChanged( - self, curr_row, curr_column, prev_row, prev_col): - self.calc_list_tbl.selectRow(curr_row) - # find QTableItem corresponding to that calc_id + @pyqtSlot(int, int) + def on_calc_list_tbl_cellClicked(self, row, column): calc_id_col_idx = 1 - item_calc_id = self.calc_list_tbl.item(curr_row, calc_id_col_idx) + item_calc_id = self.calc_list_tbl.item(row, calc_id_col_idx) calc_id = int(item_calc_id.text()) - if self.pointed_calc_id == calc_id: - # if you click again on the row that was selected, it unselects it + if (self.pointed_calc_id is not None + and self.pointed_calc_id == calc_id): self.pointed_calc_id = None self.calc_list_tbl.clearSelection() else: + self.calc_list_tbl.selectRow(row) self.pointed_calc_id = calc_id self._set_show_calc_params_btn() - self.update_output_list(calc_id) - self._set_show_calc_params_btn() + self.update_output_list(calc_id) + self._set_show_calc_params_btn() def _set_show_calc_params_btn(self): self.show_calc_params_btn.setEnabled( From 9e736a4c37004c3773cc83b86fc58b100c2b16a9 Mon Sep 17 00:00:00 2001 From: Paolo Tormene Date: Fri, 4 Oct 2024 14:52:29 +0200 Subject: [PATCH 3/4] Remove a duplication --- svir/dialogs/drive_oq_engine_server_dialog.py | 1 - 1 file changed, 1 deletion(-) diff --git a/svir/dialogs/drive_oq_engine_server_dialog.py b/svir/dialogs/drive_oq_engine_server_dialog.py index 682990168..092d3fd8e 100644 --- a/svir/dialogs/drive_oq_engine_server_dialog.py +++ b/svir/dialogs/drive_oq_engine_server_dialog.py @@ -777,7 +777,6 @@ def on_calc_list_tbl_cellClicked(self, row, column): else: self.calc_list_tbl.selectRow(row) self.pointed_calc_id = calc_id - self._set_show_calc_params_btn() self.update_output_list(calc_id) self._set_show_calc_params_btn() From 730cb3d62fa5af27f7ad6c979d0504342113ec9c Mon Sep 17 00:00:00 2001 From: Paolo Tormene Date: Fri, 4 Oct 2024 15:07:15 +0200 Subject: [PATCH 4/4] Avoid IndexError when the calc list table is resized, ignoring columns reserved to buttons --- svir/dialogs/drive_oq_engine_server_dialog.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/svir/dialogs/drive_oq_engine_server_dialog.py b/svir/dialogs/drive_oq_engine_server_dialog.py index 092d3fd8e..0ab028200 100644 --- a/svir/dialogs/drive_oq_engine_server_dialog.py +++ b/svir/dialogs/drive_oq_engine_server_dialog.py @@ -204,7 +204,9 @@ def __init__(self, iface, viewer_dock, hostname=None): self.attempt_login() def on_column_resized(self, index, old_size, new_size): - self.col_widths[index] = new_size + if index < len(self.col_widths): + # ignoring columns with buttons + self.col_widths[index] = new_size def on_job_id_chosen(self): try: