--- pyvcp_widgets.py.orig 2013-03-04 06:49:31.000000000 +0000 +++ pyvcp_widgets.py 2013-04-23 11:58:59.000000000 +0100 @@ -107,7 +107,7 @@ #TJP cpr is overloaded, now it means "chgs per rev" not "counts per rev" #TJP the tik marks could get very fine, avoid high cpr to size ratios (easily seen) - def __init__(self,root,pycomp,halpin=None,size=200,cpr=40,dialcolor="", \ + def __init__(self,root,pycomp,halpin=None,halparam=None,size=200,cpr=40,dialcolor="", \ edgecolor="",dotcolor="grey",min_=None,max_=None, \ text=None,initval=0,resolution=0.1, \ **kw): @@ -190,12 +190,20 @@ # create the hal pin if halpin == None: halpin = "dial."+str(pyvcp_dial.n)+".out" - pyvcp_dial.n += 1 - pycomp.newpin(halpin, HAL_FLOAT, HAL_OUT) - - self.halpin=halpin + self.halpin=halpin + + if halparam == None: + halparam = "dial.initparam."+ str(pyvcp_dial.n) + self.halparam=halparam + pyvcp_dial.n += 1 self.pycomp=pycomp - + + pycomp.newpin(halpin, HAL_FLOAT, HAL_OUT) + pycomp.newpin(halparam, HAL_FLOAT, HAL_IN) + + pycomp[self.halparam] = self.origValue + self.oldValue = self.origValue + self.value = self.origValue def chgScaleDn(self,event): # reduces the scale by 10x @@ -318,6 +326,14 @@ def update(self,pycomp): self.pycomp[self.halpin] = self.out + # update directly if param changed + self.value = pycomp[self.halparam] + if self.value != self.oldValue : + self.counts = int(round(self.value / self.funit)) + self.out= self.counts * self.funit + self.update_dot() + self.update_dro() + self.oldValue = self.value @@ -772,7 +788,7 @@ """ # FIXME: scale resolution when shift/ctrl/alt is held down? n=0 - def __init__(self,master,pycomp,halpin=None, + def __init__(self,master,pycomp,halpin=None, halparam=None, min_=0,max_=100,initval=0,resolution=1,format="2.1f",**kw): self.v = DoubleVar() if 'increment' not in kw: kw['increment'] = resolution @@ -781,10 +797,17 @@ if 'format' not in kw: kw['format'] = "%" + format kw['command'] = self.command Spinbox.__init__(self,master,textvariable=self.v,**kw) + if halpin == None: halpin = "spinbox."+str(pyvcp_spinbox.n) - pyvcp_spinbox.n += 1 + self.halpin=halpin + + if halparam == None: + halparam = "spinbox.initparam."+ str(pyvcp_spinbox.n) + self.halparam=halparam + pyvcp_spinbox.n += 1 + if initval < min_: self.value=min_ elif initval > max_: @@ -792,14 +815,18 @@ else: self.value=initval self.oldvalue=min_ + self.init=self.value + self.oldinit=self.init self.format = "%(b)"+format self.max_=max_ self.min_=min_ self.resolution=resolution self.v.set( str( self.format % {'b':self.value} ) ) pycomp.newpin(halpin, HAL_FLOAT, HAL_OUT) + pycomp.newpin(halparam, HAL_FLOAT, HAL_IN) self.bind('',self.wheel_up) self.bind('',self.wheel_down) + pycomp[self.halparam] = self.init def command(self): self.value = self.v.get() @@ -809,6 +836,11 @@ if self.value != self.oldvalue: self.v.set( str( self.format % {'b':self.value} ) ) self.oldvalue=self.value + self.init = pycomp[self.halparam] + if self.init != self.oldinit: + self.v.set( str( self.format % {'b':self.init} ) ) + self.oldinit=self.init + self.value=self.init def wheel_up(self,event): self.value += self.resolution @@ -1262,16 +1294,24 @@ # FIXME allow user to specify size n=0 def __init__(self,master,pycomp, - resolution=1,halpin=None,min_=0,max_=10,initval=0,**kw): + resolution=1,halpin=None,halparam=None,min_=0,max_=10,initval=0,**kw): self.resolution=resolution Scale.__init__(self,master,resolution=self.resolution, from_=min_,to=max_,**kw) if halpin == None: halpin = "scale."+str(pyvcp_scale.n) - pyvcp_scale.n += 1 self.halpin=halpin + + if halparam == None: + halparam = "scale.initparam"+str(pyvcp_scale.n) + + self.halparam=halparam + pyvcp_scale.n += 1 + pycomp.newpin(halpin+"-i", HAL_S32, HAL_OUT) pycomp.newpin(halpin+"-f", HAL_FLOAT, HAL_OUT) + pycomp.newpin(halparam, HAL_FLOAT, HAL_IN) + self.bind('',self.wheel_up) self.bind('',self.wheel_down) @@ -1284,10 +1324,19 @@ self.value=initval self.set(self.value) + + self.oldInit=self.value + self.init=self.value + pycomp[self.halparam] = self.value def update(self,pycomp): pycomp[self.halpin+"-f"]=self.get() pycomp[self.halpin+"-i"]=int(self.get()) + self.init = pycomp[self.halparam] + if self.init != self.oldInit : + self.set(self.init) + self.value=self.init + self.oldInit=self.init def wheel_up(self,event): self.set(self.get()+self.resolution)