From ac00f50e1d2767df2cb901751fb8a6faa3341b31 Mon Sep 17 00:00:00 2001 From: Brianna Major Date: Sun, 22 Dec 2024 13:32:58 -0500 Subject: [PATCH] Replace frame spinner with forward/back buttons Signed-off-by: Brianna Major --- hexrdgui/image_series_toolbar.py | 41 ++++++++++++++++++++++---------- 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/hexrdgui/image_series_toolbar.py b/hexrdgui/image_series_toolbar.py index 95b5172b3..ec5726c82 100644 --- a/hexrdgui/image_series_toolbar.py +++ b/hexrdgui/image_series_toolbar.py @@ -1,6 +1,8 @@ from pathlib import Path from PySide6.QtCore import QCoreApplication, Qt -from PySide6.QtWidgets import QGridLayout, QLabel, QSlider, QSpinBox, QWidget +from PySide6.QtWidgets import ( + QGridLayout, QLabel, QSlider, QWidget, QPushButton +) from PySide6.QtGui import QFontMetrics, QPixmap from hexrdgui import resource_loader @@ -61,7 +63,9 @@ def __init__(self, ims, parent=None): self.ims = ims self.slider = None - self.frame = None + self.frameValue = None + self.backFrame = None + self.forwardFrame = None self.layout = None self.widget = None @@ -74,14 +78,15 @@ def __init__(self, ims, parent=None): def setup_connections(self): self.slider.valueChanged.connect(self.val_changed) - self.slider.valueChanged.connect(self.frame.setValue) - self.frame.valueChanged.connect( - self.slider.setSliderPosition) + self.slider.valueChanged.connect(lambda i: self.frameValue.setText(str(i))) + self.backFrame.clicked.connect(lambda: self.change_frame(-1)) + self.forwardFrame.clicked.connect(lambda: self.change_frame(1)) def create_widget(self): self.slider = QSlider(Qt.Horizontal, self.parent()) - self.frame = QSpinBox(self.parent()) - self.frame.setKeyboardTracking(False) + self.frameValue = QLabel(self.parent()) + self.backFrame = QPushButton('<<') + self.forwardFrame = QPushButton('>>') self.widget = QWidget(self.parent()) self.omega_label = QLabel(self.parent()) @@ -95,10 +100,15 @@ def create_widget(self): example_label_text = omega_label_text(359.999, 359.999) text_width = metrics.boundingRect(example_label_text).width() self.omega_label.setFixedWidth(text_width) + frame_text_width = metrics.boundingRect('9999').width() + self.frameValue.setFixedWidth(frame_text_width) + self.frameValue.setAlignment(Qt.AlignCenter) self.layout = QGridLayout(self.widget) - self.layout.addWidget(self.slider, 0, 0, 1, 9) - self.layout.addWidget(self.frame, 0, 9, 1, 1) + self.layout.addWidget(self.slider, 0, 0, 1, 7) + self.layout.addWidget(self.backFrame, 0, 7, 1, 1) + self.layout.addWidget(self.frameValue, 0, 8, 1, 1) + self.layout.addWidget(self.forwardFrame, 0, 9, 1, 1) self.layout.addWidget(self.omega_label, 0, 10, 1, 1) self.widget.setLayout(self.layout) @@ -119,11 +129,10 @@ def set_range(self, current_tab=False): self.slider.setMinimumWidth(self.parent().width()//2) if not size == self.slider.maximum(): self.slider.setMaximum(size) - self.frame.setMaximum(size) - self.frame.setToolTip(f'Max: {size}') self.slider.setToolTip(f'Max: {size}') self.slider.setValue(0) - self.frame.setValue(self.slider.value()) + self.frameValue.setText(str(self.slider.value())) + self.backFrame.setEnabled(False) else: self.show = False self.widget.setVisible(self.show) @@ -161,6 +170,14 @@ def update_omega_label_text(self): self.omega_label.setText(omega_label_text(*ome_range)) + def change_frame(self, value): + new_frame = int(self.frameValue.text()) + value + self.frameValue.setText(str(new_frame)) + self.slider.setSliderPosition(new_frame) + self.backFrame.setEnabled(self.slider.minimum() != new_frame) + self.forwardFrame.setEnabled(self.slider.maximum() != new_frame) + self.val_changed(new_frame) + def omega_label_text(ome_min, ome_max): # We will display 6 digits at most, because omegas go up to 360