Skip to content

Commit 50846ba

Browse files
committed
Replace frame spinner with forward/back buttons
Signed-off-by: Brianna Major <brianna.major@kitware.com>
1 parent e11c00c commit 50846ba

File tree

1 file changed

+35
-12
lines changed

1 file changed

+35
-12
lines changed

hexrdgui/image_series_toolbar.py

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
from pathlib import Path
22
from PySide6.QtCore import QCoreApplication, Qt
3-
from PySide6.QtWidgets import QGridLayout, QLabel, QSlider, QSpinBox, QWidget
3+
from PySide6.QtWidgets import (
4+
QGridLayout, QLabel, QSlider, QWidget, QPushButton
5+
)
46
from PySide6.QtGui import QFontMetrics, QPixmap
57
from hexrdgui import resource_loader
68

@@ -61,7 +63,9 @@ def __init__(self, ims, parent=None):
6163

6264
self.ims = ims
6365
self.slider = None
64-
self.frame = None
66+
self.frameValue = None
67+
self.backFrame = None
68+
self.forwardFrame = None
6569
self.layout = None
6670
self.widget = None
6771

@@ -74,14 +78,17 @@ def __init__(self, ims, parent=None):
7478

7579
def setup_connections(self):
7680
self.slider.valueChanged.connect(self.val_changed)
77-
self.slider.valueChanged.connect(self.frame.setValue)
78-
self.frame.valueChanged.connect(
79-
self.slider.setSliderPosition)
81+
self.slider.valueChanged.connect(lambda i: self.frameValue.setText(str(i)))
82+
self.backFrame.clicked.connect(lambda: self.change_frame(-1))
83+
self.forwardFrame.clicked.connect(lambda: self.change_frame(1))
8084

8185
def create_widget(self):
8286
self.slider = QSlider(Qt.Horizontal, self.parent())
83-
self.frame = QSpinBox(self.parent())
84-
self.frame.setKeyboardTracking(False)
87+
self.frameValue = QLabel(self.parent())
88+
self.backFrame = QPushButton('<<')
89+
self.backFrame.setFixedSize(35, 22)
90+
self.forwardFrame = QPushButton('>>')
91+
self.forwardFrame.setFixedSize(35, 22)
8592

8693
self.widget = QWidget(self.parent())
8794
self.omega_label = QLabel(self.parent())
@@ -95,10 +102,15 @@ def create_widget(self):
95102
example_label_text = omega_label_text(359.999, 359.999)
96103
text_width = metrics.boundingRect(example_label_text).width()
97104
self.omega_label.setFixedWidth(text_width)
105+
frame_text_width = metrics.boundingRect('9999').width()
106+
self.frameValue.setFixedWidth(frame_text_width)
107+
self.frameValue.setAlignment(Qt.AlignCenter)
98108

99109
self.layout = QGridLayout(self.widget)
100-
self.layout.addWidget(self.slider, 0, 0, 1, 9)
101-
self.layout.addWidget(self.frame, 0, 9, 1, 1)
110+
self.layout.addWidget(self.slider, 0, 0, 1, 7)
111+
self.layout.addWidget(self.backFrame, 0, 7, 1, 1)
112+
self.layout.addWidget(self.frameValue, 0, 8, 1, 1)
113+
self.layout.addWidget(self.forwardFrame, 0, 9, 1, 1)
102114
self.layout.addWidget(self.omega_label, 0, 10, 1, 1)
103115

104116
self.widget.setLayout(self.layout)
@@ -119,11 +131,10 @@ def set_range(self, current_tab=False):
119131
self.slider.setMinimumWidth(self.parent().width()//2)
120132
if not size == self.slider.maximum():
121133
self.slider.setMaximum(size)
122-
self.frame.setMaximum(size)
123-
self.frame.setToolTip(f'Max: {size}')
124134
self.slider.setToolTip(f'Max: {size}')
125135
self.slider.setValue(0)
126-
self.frame.setValue(self.slider.value())
136+
self.frameValue.setText(str(self.slider.value()))
137+
self.backFrame.setEnabled(False)
127138
else:
128139
self.show = False
129140
self.widget.setVisible(self.show)
@@ -148,6 +159,7 @@ def setEnabled(self, b):
148159

149160
def val_changed(self, pos):
150161
self.parent().change_ims_image(pos)
162+
self.update_back_forward_buttons(pos)
151163
self.update_omega_label_text()
152164

153165
def update_omega_label_text(self):
@@ -161,6 +173,17 @@ def update_omega_label_text(self):
161173

162174
self.omega_label.setText(omega_label_text(*ome_range))
163175

176+
def change_frame(self, value):
177+
new_frame = int(self.frameValue.text()) + value
178+
self.frameValue.setText(str(new_frame))
179+
self.slider.setSliderPosition(new_frame)
180+
self.update_back_forward_buttons(new_frame)
181+
self.val_changed(new_frame)
182+
183+
def update_back_forward_buttons(self, val):
184+
self.backFrame.setEnabled(self.slider.minimum() != val)
185+
self.forwardFrame.setEnabled(self.slider.maximum() != val)
186+
164187

165188
def omega_label_text(ome_min, ome_max):
166189
# We will display 6 digits at most, because omegas go up to 360

0 commit comments

Comments
 (0)