#!/usr/bin/env python
# -*- coding: UTF-8 -*-
# generated by wxGlade 0.3.5.1 on Mon Oct 31 11:42:28 2005

import wx, math
from gnuradio  import gr
from gnuradio.wxgui import scopesink 

ID_EXIT = wx.NewId()
ID_SLIDER_1 = wx.NewId()
ID_SLIDER_2 = wx.NewId()
ID_SLIDER_3 = wx.NewId()
ID_SLIDER_4 = wx.NewId()

class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyFrame.__init__
        kwds["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        
        # Menu Bar
        self.frame_1_menubar = wx.MenuBar()
        self.SetMenuBar(self.frame_1_menubar)
        self.File = wx.Menu()
        self.Exit = wx.MenuItem(self.File, ID_EXIT, "Exit", "", wx.ITEM_NORMAL)
        self.File.AppendItem(self.Exit)
        self.frame_1_menubar.Append(self.File, "File")
        # Menu Bar end
        self.panel_1 = wx.Panel(self, -1)
        self.label_1 = wx.StaticText(self, -1, "X Freq")
        self.slider_1 = wx.Slider(self, ID_SLIDER_1, 50, 0, 100)
        self.panel_2 = wx.Panel(self, -1)
        self.label_2 = wx.StaticText(self, -1, "X Phase")
        self.slider_2 = wx.Slider(self, ID_SLIDER_2, 50, 0, 100)
        self.panel_3 = wx.Panel(self, -1)
        self.label_3 = wx.StaticText(self, -1, "Y Freq")
        self.slider_3 = wx.Slider(self, ID_SLIDER_3, 50, 0, 100)
        self.panel_4 = wx.Panel(self, -1)
        self.label_4 = wx.StaticText(self, -1, "Y Phase")
        self.slider_4 = wx.Slider(self, ID_SLIDER_4, 50, 0, 100)
        self.panel_5 = wx.Panel(self, -1)

        self.__set_properties()
        self.__do_layout()
        # end wxGlade

        wx.EVT_MENU(self, ID_EXIT, self.MenuExit)
	wx.EVT_SLIDER(self, ID_SLIDER_1,self.XFreq)
	wx.EVT_SLIDER(self, ID_SLIDER_2,self.XPhase)
	wx.EVT_SLIDER(self, ID_SLIDER_3,self.YFreq)
	wx.EVT_SLIDER(self, ID_SLIDER_4,self.YPhase)


	sample_rate = 32e3

	self.fg = gr.flow_graph()
	self.src1 = gr.sig_source_c(sample_rate, gr.GR_SIN_WAVE, 500, 1.1, 0)
	self.src2 = gr.sig_source_c(sample_rate, gr.GR_SIN_WAVE, 500, 1.1, 0)
	self.phase1 = gr.multiply_const_cc(complex(1,0))
	self.phase2 = gr.multiply_const_cc(complex(1,0))
	c2f1 = gr.complex_to_float()
	c2f2 = gr.complex_to_float()
	speed = gr.throttle(gr.sizeof_float,sample_rate)
        sink, win = scopesink.make_scope_sink_f (self, self.panel_1, "Lissajouse Figures", sample_rate)
	self.fg.connect(self.src1,self.phase1,c2f1,speed,(sink, 0))
	self.fg.connect(self.src2,self.phase2,c2f2,(sink, 1))

	self.fg.start()

    def __set_properties(self):
        # begin wxGlade: MyFrame.__set_properties
        self.SetTitle("frame_1")
        self.panel_1.SetSize((640, 270))
        self.slider_1.SetSize((200, 19))
        self.slider_2.SetSize((200, 19))
        self.slider_3.SetSize((200, 19))
        self.slider_4.SetSize((200, 19))
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyFrame.__do_layout
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_2 = wx.FlexGridSizer(1, 2, 0, 0)
        grid_sizer_1 = wx.GridSizer(4, 3, 0, 0)
        sizer_2.Add(self.panel_1, 1, wx.EXPAND, 0)
        grid_sizer_1.Add(self.label_1, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
        grid_sizer_1.Add(self.slider_1, 0, wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
        grid_sizer_1.Add(self.panel_2, 1, wx.EXPAND, 0)
        grid_sizer_1.Add(self.label_2, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
        grid_sizer_1.Add(self.slider_2, 0, wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
        grid_sizer_1.Add(self.panel_3, 1, wx.EXPAND, 0)
        grid_sizer_1.Add(self.label_3, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
        grid_sizer_1.Add(self.slider_3, 0, wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
        grid_sizer_1.Add(self.panel_4, 1, wx.EXPAND, 0)
        grid_sizer_1.Add(self.label_4, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
        grid_sizer_1.Add(self.slider_4, 0, wx.ALIGN_CENTER_VERTICAL|wx.FIXED_MINSIZE, 0)
        grid_sizer_1.Add(self.panel_5, 1, wx.EXPAND, 0)
        sizer_2.Add(grid_sizer_1, 1, wx.EXPAND, 0)
        sizer_1.Add(sizer_2, 1, wx.EXPAND, 0)
        self.SetAutoLayout(True)
        self.SetSizer(sizer_1)
        sizer_1.Fit(self)
        sizer_1.SetSizeHints(self)
        self.Layout()
        # end wxGlade

    def MenuExit(self, event):
	self.fg.stop()
        self.Close()

    def XFreq(self, event):
	self.src1.set_frequency(self.slider_1.GetValue()*10.)

    def XPhase(self, event):
	angle = self.slider_2.GetValue()-50.
	real = math.cos(.02*math.pi*angle)
	imag = math.sin(.02*math.pi*angle)
	self.phase1.set_k(complex(real,imag))

    def YFreq(self, event):
	self.src2.set_frequency(self.slider_3.GetValue()*10)

    def YPhase(self, event):
	angle = self.slider_4.GetValue()-50.
	real = math.cos(.02*math.pi*angle)
	imag = math.sin(.02*math.pi*angle)
	self.phase2.set_k(complex(real,imag))


# end of class MyFrame

class MyApp(wx.App):
  def OnInit(self):
    frame = MyFrame(None, -1, "Lissajous Figures")
    frame.Show(True)
    self.SetTopWindow(frame)
    return True

app = MyApp(0)
app.MainLoop()

