@@ -14,11 +14,12 @@ class ScanWidget(QtWidgets.QWidget):
14
14
stopChanged = QtCore .pyqtSignal (float )
15
15
numChanged = QtCore .pyqtSignal (int )
16
16
17
- def __init__ (self , zoomFactor = 1.05 , zoomMargin = .1 , dynamicRange = 1e9 ):
17
+ def __init__ (self ):
18
18
QtWidgets .QWidget .__init__ (self )
19
- self .zoomMargin = zoomMargin
20
- self .dynamicRange = dynamicRange
21
- self .zoomFactor = zoomFactor
19
+ self .zoomMargin = .1
20
+ self .zoomFactor = 1.05
21
+ self .dynamicRange = 1e9
22
+ self .suffix = ""
22
23
23
24
self .ticker = Ticker ()
24
25
@@ -40,6 +41,7 @@ def __init__(self, zoomFactor=1.05, zoomMargin=.1, dynamicRange=1e9):
40
41
qfm .lineSpacing ())
41
42
42
43
self ._start , self ._stop , self ._num = None , None , None
44
+ self ._min , self ._max = None , None
43
45
self ._axisView = None
44
46
self ._offset , self ._drag , self ._rubber = None , None , None
45
47
@@ -68,14 +70,23 @@ def _setViewAxis(self, center, scale):
68
70
left = self .width ()/ 2 - center * scale
69
71
self ._setView (left , scale )
70
72
73
+ def _clamp (self , v ):
74
+ if self ._min is not None :
75
+ v = max (self ._min , v )
76
+ if self ._max is not None :
77
+ v = min (self ._max , v )
78
+ return v
79
+
71
80
def setStart (self , val ):
81
+ val = self ._clamp (val )
72
82
if self ._start == val :
73
83
return
74
84
self ._start = val
75
85
self .update ()
76
86
self .startChanged .emit (val )
77
87
78
88
def setStop (self , val ):
89
+ val = self ._clamp (val )
79
90
if self ._stop == val :
80
91
return
81
92
self ._stop = val
@@ -89,6 +100,31 @@ def setNum(self, val):
89
100
self .update ()
90
101
self .numChanged .emit (val )
91
102
103
+ def setMinimum (self , v ):
104
+ self ._min = v
105
+ self .setStart (self ._start )
106
+ self .setStop (self ._stop )
107
+
108
+ def setMaximum (self , v ):
109
+ self ._max = v
110
+ self .setStart (self ._start )
111
+ self .setStop (self ._stop )
112
+
113
+ def setDecimals (self , n ):
114
+ # TODO
115
+ # the axis should always use compressed notation is useful
116
+ # do not:
117
+ # self.ticker.precision = n
118
+ pass
119
+
120
+ def setSingleStep (self , v ):
121
+ # TODO
122
+ # use this (and maybe decimals) to snap to "nice" values when dragging
123
+ pass
124
+
125
+ def setSuffix (self , v ):
126
+ self .suffix = v
127
+
92
128
def viewRange (self ):
93
129
center = (self ._stop + self ._start )/ 2
94
130
scale = self .width ()* (1 - 2 * self .zoomMargin )
@@ -207,8 +243,11 @@ def paintEvent(self, ev):
207
243
208
244
ticks , prefix , labels = self .ticker (self ._pixelToAxis (0 ),
209
245
self ._pixelToAxis (self .width ()))
210
- painter .drawText (0 , 0 , prefix )
211
- painter .translate (0 , lineSpacing )
246
+ rect = QtCore .QRect (0 , 0 , self .width (), lineSpacing )
247
+ painter .drawText (rect , QtCore .Qt .AlignLeft , prefix )
248
+ painter .drawText (rect , QtCore .Qt .AlignRight , self .suffix )
249
+
250
+ painter .translate (0 , lineSpacing + ascent )
212
251
213
252
for t , l in zip (ticks , labels ):
214
253
t = self ._axisToPixel (t )
0 commit comments