From cc66d7108fef18f0c27e2a0e929c09509c698ac5 Mon Sep 17 00:00:00 2001 From: Zach Domke Date: Mon, 6 May 2024 14:30:22 -0700 Subject: [PATCH 1/2] ENH: Replace Delete Axis button with inline button --- archive_viewer/archive_viewer.ui | 7 ------- archive_viewer/mixins/axis_table.py | 18 +++++++++--------- archive_viewer/table_models/axis_model.py | 14 ++++++++++++++ archive_viewer/widgets/item_delegates.py | 2 +- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/archive_viewer/archive_viewer.ui b/archive_viewer/archive_viewer.ui index beea373..e964524 100644 --- a/archive_viewer/archive_viewer.ui +++ b/archive_viewer/archive_viewer.ui @@ -293,13 +293,6 @@ - - - - Delete Axis - - - diff --git a/archive_viewer/mixins/axis_table.py b/archive_viewer/mixins/axis_table.py index d0358ef..4213672 100644 --- a/archive_viewer/mixins/axis_table.py +++ b/archive_viewer/mixins/axis_table.py @@ -4,7 +4,7 @@ from qtpy.QtWidgets import QHeaderView from pyqtgraph import ViewBox from table_models import ArchiverAxisModel -from widgets import ComboBoxDelegate, ScientificNotationDelegate +from widgets import ComboBoxDelegate, ScientificNotationDelegate, DeleteRowDelegate class AxisTableMixin: @@ -18,9 +18,8 @@ def axis_table_init(self) -> None: hdr = self.ui.time_axis_tbl.horizontalHeader() hdr.setSectionResizeMode(QHeaderView.Stretch) - - self.ui.add_axis_row_btn.clicked.connect(self.addAxis) - self.ui.del_axis_row_btn.clicked.connect(self.removeSelectedAxis) + del_col = self.axis_table_model.getColumnIndex("") + hdr.setSectionResizeMode(del_col, QHeaderView.ResizeToContents) plot_viewbox = self.ui.archiver_plot.plotItem.vb plot_viewbox.sigXRangeChanged.connect(self.set_axis_datetimes) @@ -29,6 +28,8 @@ def axis_table_init(self) -> None: self.ui.main_start_datetime.dateTimeChanged.connect(lambda qdt: self.set_time_axis_range((qdt, None))) self.ui.main_end_datetime.dateTimeChanged.connect(lambda qdt: self.set_time_axis_range((None, qdt))) + self.ui.add_axis_row_btn.clicked.connect(self.addAxis) + def axis_delegates_init(self) -> None: """Initialize and set the ItemDelegates for the axis table.""" orientation_col = self.axis_table_model.getColumnIndex("Y-Axis Orientation") @@ -44,6 +45,10 @@ def axis_delegates_init(self) -> None: max_range_del = ScientificNotationDelegate(self.ui.time_axis_tbl) self.ui.time_axis_tbl.setItemDelegateForColumn(max_range_col, max_range_del) + delete_col = self.axis_table_model.getColumnIndex("") + delete_row_del = DeleteRowDelegate(self.ui.time_axis_tbl) + self.ui.time_axis_tbl.setItemDelegateForColumn(delete_col, delete_row_del) + Slot(object) def set_time_axis_range(self, raw_range: Tuple[QDateTime, QDateTime] = (None, None)) -> None: """PyQT Slot to set the plot's X-Axis range. This slot should be @@ -103,8 +108,3 @@ def set_axis_datetimes(self, _: ViewBox = None, time_range: Tuple[float, float] def addAxis(self) -> None: """Slot for button to add a new row to the axis table.""" self.axis_table_model.append() - - @Slot() - def removeSelectedAxis(self) -> None: - """Slot for button to remove a row from the axis table.""" - self.axis_table_model.removeAtIndex(self.ui.time_axis_tbl.currentIndex()) diff --git a/archive_viewer/table_models/axis_model.py b/archive_viewer/table_models/axis_model.py index 4862ab5..f8d33c7 100644 --- a/archive_viewer/table_models/axis_model.py +++ b/archive_viewer/table_models/axis_model.py @@ -17,6 +17,8 @@ class ArchiverAxisModel(BasePlotAxesModel): """ def __init__(self, plot: BasePlot, parent=None) -> None: super().__init__(plot, parent) + self._column_names = self._column_names + ("",) + self.checkable_col = {self.getColumnIndex("Enable Auto Range"), self.getColumnIndex("Log Mode")} @@ -91,6 +93,18 @@ def append(self, name: str = "") -> None: row = self.rowCount() - 1 self.attach_range_changed(row, new_axis) + def removeAtIndex(self, index: QModelIndex) -> None: + """Removes the axis at the given table index. + + Parameters + ---------- + index : QModelIndex + An index in the row to be removed. + """ + if self.rowCount() <= 1: + self.append() + super().removeAtIndex(index) + def get_axis(self, index: int) -> BasePlotAxisItem: """Return the BasePlotAxisItem for a given row number. diff --git a/archive_viewer/widgets/item_delegates.py b/archive_viewer/widgets/item_delegates.py index 3a8572d..3997e21 100644 --- a/archive_viewer/widgets/item_delegates.py +++ b/archive_viewer/widgets/item_delegates.py @@ -278,7 +278,7 @@ def initStyleOption(self, option: QStyleOptionViewItem, index: QModelIndex) -> N editor = QPushButton(self.parent()) icon = editor.style().standardIcon(QStyle.SP_DialogCancelButton) editor.setIcon(icon) - editor.setToolTip("Delete Trace") + editor.setToolTip("Delete Row") editor.clicked.connect(lambda: self.commitData.emit(editor)) self.editor_list.append(editor) From 395d684f184eeede879292b09ab420927ceff5a9 Mon Sep 17 00:00:00 2001 From: Zach Domke Date: Mon, 6 May 2024 14:30:57 -0700 Subject: [PATCH 2/2] STYL: Cleaner header resize mode setting --- archive_viewer/mixins/traces_table.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/archive_viewer/mixins/traces_table.py b/archive_viewer/mixins/traces_table.py index 766f7cb..827315f 100644 --- a/archive_viewer/mixins/traces_table.py +++ b/archive_viewer/mixins/traces_table.py @@ -27,7 +27,8 @@ def traces_table_init(self) -> None: hdr.setSectionResizeMode(QHeaderView.Stretch) channel_col = self.curves_model.getColumnIndex("Channel") hdr.setSectionResizeMode(channel_col, QHeaderView.ResizeToContents) - hdr.setSectionResizeMode(self.curves_model.getColumnIndex(""), QHeaderView.ResizeToContents) + del_col = self.curves_model.getColumnIndex("") + hdr.setSectionResizeMode(del_col, QHeaderView.ResizeToContents) def curve_delegates_init(self) -> None: """Set column delegates for the Traces table to display widgets."""