src/eric7/EricWidgets/EricZoomWidget.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9473
3f23dbf37dbe
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
14 14
15 15
16 class EricZoomWidget(QWidget, Ui_EricZoomWidget): 16 class EricZoomWidget(QWidget, Ui_EricZoomWidget):
17 """ 17 """
18 Class implementing a zoom widget for the status bar. 18 Class implementing a zoom widget for the status bar.
19 19
20 @signal valueChanged(value) emitted to indicate the new zoom value (int) 20 @signal valueChanged(value) emitted to indicate the new zoom value (int)
21 """ 21 """
22
22 valueChanged = pyqtSignal(int) 23 valueChanged = pyqtSignal(int)
23 24
24 def __init__(self, outPix, inPix, resetPix, parent=None): 25 def __init__(self, outPix, inPix, resetPix, parent=None):
25 """ 26 """
26 Constructor 27 Constructor
27 28
28 @param outPix pixmap for the zoom out button (QPixmap) 29 @param outPix pixmap for the zoom out button (QPixmap)
29 @param inPix pixmap for the zoom in button (QPixmap) 30 @param inPix pixmap for the zoom in button (QPixmap)
30 @param resetPix pixmap for the zoom reset button (QPixmap) 31 @param resetPix pixmap for the zoom reset button (QPixmap)
31 @param parent reference to the parent widget (QWidget) 32 @param parent reference to the parent widget (QWidget)
32 """ 33 """
33 super().__init__(parent) 34 super().__init__(parent)
34 self.setupUi(self) 35 self.setupUi(self)
35 36
36 self.zoomOutLabel.setPixmap(outPix.scaled(16, 16)) 37 self.zoomOutLabel.setPixmap(outPix.scaled(16, 16))
37 self.zoomInLabel.setPixmap(inPix.scaled(16, 16)) 38 self.zoomInLabel.setPixmap(inPix.scaled(16, 16))
38 self.zoomResetLabel.setPixmap(resetPix.scaled(16, 16)) 39 self.zoomResetLabel.setPixmap(resetPix.scaled(16, 16))
39 40
40 self.zoomOutLabel.clicked.connect(self.__zoomOut) 41 self.zoomOutLabel.clicked.connect(self.__zoomOut)
41 self.zoomInLabel.clicked.connect(self.__zoomIn) 42 self.zoomInLabel.clicked.connect(self.__zoomIn)
42 self.zoomResetLabel.clicked.connect(self.__zoomReset) 43 self.zoomResetLabel.clicked.connect(self.__zoomReset)
43 44
44 self.slider.valueChanged.connect(self._sliderValueChanged) 45 self.slider.valueChanged.connect(self._sliderValueChanged)
45 46
46 self.__default = 0 47 self.__default = 0
47 self.__percent = False 48 self.__percent = False
48 49
49 # mapped slider 50 # mapped slider
50 self.__mapped = False 51 self.__mapped = False
51 self.__mapping = [] 52 self.__mapping = []
52 53
53 self.__setValueLabelWidth() 54 self.__setValueLabelWidth()
54 55
55 @pyqtSlot(int) 56 @pyqtSlot(int)
56 def on_slider_sliderMoved(self, value): 57 def on_slider_sliderMoved(self, value):
57 """ 58 """
58 Private slot to handle changes of the zoom value. 59 Private slot to handle changes of the zoom value.
59 60
60 @param value value of the slider (integer) 61 @param value value of the slider (integer)
61 """ 62 """
62 if self.__mapped: 63 if self.__mapped:
63 self.valueChanged.emit(self.__mapping[value]) 64 self.valueChanged.emit(self.__mapping[value])
64 else: 65 else:
65 self.valueChanged.emit(value) 66 self.valueChanged.emit(value)
66 67
67 def setValue(self, value): 68 def setValue(self, value):
68 """ 69 """
69 Public slot to set the value. 70 Public slot to set the value.
70 71
71 @param value new zoom value (integer) 72 @param value new zoom value (integer)
72 """ 73 """
73 self.slider.setValue(self.__indexForValue(value)) 74 self.slider.setValue(self.__indexForValue(value))
74 75
75 def value(self): 76 def value(self):
76 """ 77 """
77 Public method to get the current value. 78 Public method to get the current value.
78 79
79 @return current zoom value (integer) 80 @return current zoom value (integer)
80 """ 81 """
81 if self.__mapped: 82 if self.__mapped:
82 return self.__mapping[self.slider.value()] 83 return self.__mapping[self.slider.value()]
83 else: 84 else:
84 return self.slider.value() 85 return self.slider.value()
85 86
86 def setMinimum(self, minimum): 87 def setMinimum(self, minimum):
87 """ 88 """
88 Public method to set the minimum value. 89 Public method to set the minimum value.
89 90
90 @param minimum new minimum value (integer) 91 @param minimum new minimum value (integer)
91 """ 92 """
92 if not self.__mapped: 93 if not self.__mapped:
93 self.slider.setMinimum(minimum) 94 self.slider.setMinimum(minimum)
94 self.__setValueLabelWidth() 95 self.__setValueLabelWidth()
95 96
96 def minimum(self): 97 def minimum(self):
97 """ 98 """
98 Public method to get the minimum value. 99 Public method to get the minimum value.
99 100
100 @return minimum value (integer) 101 @return minimum value (integer)
101 """ 102 """
102 if self.__mapped: 103 if self.__mapped:
103 return self.__mapping[0] 104 return self.__mapping[0]
104 else: 105 else:
105 return self.slider.minimum() 106 return self.slider.minimum()
106 107
107 def setMaximum(self, maximum): 108 def setMaximum(self, maximum):
108 """ 109 """
109 Public method to set the maximum value. 110 Public method to set the maximum value.
110 111
111 @param maximum new maximum value (integer) 112 @param maximum new maximum value (integer)
112 """ 113 """
113 if not self.__mapped: 114 if not self.__mapped:
114 self.slider.setMaximum(maximum) 115 self.slider.setMaximum(maximum)
115 self.__setValueLabelWidth() 116 self.__setValueLabelWidth()
116 117
117 def maximum(self): 118 def maximum(self):
118 """ 119 """
119 Public method to get the maximum value. 120 Public method to get the maximum value.
120 121
121 @return maximum value (integer) 122 @return maximum value (integer)
122 """ 123 """
123 if self.__mapped: 124 if self.__mapped:
124 return self.__mapping[-1] 125 return self.__mapping[-1]
125 else: 126 else:
126 return self.slider.maximum() 127 return self.slider.maximum()
127 128
128 def setSingleStep(self, value): 129 def setSingleStep(self, value):
129 """ 130 """
130 Public method to set the single step value. 131 Public method to set the single step value.
131 132
132 @param value value for the single step (integer) 133 @param value value for the single step (integer)
133 """ 134 """
134 self.slider.setSingleStep(value) 135 self.slider.setSingleStep(value)
135 136
136 def singleStep(self): 137 def singleStep(self):
137 """ 138 """
138 Public method to get the single step value. 139 Public method to get the single step value.
139 140
140 @return single step value (integer) 141 @return single step value (integer)
141 """ 142 """
142 return self.slider.singleStep() 143 return self.slider.singleStep()
143 144
144 def setPageStep(self, value): 145 def setPageStep(self, value):
145 """ 146 """
146 Public method to set the page step value. 147 Public method to set the page step value.
147 148
148 @param value page step value (integer) 149 @param value page step value (integer)
149 """ 150 """
150 self.slider.setPageStep(value) 151 self.slider.setPageStep(value)
151 152
152 def pageStep(self): 153 def pageStep(self):
153 """ 154 """
154 Public method to get the page step value. 155 Public method to get the page step value.
155 156
156 @return page step value (integer) 157 @return page step value (integer)
157 """ 158 """
158 return self.slider.pageStep() 159 return self.slider.pageStep()
159 160
160 def setDefault(self, value): 161 def setDefault(self, value):
161 """ 162 """
162 Public method to set the default zoom value. 163 Public method to set the default zoom value.
163 164
164 @param value default zoom value (integer) 165 @param value default zoom value (integer)
165 """ 166 """
166 self.__default = self.__indexForValue(value) 167 self.__default = self.__indexForValue(value)
167 168
168 def default(self): 169 def default(self):
169 """ 170 """
170 Public method to get the default zoom value. 171 Public method to get the default zoom value.
171 172
172 @return default zoom value (integer) 173 @return default zoom value (integer)
173 """ 174 """
174 if self.__mapped: 175 if self.__mapped:
175 return self.__mapping[self.__default] 176 return self.__mapping[self.__default]
176 else: 177 else:
177 return self.__default 178 return self.__default
178 179
179 def setPercent(self, on): 180 def setPercent(self, on):
180 """ 181 """
181 Public method to set the percent mode of the widget. 182 Public method to set the percent mode of the widget.
182 183
183 @param on flag indicating percent mode (boolean) 184 @param on flag indicating percent mode (boolean)
184 """ 185 """
185 self.__percent = on 186 self.__percent = on
186 self.__setValueLabelWidth() 187 self.__setValueLabelWidth()
187 188
188 def isPercent(self): 189 def isPercent(self):
189 """ 190 """
190 Public method to get the percent mode. 191 Public method to get the percent mode.
191 192
192 @return flag indicating percent mode (boolean) 193 @return flag indicating percent mode (boolean)
193 """ 194 """
194 return self.__percent 195 return self.__percent
195 196
196 def setMapping(self, mapping, default, percent=True): 197 def setMapping(self, mapping, default, percent=True):
197 """ 198 """
198 Public method to set a zoom level mapping. 199 Public method to set a zoom level mapping.
199 200
200 When zoom level mapping is activated, the slider covers 201 When zoom level mapping is activated, the slider covers
201 values from 0 to the max. index of the mapping list. The 202 values from 0 to the max. index of the mapping list. The
202 default value is the value of the default zoom level. If 203 default value is the value of the default zoom level. If
203 percent is given, the zoom level is shown as a percent value. 204 percent is given, the zoom level is shown as a percent value.
204 205
205 @param mapping list of mapping values (list of integer) 206 @param mapping list of mapping values (list of integer)
206 @param default index of the default value (integer) 207 @param default index of the default value (integer)
207 @param percent flag indicating to show zoom value in percent 208 @param percent flag indicating to show zoom value in percent
208 (boolean) 209 (boolean)
209 """ 210 """
223 self.slider.setMaximum(20) 224 self.slider.setMaximum(20)
224 self.__default = 0 225 self.__default = 0
225 self.__percent = False 226 self.__percent = False
226 self.slider.setValue(0) 227 self.slider.setValue(0)
227 self.__setValueLabelWidth() 228 self.__setValueLabelWidth()
228 229
229 def mapping(self): 230 def mapping(self):
230 """ 231 """
231 Public method to get the current mapping. 232 Public method to get the current mapping.
232 233
233 @return tuple of the mapping and the default index 234 @return tuple of the mapping and the default index
234 (list of integer, integer) 235 (list of integer, integer)
235 """ 236 """
236 return self.__mapping[:], self.__default 237 return self.__mapping[:], self.__default
237 238
238 def isMapped(self): 239 def isMapped(self):
239 """ 240 """
240 Public method to check for a mapped zoom widget. 241 Public method to check for a mapped zoom widget.
241 242
242 @return flag indicating a mapped zoom widget (boolean) 243 @return flag indicating a mapped zoom widget (boolean)
243 """ 244 """
244 return self.__mapped 245 return self.__mapped
245 246
246 def __zoomReset(self): 247 def __zoomReset(self):
247 """ 248 """
248 Private slot to reset the value. 249 Private slot to reset the value.
249 """ 250 """
250 self.slider.setValue(self.__default) 251 self.slider.setValue(self.__default)
251 self.valueChanged.emit(self.value()) 252 self.valueChanged.emit(self.value())
252 253
253 def __zoomOut(self): 254 def __zoomOut(self):
254 """ 255 """
255 Private slot to zoom out one step. 256 Private slot to zoom out one step.
256 """ 257 """
257 self.slider.setValue(self.slider.value() - self.slider.singleStep()) 258 self.slider.setValue(self.slider.value() - self.slider.singleStep())
258 self.valueChanged.emit(self.value()) 259 self.valueChanged.emit(self.value())
259 260
260 def __zoomIn(self): 261 def __zoomIn(self):
261 """ 262 """
262 Private slot to zoom in one step. 263 Private slot to zoom in one step.
263 """ 264 """
264 self.slider.setValue(self.slider.value() + self.slider.singleStep()) 265 self.slider.setValue(self.slider.value() + self.slider.singleStep())
265 self.valueChanged.emit(self.value()) 266 self.valueChanged.emit(self.value())
266 267
267 def _sliderValueChanged(self, value): 268 def _sliderValueChanged(self, value):
268 """ 269 """
269 Protected slot to handle changes of the slider value. 270 Protected slot to handle changes of the slider value.
270 271
271 @param value slider value (integer) 272 @param value slider value (integer)
272 """ 273 """
273 val = self.__mapping[value] if self.__mapped else value 274 val = self.__mapping[value] if self.__mapped else value
274 fmtStr = "{0}%" if self.__percent else "{0}" 275 fmtStr = "{0}%" if self.__percent else "{0}"
275 self.valueLabel.setText(fmtStr.format(val)) 276 self.valueLabel.setText(fmtStr.format(val))
276 self.valueChanged.emit(val) 277 self.valueChanged.emit(val)
277 278
278 def __setValueLabelWidth(self): 279 def __setValueLabelWidth(self):
279 """ 280 """
280 Private slot to determine the width of the zoom value label. 281 Private slot to determine the width of the zoom value label.
281 """ 282 """
282 labelLen = ( 283 labelLen = (
283 max(len(str(v)) for v in self.__mapping) 284 max(len(str(v)) for v in self.__mapping)
284 if self.__mapped else 285 if self.__mapped
285 max(len(str(self.slider.maximum())), 286 else max(len(str(self.slider.maximum())), len(str(self.slider.minimum())))
286 len(str(self.slider.minimum())))
287 ) 287 )
288 fmtStr = "{0}%" if self.__percent else "{0}" 288 fmtStr = "{0}%" if self.__percent else "{0}"
289 label = fmtStr.format("0" * labelLen) 289 label = fmtStr.format("0" * labelLen)
290 try: 290 try:
291 width = self.valueLabel.fontMetrics().horizontalAdvance(label) 291 width = self.valueLabel.fontMetrics().horizontalAdvance(label)
292 except AttributeError: 292 except AttributeError:
293 width = self.valueLabel.fontMetrics().width(label) 293 width = self.valueLabel.fontMetrics().width(label)
294 self.valueLabel.setMinimumWidth(width) 294 self.valueLabel.setMinimumWidth(width)
295 self.valueLabel.setMaximumWidth(width) 295 self.valueLabel.setMaximumWidth(width)
296 296
297 def __indexForValue(self, value): 297 def __indexForValue(self, value):
298 """ 298 """
299 Private method to get the nearest index for a given value. 299 Private method to get the nearest index for a given value.
300 300
301 @param value value to get the index for (integer) 301 @param value value to get the index for (integer)
302 @return index into the mapping list or the unchanged value, 302 @return index into the mapping list or the unchanged value,
303 if mapping is not set (integer) 303 if mapping is not set (integer)
304 """ 304 """
305 if self.__mapped: 305 if self.__mapped:

eric ide

mercurial