From 57f4ed18dc91c71708dbe724e9153df7465d06b4 Mon Sep 17 00:00:00 2001 From: michaellans Date: Tue, 24 Jun 2025 12:36:47 -0700 Subject: [PATCH 1/5] Added archive_bins line edit --- trace/widgets/control_panel.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/trace/widgets/control_panel.py b/trace/widgets/control_panel.py index 8f5bb47f..8908576a 100644 --- a/trace/widgets/control_panel.py +++ b/trace/widgets/control_panel.py @@ -520,6 +520,12 @@ def __init__(self, plot_curve_item: ArchivePlotCurveItem): self.source.archive_channel_connection.connect(self.update_archive_icon) data_type_layout.addWidget(self.archive_connection_status) + self.bins_layout = QtWidgets.QHBoxLayout() + self.bins_layout.addWidget(QtWidgets.QLabel("n archive bins:")) + self.bins_line_edit = QtWidgets.QLineEdit() + self.bins_line_edit.returnPressed.connect(self.set_n_data_bins) # lambda: self.source.setOptimizedDataBins(n_bins=int(self.bins_line_edit.text()))) + self.bins_layout.addWidget(self.bin_size_line_edit) + data_type_layout.addStretch() @property @@ -551,6 +557,10 @@ def update_live_icon(self, connected: bool) -> None: def update_archive_icon(self, connected: bool) -> None: self.archive_connection_status.setVisible(not connected) + + def set_n_data_bins(self, n_bins: int) -> None: + self.source.setOptimizedDataBins(n_bins=n_bins) + self.bins_line_edit.setText(str(n_bins)) @QtCore.Slot() def show_settings_modal(self): From 638c0c1eb5c13a90988ea0b1a47d58a54d8cf955 Mon Sep 17 00:00:00 2001 From: michaellans Date: Tue, 1 Jul 2025 10:57:21 -0700 Subject: [PATCH 2/5] updates from testing --- trace/widgets/control_panel.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/trace/widgets/control_panel.py b/trace/widgets/control_panel.py index 8908576a..35884334 100644 --- a/trace/widgets/control_panel.py +++ b/trace/widgets/control_panel.py @@ -520,11 +520,12 @@ def __init__(self, plot_curve_item: ArchivePlotCurveItem): self.source.archive_channel_connection.connect(self.update_archive_icon) data_type_layout.addWidget(self.archive_connection_status) - self.bins_layout = QtWidgets.QHBoxLayout() - self.bins_layout.addWidget(QtWidgets.QLabel("n archive bins:")) self.bins_line_edit = QtWidgets.QLineEdit() - self.bins_line_edit.returnPressed.connect(self.set_n_data_bins) # lambda: self.source.setOptimizedDataBins(n_bins=int(self.bins_line_edit.text()))) - self.bins_layout.addWidget(self.bin_size_line_edit) + self.bins_line_edit.returnPressed.connect( + self.set_n_data_bins + ) # lambda: self.source.setOptimizedDataBins(n_bins=int(self.bins_line_edit.text()))) + data_type_layout.addWidget(QtWidgets.QLabel("n archive bins:")) + data_type_layout.addWidget(self.bins_line_edit) data_type_layout.addStretch() @@ -557,10 +558,9 @@ def update_live_icon(self, connected: bool) -> None: def update_archive_icon(self, connected: bool) -> None: self.archive_connection_status.setVisible(not connected) - - def set_n_data_bins(self, n_bins: int) -> None: - self.source.setOptimizedDataBins(n_bins=n_bins) - self.bins_line_edit.setText(str(n_bins)) + + def set_n_data_bins(self) -> None: + self.source.setOptimizedDataBins(self.bins_line_edit.text()) @QtCore.Slot() def show_settings_modal(self): From 9778728b19eac4863c10a31e6af6de751c5663ce Mon Sep 17 00:00:00 2001 From: michaellans Date: Tue, 1 Jul 2025 11:12:29 -0700 Subject: [PATCH 3/5] added try/except in case pydm version does not support curve n data bins --- trace/widgets/control_panel.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/trace/widgets/control_panel.py b/trace/widgets/control_panel.py index 35884334..9baea198 100644 --- a/trace/widgets/control_panel.py +++ b/trace/widgets/control_panel.py @@ -560,7 +560,10 @@ def update_archive_icon(self, connected: bool) -> None: self.archive_connection_status.setVisible(not connected) def set_n_data_bins(self) -> None: - self.source.setOptimizedDataBins(self.bins_line_edit.text()) + try: + self.source.setOptimizedDataBins(self.bins_line_edit.text()) + except AttributeError as e: + print(f"Unable to set data bins: {e}") @QtCore.Slot() def show_settings_modal(self): From b17b476574c5d06f69d28a94373ba525a3bba901 Mon Sep 17 00:00:00 2001 From: michaellans Date: Fri, 15 Aug 2025 16:35:44 -0700 Subject: [PATCH 4/5] ui formatting changes --- trace/widgets/control_panel.py | 13 ------------- trace/widgets/curve_settings.py | 26 ++++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/trace/widgets/control_panel.py b/trace/widgets/control_panel.py index 9baea198..8f5bb47f 100644 --- a/trace/widgets/control_panel.py +++ b/trace/widgets/control_panel.py @@ -520,13 +520,6 @@ def __init__(self, plot_curve_item: ArchivePlotCurveItem): self.source.archive_channel_connection.connect(self.update_archive_icon) data_type_layout.addWidget(self.archive_connection_status) - self.bins_line_edit = QtWidgets.QLineEdit() - self.bins_line_edit.returnPressed.connect( - self.set_n_data_bins - ) # lambda: self.source.setOptimizedDataBins(n_bins=int(self.bins_line_edit.text()))) - data_type_layout.addWidget(QtWidgets.QLabel("n archive bins:")) - data_type_layout.addWidget(self.bins_line_edit) - data_type_layout.addStretch() @property @@ -559,12 +552,6 @@ def update_live_icon(self, connected: bool) -> None: def update_archive_icon(self, connected: bool) -> None: self.archive_connection_status.setVisible(not connected) - def set_n_data_bins(self) -> None: - try: - self.source.setOptimizedDataBins(self.bins_line_edit.text()) - except AttributeError as e: - print(f"Unable to set data bins: {e}") - @QtCore.Slot() def show_settings_modal(self): if self.pv_settings_modal is None: diff --git a/trace/widgets/curve_settings.py b/trace/widgets/curve_settings.py index fae47730..02ce51fb 100644 --- a/trace/widgets/curve_settings.py +++ b/trace/widgets/curve_settings.py @@ -4,6 +4,7 @@ from pydm.widgets.archiver_time_plot import TimePlotCurveItem, PyDMArchiverTimePlot +from config import logger from widgets import ColorButton, SettingsTitle, ComboBoxWrapper, SettingsRowItem @@ -30,6 +31,16 @@ def __init__(self, parent: QWidget, plot: PyDMArchiverTimePlot, curve: TimePlotC color_row = SettingsRowItem(self, "Color", color_button) main_layout.addLayout(color_row) + self.bin_count_line_edit = bin_count_line_edit = QLineEdit() + bin_count_line_edit.setMaximumWidth(65) + bin_count_line_edit.returnPressed.connect(self.set_curve_data_bins) + optimized_bin_count = SettingsRowItem(self, "Optimized bin count", bin_count_line_edit) + bin_count = curve.optimized_data_bins + if not bin_count: + bin_count = plot.optimized_data_bins + bin_count_line_edit.setPlaceholderText(str(bin_count)) + main_layout.addLayout(optimized_bin_count) + line_title_label = SettingsTitle(self, "Line") main_layout.addWidget(line_title_label) @@ -69,6 +80,21 @@ def __init__(self, parent: QWidget, plot: PyDMArchiverTimePlot, curve: TimePlotC size_row = SettingsRowItem(self, " Size", size_combo) main_layout.addLayout(size_row) + def set_curve_data_bins(self): + n_bins = self.bin_count_line_edit.text() + if not n_bins.isdigit() or int(n_bins) < 1: + self.bin_count_line_edit.setStyleSheet("border: 2px solid #d32f2f") + logger.warning("Invalid bin count entered. Please enter a postive integer.") + return + else: + self.bin_count_line_edit.setStyleSheet("") + try: + n_bins = int(n_bins) + self.curve.setOptimizedDataBins(n_bins) + self.bin_count_line_edit.setPlaceholderText(str(n_bins)) + except (AttributeError, ValueError) as e: + logger.warning(f"Unable to set data bins: {e}") + def show(self): parent_pos = self.parent().rect().bottomRight() global_pos = self.parent().mapToGlobal(parent_pos) From 2bbede9a25fe3fcd34c2aedf79eab9d497cc86d4 Mon Sep 17 00:00:00 2001 From: michaellans Date: Tue, 19 Aug 2025 13:20:09 -0700 Subject: [PATCH 5/5] clear bin_count_line_edit on settings modal open --- trace/widgets/curve_settings.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/trace/widgets/curve_settings.py b/trace/widgets/curve_settings.py index 02ce51fb..8cbb2063 100644 --- a/trace/widgets/curve_settings.py +++ b/trace/widgets/curve_settings.py @@ -99,6 +99,8 @@ def show(self): parent_pos = self.parent().rect().bottomRight() global_pos = self.parent().mapToGlobal(parent_pos) self.move(global_pos) + self.bin_count_line_edit.setStyleSheet("") + self.bin_count_line_edit.setText("") super().show() @Slot()