mirror of
https://github.com/wxWidgets/Phoenix.git
synced 2026-01-05 03:20:08 +01:00
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxPython/Phoenix/trunk@76373 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
194 lines
5.8 KiB
Python
194 lines
5.8 KiB
Python
#!/usr/bin/env python
|
|
|
|
import wx
|
|
import random
|
|
|
|
import os
|
|
import sys
|
|
|
|
try:
|
|
dirName = os.path.dirname(os.path.abspath(__file__))
|
|
except:
|
|
dirName = os.path.dirname(os.path.abspath(sys.argv[0]))
|
|
|
|
sys.path.append(os.path.split(dirName)[0])
|
|
|
|
try:
|
|
from agw import peakmeter as PM
|
|
except ImportError: # if it's not there locally, try the wxPython lib.
|
|
import wx.lib.agw.peakmeter as PM
|
|
|
|
|
|
class PeakMeterCtrlDemo(wx.Panel):
|
|
|
|
def __init__(self, parent, log):
|
|
|
|
wx.Panel.__init__(self, parent)
|
|
self.log = log
|
|
|
|
self.mainPanel = wx.Panel(self)
|
|
|
|
# Initialize Peak Meter control 1
|
|
self.vertPeak = PM.PeakMeterCtrl(self.mainPanel, -1, style=wx.SIMPLE_BORDER, agwStyle=PM.PM_VERTICAL)
|
|
# Initialize Peak Meter control 2
|
|
self.horzPeak = PM.PeakMeterCtrl(self.mainPanel, -1, style=wx.SUNKEN_BORDER, agwStyle=PM.PM_HORIZONTAL)
|
|
|
|
self.startButton = wx.Button(self.mainPanel, -1, "Start")
|
|
self.stopButton = wx.Button(self.mainPanel, -1, "Stop")
|
|
self.staticLine = wx.StaticLine(self.mainPanel)
|
|
|
|
self.gridCheck = wx.CheckBox(self.mainPanel, -1, "Show Grid")
|
|
self.falloffCheck = wx.CheckBox(self.mainPanel, -1, "Show Falloff Effect")
|
|
|
|
colour = self.mainPanel.GetBackgroundColour()
|
|
self.backColour = wx.ColourPickerCtrl(self.mainPanel, colour=colour)
|
|
self.lowColour = wx.ColourPickerCtrl(self.mainPanel, colour=wx.GREEN)
|
|
self.mediumColour = wx.ColourPickerCtrl(self.mainPanel, colour=wx.YELLOW)
|
|
self.highColour = wx.ColourPickerCtrl(self.mainPanel, colour=wx.RED)
|
|
|
|
self.timer = wx.Timer(self)
|
|
|
|
self.SetProperties()
|
|
self.DoLayout()
|
|
self.BindEvents()
|
|
|
|
|
|
def SetProperties(self):
|
|
|
|
self.vertPeak.SetMeterBands(10, 15)
|
|
self.horzPeak.SetMeterBands(10, 15)
|
|
self.falloffCheck.SetValue(1)
|
|
|
|
|
|
def DoLayout(self):
|
|
|
|
frameSizer = wx.BoxSizer(wx.VERTICAL)
|
|
mainSizer = wx.BoxSizer(wx.VERTICAL)
|
|
horzSizer = wx.BoxSizer(wx.HORIZONTAL)
|
|
rightSizer = wx.BoxSizer(wx.VERTICAL)
|
|
bottomSizer = wx.BoxSizer(wx.HORIZONTAL)
|
|
checkSizer = wx.BoxSizer(wx.VERTICAL)
|
|
colourSizer = wx.FlexGridSizer(2, 4, 1, 10)
|
|
|
|
horzSizer.Add(self.vertPeak, 0, wx.EXPAND|wx.ALL, 15)
|
|
horzSizer.Add(self.horzPeak, 0, wx.EXPAND|wx.ALL, 15)
|
|
|
|
rightSizer.Add(self.startButton, 0, wx.ALL, 5)
|
|
rightSizer.Add(self.stopButton, 0, wx.LEFT|wx.RIGHT, 5)
|
|
horzSizer.Add(rightSizer, 0, wx.ALIGN_TOP|wx.ALL, 5)
|
|
horzSizer.Add((15, 0))
|
|
|
|
mainSizer.Add(horzSizer, 0, wx.EXPAND)
|
|
mainSizer.Add(self.staticLine, 0, wx.EXPAND|wx.ALL, 5)
|
|
|
|
checkSizer.Add(self.gridCheck, 0, wx.EXPAND|wx.ALL, 5)
|
|
checkSizer.Add(self.falloffCheck, 0, wx.EXPAND|wx.LEFT|wx.BOTTOM, 5)
|
|
|
|
labelBack = wx.StaticText(self.mainPanel, -1, "Background")
|
|
labelLow = wx.StaticText(self.mainPanel, -1, "Low Freq")
|
|
labelMed = wx.StaticText(self.mainPanel, -1, "Med Freq")
|
|
labelHigh = wx.StaticText(self.mainPanel, -1, "High Freq")
|
|
|
|
colourSizer.Add(labelBack)
|
|
colourSizer.Add(labelLow)
|
|
colourSizer.Add(labelMed)
|
|
colourSizer.Add(labelHigh)
|
|
|
|
colourSizer.Add(self.backColour, 0, wx.EXPAND)
|
|
colourSizer.Add(self.lowColour, 0, wx.EXPAND)
|
|
colourSizer.Add(self.mediumColour, 0, wx.EXPAND)
|
|
colourSizer.Add(self.highColour, 0, wx.EXPAND)
|
|
|
|
bottomSizer.Add(checkSizer, 0, wx.EXPAND|wx.ALL, 5)
|
|
bottomSizer.Add((0, 0), 1, wx.EXPAND)
|
|
bottomSizer.Add(colourSizer, 0, wx.EXPAND|wx.ALL, 5)
|
|
bottomSizer.Add((0, 5))
|
|
mainSizer.Add(bottomSizer, 0, wx.EXPAND|wx.BOTTOM|wx.RIGHT, 5)
|
|
|
|
self.mainPanel.SetSizer(mainSizer)
|
|
mainSizer.Layout()
|
|
frameSizer.Add(self.mainPanel, 1, wx.EXPAND)
|
|
self.SetSizer(frameSizer)
|
|
frameSizer.Layout()
|
|
|
|
|
|
def BindEvents(self):
|
|
|
|
self.Bind(wx.EVT_TIMER, self.OnTimer)
|
|
self.Bind(wx.EVT_CHECKBOX, self.OnGrid, self.gridCheck)
|
|
self.Bind(wx.EVT_CHECKBOX, self.OnFalloff, self.falloffCheck)
|
|
self.Bind(wx.EVT_BUTTON, self.OnStart, self.startButton)
|
|
self.Bind(wx.EVT_BUTTON, self.OnStop, self.stopButton)
|
|
|
|
self.Bind(wx.EVT_COLOURPICKER_CHANGED, self.OnPickColour)
|
|
|
|
|
|
def OnTimer(self, event):
|
|
|
|
# generate 15 random number and set them as data for the meter
|
|
nElements = 15
|
|
arrayData = []
|
|
|
|
for i in range(nElements):
|
|
nRandom = random.randint(0, 100)
|
|
arrayData.append(nRandom)
|
|
|
|
self.vertPeak.SetData(arrayData, 0, nElements)
|
|
self.horzPeak.SetData(arrayData, 0, nElements)
|
|
|
|
|
|
def OnGrid(self, event):
|
|
|
|
self.vertPeak.ShowGrid(event.IsChecked())
|
|
|
|
|
|
def OnFalloff(self, event):
|
|
|
|
self.vertPeak.SetFalloffEffect(event.IsChecked())
|
|
|
|
|
|
def OnStart(self, event):
|
|
|
|
self.timer.Start(1000/2) # 2 fps
|
|
|
|
self.vertPeak.Start(1000/18) # 18 fps
|
|
self.horzPeak.Start(1000/20) # 20 fps
|
|
|
|
|
|
def OnStop(self, event):
|
|
|
|
self.timer.Stop()
|
|
self.vertPeak.Stop()
|
|
self.horzPeak.Stop()
|
|
|
|
|
|
def OnPickColour(self, event):
|
|
|
|
obj = event.GetEventObject()
|
|
colour = event.GetColour()
|
|
if obj == self.backColour:
|
|
self.horzPeak.SetBackgroundColour(colour)
|
|
else:
|
|
low = self.lowColour.GetColour()
|
|
med = self.mediumColour.GetColour()
|
|
high = self.highColour.GetColour()
|
|
self.horzPeak.SetBandsColour(low, med, high)
|
|
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
def runTest(frame, nb, log):
|
|
win = PeakMeterCtrlDemo(nb, log)
|
|
return win
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
overview = PM.__doc__
|
|
|
|
if __name__ == '__main__':
|
|
import sys,os
|
|
import run
|
|
run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
|
|
|
|
|