| Home | Trees | Indices | Help |
|
|---|
|
|
1 #!/usr/bin/python 2 # -*- coding: utf-8 -*- 3 4 __author__ = "Ricardo Ribeiro" 5 __credits__ = ["Ricardo Ribeiro"] 6 __license__ = "MIT" 7 __version__ = "0.0" 8 __maintainer__ = "Ricardo Ribeiro" 9 __email__ = "ricardojvr@gmail.com" 10 __status__ = "Development" 11 12 13 import pyforms.Utils.tools as tools 14 from PyQt4 import uic, QtGui,QtCore 15 from pyforms.gui.Controls.ControlBase import ControlBase1812720 super(GaugeWidgetVertical, self).__init__(*args, **kwargs) 21 self.setMouseTracking(True) 22 self.setMinimumWidth(30) 23 24 self._lower = 0 25 self._higher = 100 26 self._minVal = 0 27 self._maxVal = 75 28 self._lastMouseY = None 29 self._moving = False 30 self._resizingBottom = False 31 self._resizingTop = False32 3335 # call the base implementation to paint normal interface 36 super(GaugeWidgetVertical, self).paintEvent(e) 37 38 draw = QtGui.QPainter() 39 draw.begin(self) 40 41 w = self.width()-1 42 diff = self._higher-self._lower 43 self._step = float(self.height()) / float(diff) 44 y_start = self.height()-(self._minVal-self._lower) * self._step 45 y_end = self.height()-(self._maxVal-self._lower) * self._step 46 draw.setBrush(QtGui.QColor(100,100,255)) 47 draw.setPen(QtCore.Qt.NoPen ) 48 draw.drawRect(0, y_start, w, y_end-y_start) 49 50 draw.setBrush(QtCore.Qt.NoBrush) 51 draw.setPen(QtGui.QColor(200,200,255) ) 52 53 for i in range(self.height()/5,(self.height()-self.height()/5)+1, self.height()/5 ): 54 draw.drawLine(0,i,w,i) 55 56 draw.setFont(QtGui.QFont('Decorative', 8)) 57 draw.setPen(QtGui.QColor(30,30,30) ) 58 draw.drawText(3,self.height()-3, "%d" % self._lower ) 59 draw.drawText(3,10, "%d" % self._higher ) 60 61 draw.drawText(3, y_start+11, "%d" % self._minVal ) 62 draw.drawText(3, y_end-4, "%d" % self._maxVal ) 63 64 draw.end()65 66 67 6870 self._moving = False 71 self._resizingBottom = False 72 self._resizingTop = False 73 74 y_start = self.height()-(self._minVal-self._lower) * self._step 75 y_end = self.height()-(self._maxVal-self._lower) * self._step 76 77 if event.buttons()==QtCore.Qt.LeftButton: 78 if y_start>event.y()>y_end: self._moving = True 79 elif event.y()<y_end: self._resizingTop = True 80 elif y_start<event.y(): self._resizingBottom = True81 8688 super(GaugeWidgetVertical, self).mouseMoveEvent(event) 89 90 y_start = self.height()-(self._minVal-self._lower) * self._step 91 y_end = self.height()-(self._maxVal-self._lower) * self._step 92 93 if y_start<event.y() or event.y()<y_end: 94 self.setCursor(QtGui.QCursor(QtCore.Qt.SizeVerCursor )) 95 else: 96 self.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor )) 97 98 if event.buttons()==QtCore.Qt.LeftButton: 99 if self._lastMouseY!=None: 100 diff = self._lastMouseY - event.y() 101 if diff!=0: 102 if self._moving: 103 new_min = self._minVal + diff * 1/self._step 104 new_max = self._maxVal + diff * 1/self._step 105 if new_min<new_max: 106 self._minVal = new_min 107 self._maxVal = new_max 108 elif self._resizingTop: 109 new_max = self._maxVal + diff * 1/self._step 110 if self._minVal<new_max: self._maxVal = new_max 111 elif self._resizingBottom: 112 new_min = self._minVal + diff * 1/self._step 113 if new_min<self._maxVal: self._minVal = new_min 114 115 116 #if self._maxVal>self._higher: self._higher=self._maxVal 117 #if self._minVal<self._lower: self._lower=self._minVal 118 119 self.repaint() 120 121 self.changed() 122 123 self._lastMouseY = event.y()124136 140 141 142220144 # call the base implementation to paint normal interface 145 QtGui.QWidget.paintEvent(self,e); draw = QtGui.QPainter();draw.begin(self) 146 147 h = self.height()-1 148 diff = self._higher-self._lower 149 self._step = float(self.width()) / float(diff) 150 x_start = (self._minVal-self._lower) * self._step 151 x_end = (self._maxVal-self._lower) * self._step 152 draw.setBrush(QtGui.QColor(100,100,255)) 153 draw.setPen(QtCore.Qt.NoPen ) 154 draw.drawRect(x_start, 0, x_end-x_start, h) 155 156 draw.setBrush(QtCore.Qt.NoBrush) 157 draw.setPen(QtGui.QColor(200,200,255) ) 158 159 for i in range(self.width()/5,(self.width()-self.width()/5)+1, self.width()/5 ): draw.drawLine(i,0,i,h) 160 161 draw.setFont(QtGui.QFont('Decorative', 8)) 162 draw.setPen(QtGui.QColor(30,30,30) ) 163 164 boundtext = draw.boundingRect( QtCore.QRectF(), "%d" % self._higher ) 165 draw.drawText(self.width()-boundtext.width(),15, "%d" % self._higher ) 166 draw.drawText(0,15, "%d" % self._lower ) 167 168 boundtext = draw.boundingRect( QtCore.QRectF(), "%d" % self._minVal ) 169 draw.drawText(x_start-2-boundtext.width(), 15, "%d" % self._minVal ) 170 draw.drawText(x_end + 2, 15, "%d" % self._maxVal ) 171 172 173 draw.end()174 175177 self._moving = False 178 self._resizingBottom = False 179 self._resizingTop = False 180 181 x_start = (self._minVal-self._lower) * self._step 182 x_end = (self._maxVal-self._lower) * self._step 183 184 if event.buttons()==QtCore.Qt.LeftButton: 185 if x_start<event.x()<x_end: self._moving = True 186 elif event.x()>x_end: self._resizingTop = True 187 elif x_start>event.x(): self._resizingBottom = True188 189191 super(GaugeWidgetVertical, self).mouseMoveEvent(event) 192 193 x_start = (self._minVal-self._lower) * self._step 194 x_end = (self._maxVal-self._lower) * self._step 195 196 if x_start>event.x() or event.x()>x_end: self.setCursor(QtGui.QCursor(QtCore.Qt.SizeHorCursor )) 197 else: self.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor )) 198 199 if event.buttons()==QtCore.Qt.LeftButton: 200 if self._lastMouseY!=None: 201 diff = self._lastMouseY - event.x() 202 if diff!=0: 203 if self._moving: 204 new_min = self._minVal - diff * 1/self._step 205 new_max = self._maxVal - diff * 1/self._step 206 if new_min<new_max: 207 self._minVal = new_min 208 self._maxVal = new_max 209 elif self._resizingTop: 210 new_max = self._maxVal - diff * 1/self._step 211 if self._minVal<new_max: self._maxVal = new_max 212 elif self._resizingBottom: 213 new_min = self._minVal - diff * 1/self._step 214 if new_min<self._maxVal: self._minVal = new_min 215 216 self.repaint() 217 self.changed() 218 219 self._lastMouseY = event.x()221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 -class ControlBoundingSlider(ControlBase):239 240 _min = 0 241 _max = 100 242261 262 @value.setter243 - def __init__(self, label = "", defaultValue = [20,40], min = 0, max = 100, horizontal=False, **kwargs):244 #self._min = min 245 #self._max = max 246 #self.value = defaultValue 247 self._horizontal = horizontal 248 ControlBase.__init__(self, label, defaultValue, **kwargs)249251 if self._horizontal: self._form = GaugeWidgetHorizontal() 252 else: self._form = GaugeWidgetVertical()253255 self.value = minval, maxval256 257 258 @property 260 return self._form._minVal, self._form._maxVal264 ControlBase.value.fset(self, value) 265 self._form._minVal, self._form._maxVal = value[0], value[1]266 267 268 @property 270 271 @min.setter 273 self._form._lower = value 274 self._form.repaint() 275 276 @property 278 279 @max.setter 281 self._form._higher = value 282 self._form.repaint() 283
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Fri Sep 11 13:06:35 2015 | http://epydoc.sourceforge.net |