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,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
165188def omega_label_text (ome_min , ome_max ):
166189 # We will display 6 digits at most, because omegas go up to 360
0 commit comments