Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/pynxc/waxy/slider.py
diff options
context:
space:
mode:
Diffstat (limited to 'pynxc/waxy/slider.py')
-rw-r--r--pynxc/waxy/slider.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/pynxc/waxy/slider.py b/pynxc/waxy/slider.py
new file mode 100644
index 0000000..1f70e64
--- /dev/null
+++ b/pynxc/waxy/slider.py
@@ -0,0 +1,104 @@
+# slider.py
+
+import wx
+import containers
+import waxyobject
+import styles
+from panel import Panel
+from label import Label
+
+class Slider(wx.Slider, waxyobject.WaxyObject):
+ __events__ = {
+ 'Scroll': wx.EVT_SCROLL,
+ }
+
+ def __init__(self, parent, tickfreq=5, min=0, max=100, event=None, size=None, **kwargs):
+ style = 0
+ style |= self._params(kwargs)
+ style |= styles.window(kwargs)
+
+ wx.Slider.__init__(self, parent, wx.NewId(), size=size or (-1,-1), style=style)
+ self.SetTickFreq(tickfreq)
+ self.SetRange(min, max)
+
+ self.BindEvents()
+ if event:
+ self.OnScroll = event
+ styles.properties(self, kwargs)
+
+ #
+ # style parameters
+
+ __styles__ = {
+ 'labels': (wx.SL_LABELS, styles.NORMAL),
+ 'ticks': ({
+ "left": wx.SL_LEFT | wx.SL_AUTOTICKS,
+ "right": wx.SL_RIGHT | wx.SL_AUTOTICKS,
+ "top": wx.SL_TOP | wx.SL_AUTOTICKS,
+ "bottom": wx.SL_BOTTOM | wx.SL_AUTOTICKS,
+ }, styles.DICTSTART),
+ 'orientation': ({
+ "horizontal": wx.SL_HORIZONTAL,
+ "vertical": wx.SL_VERTICAL,
+ }, styles.DICTSTART),
+ }
+
+
+class FloatSlider(Panel):
+
+ def __init__(self, parent, tickfreq=0.5, min=-5.0, max=5.0, format='%.1f',event=None, size=None, **kwargs):
+
+ if 'labels' in kwargs:
+ labels=kwargs['labels']
+ kwargs['labels']=False
+
+ Panel.__init__(self,parent,direction='v')
+
+
+ intmin=0
+ intmax=int(float(max-min)/tickfreq)
+ inttickfreq=1
+
+ self.min=min
+ self.max=max
+ self.tickfreq=tickfreq
+ self.format=format
+
+ self.slider=Slider(self, inttickfreq,intmin,intmax,event,size,**kwargs)
+ self.slider.SetValue(self.slider.GetMax()/2)
+ self.slider.OnScroll=self.OnScroll
+ self.AddComponent(self.slider,stretch=True,border=10)
+
+ if labels:
+ p=Panel(self,direction='h')
+ self.text1=Label(p,self.format % self.min,align='left')
+ self.text2=Label(p,self.format % self.max,align='right')
+ self.text3=Label(p,self.format % self.GetValue(),align='center')
+ p.AddComponent(self.text1,expand=True,border=3)
+ p.AddComponent(self.text3,expand=False,border=3)
+ p.AddComponent(self.text2,expand=True,border=3)
+ p.Pack()
+
+ self.AddComponent(p,stretch=True)
+
+
+
+ self.Pack()
+
+ def OnScroll(self,event):
+ self.text3.SetLabel(self.format % self.GetValue())
+ self.text3.SetExtraStyle(wx.ALIGN_CENTER)
+ self.OnUpdate()
+
+ def OnUpdate(self):
+ pass
+
+ def GetValue(self):
+
+ intval=float(self.slider.GetValue())
+ intmax=float(self.slider.GetMax())
+
+ val=(intval*self.tickfreq)+self.min
+
+ return val
+