from libs.simpleosc import * import wx class OSCSlider(wx.Panel): ''' A GUI slider ''' def __init__(self, parent, label, min_value=0, max_value=1, default_value=0, show_value=True, align=True): ''' Constructor ''' self.show_value=show_value wx.Panel.__init__(self, parent) sizer=wx.BoxSizer(wx.HORIZONTAL) label=wx.StaticText(self, label=label, size=(100,15) if align else None) sizer.Add(label, 0, wx.RIGHT, 10) self.slider=wx.Slider(self, value=default_value*100, minValue=min_value*100, maxValue=max_value*100) sizer.Add(self.slider, 1, wx.EXPAND) if show_value: self.indicator=wx.StaticText(self, label="--", size=(50,15)) sizer.Add(self.indicator, 0, wx.LEFT, 10) self.SetSizerAndFit(sizer) self.slider.Bind(wx.EVT_SCROLL, self.update) self.update(None) def update(self, evt): """ Send OSC messages """ value=self.slider.GetValue()/100. if self.show_value: self.indicator.SetLabel("%s" % value) try: sendOSCMsg("/test", [value]) except OSCClientError: pass class InputPanel(wx.Panel): ''' Handle the ADC input settings ''' def __init__(self, parent): ''' Constructor ''' wx.Panel.__init__(self, parent) sizer = wx.BoxSizer(wx.HORIZONTAL) label = wx.StaticText(self, label="Line In:") font = label.GetFont(); font.SetWeight(wx.BOLD); label.SetFont(font) sizer.Add(label, 0, wx.TOP|wx.BOTTOM|wx.RIGHT, 5) self.gain=OSCSlider(self, "Gain", default_value=.5, show_value=False, align=False) sizer.Add(self.gain, 1, wx.ALL, 5) self.thru=OSCSlider(self, "Thru", default_value=.5, show_value=False, align=False) sizer.Add(self.thru, 1, wx.ALL, 5) self.button=wx.Button(self, 1, "Kill input") sizer.Add(self.button, 0) self.SetSizerAndFit(sizer) class MainGUI(wx.Frame): """ A simple GUI to talk to Chuck """ def __init__(self): """ Constructor """ # Build the interface self.app = wx.App(False) self.build() self.app.MainLoop() def build(self): """ Builds the various pieces of the GUI """ wx.Frame.__init__(self, None, title="DELAY LORD") self.Bind(wx.EVT_CLOSE, self.quit) # The main sizer self.mainsizer = wx.BoxSizer(wx.VERTICAL) self.inputPanel = InputPanel(self) self.mainsizer.Add(self.inputPanel, 0, wx.EXPAND|wx.ALL, 5) line=wx.StaticLine(self) self.mainsizer.Add(line, 0, wx.EXPAND|wx.ALL, 5) self.delayTime=OSCSlider(self, "Delay time (s)", default_value=5, max_value=10) self.mainsizer.Add(self.delayTime, 0, wx.EXPAND|wx.ALL, 5) self.feedback=OSCSlider(self, "Feedback", default_value=.95) self.mainsizer.Add(self.feedback, 0, wx.EXPAND|wx.ALL, 5) # Put things together self.SetSizerAndFit(self.mainsizer) self.Show() self.SetSize((400,500)) def populate_left_panel(self): """ Populate the left panel """ # Status boxes def quit(self, *args): """ Close down gracefully, and then destroy the window """ self.Destroy() if __name__ == "__main__": initOSCClient(ip="127.0.0.1", port=9000) g=MainGUI() closeOSC()