11from pathlib import Path
22from 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+ )
46from PySide6 .QtGui import QFontMetrics , QPixmap
57from 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,15 @@ 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 .forwardFrame = QPushButton ('>>' )
8590
8691 self .widget = QWidget (self .parent ())
8792 self .omega_label = QLabel (self .parent ())
@@ -95,10 +100,15 @@ def create_widget(self):
95100 example_label_text = omega_label_text (359.999 , 359.999 )
96101 text_width = metrics .boundingRect (example_label_text ).width ()
97102 self .omega_label .setFixedWidth (text_width )
103+ frame_text_width = metrics .boundingRect ('9999' ).width ()
104+ self .frameValue .setFixedWidth (frame_text_width )
105+ self .frameValue .setAlignment (Qt .AlignCenter )
98106
99107 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 )
108+ self .layout .addWidget (self .slider , 0 , 0 , 1 , 7 )
109+ self .layout .addWidget (self .backFrame , 0 , 7 , 1 , 1 )
110+ self .layout .addWidget (self .frameValue , 0 , 8 , 1 , 1 )
111+ self .layout .addWidget (self .forwardFrame , 0 , 9 , 1 , 1 )
102112 self .layout .addWidget (self .omega_label , 0 , 10 , 1 , 1 )
103113
104114 self .widget .setLayout (self .layout )
@@ -119,11 +129,10 @@ def set_range(self, current_tab=False):
119129 self .slider .setMinimumWidth (self .parent ().width ()// 2 )
120130 if not size == self .slider .maximum ():
121131 self .slider .setMaximum (size )
122- self .frame .setMaximum (size )
123- self .frame .setToolTip (f'Max: { size } ' )
124132 self .slider .setToolTip (f'Max: { size } ' )
125133 self .slider .setValue (0 )
126- self .frame .setValue (self .slider .value ())
134+ self .frameValue .setText (str (self .slider .value ()))
135+ self .backFrame .setEnabled (False )
127136 else :
128137 self .show = False
129138 self .widget .setVisible (self .show )
@@ -161,6 +170,14 @@ def update_omega_label_text(self):
161170
162171 self .omega_label .setText (omega_label_text (* ome_range ))
163172
173+ def change_frame (self , value ):
174+ new_frame = int (self .frameValue .text ()) + value
175+ self .frameValue .setText (str (new_frame ))
176+ self .slider .setSliderPosition (new_frame )
177+ self .backFrame .setEnabled (self .slider .minimum () != new_frame )
178+ self .forwardFrame .setEnabled (self .slider .maximum () != new_frame )
179+ self .val_changed (new_frame )
180+
164181
165182def omega_label_text (ome_min , ome_max ):
166183 # We will display 6 digits at most, because omegas go up to 360
0 commit comments