Skip to content

Instantly share code, notes, and snippets.

@kasbah
Created April 5, 2012 05:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kasbah/2308241 to your computer and use it in GitHub Desktop.
Save kasbah/2308241 to your computer and use it in GitHub Desktop.
Soopad test
import wx
class mainFrame(wx.Frame):
def __init__(self,parent,title):
wx.Frame.__init__(self,None,title=title, size=(500,500))
self.bgpanel = wx.Panel(self)
self.sizer = wx.BoxSizer(wx.HORIZONTAL)
launch_pad = launchPad(self.bgpanel)
self.bgpanel.SetSizer(self.sizer)
self.sizer.Add(launch_pad,1, wx.SHAPED)
self.Show(True)
class launchPad(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent, -1)
self.SetBackgroundColour(wx.BLACK)
self.colour_map = (
(0 , 0 , 0, 0 ), # 0 0000 Off
(255, 0 , 0, 127 ), # 1 0001 Red Low
(255, 0 , 0, 180 ), # 2 0010 Red Med
(255, 0 , 0, 255 ), # 3 0011 Red Full
(0 , 255, 0, 127 ), # 4 0100 Grn Low
(255, 220, 0, 127 ), # 5 0101 Amb Low
(255, 150, 0, 127 ), # 6 0110 Amb dunno
(255, 100, 0, 170 ), # 7 0111 Amb dunno
(0 , 255, 0, 180 ), # 8 1000 Grn Med
(200, 127, 0, 170 ), # 9 1001 Amb dunno
(255, 220, 0, 170 ), # 10 1010 Amb dunno
(127, 200, 0, 170 ), # 11 1011 Amb dunno
(0 , 255, 0, 255 ), # 12 1100 Grn Full
(255, 127, 0, 170 ), # 13 1101 Amb dunno
(230, 255, 0, 255 ), # 14 1110 Yel
(255, 220, 0, 255 ), # 15 1111 Amb Full
)
self.menu_list = (
("Off ", 0 ),
("Red Full", 3 ),
("Red Med ", 2 ),
("Red Low ", 1 ),
("Grn Full", 12),
("Grn Med ", 8 ),
("Grn Low ", 4 ),
("Yel Full", 14),
("Amb Full", 15),
("Amb Med ", 10),
("Amb Low ", 5 )
)
self.sizer = wx.BoxSizer(wx.VERTICAL)
self.side_sizer = wx.BoxSizer(wx.HORIZONTAL)
self.top = side(parent, wx.BLACK)
self.bottom = side(parent, wx.BLACK)
self.left = side(parent, wx.BLACK)
self.right = side(parent, wx.BLACK)
self.sizer.Add(self.top, 1, wx.EXPAND)
self.side_sizer.Add(self.left, 1, wx.EXPAND)
self.button_sizer = wx.GridSizer(9,9,0,0)
self.leds = []
for number in range(9*9):
self.leds.append(ledPanel(self, number, self.colour_map[0]))
self.button_sizer.Add(self.leds[number], 1, wx.SHAPED)
self.side_sizer.Add(self.button_sizer, 9, wx.SHAPED)
self.side_sizer.Add(self.right, 1, wx.EXPAND)
self.sizer.Add(self.side_sizer, 9, wx.EXPAND)
self.sizer.Add(self.bottom, 1, wx.EXPAND)
self.SetSizer(self.sizer)
self.sizer.SetSizeHints(parent)
self.Bind(wx.EVT_SIZE, self.onSize)
self.Bind(wx.EVT_RIGHT_DOWN, self.onRightClick)
self.Bind(wx.EVT_LEFT_DOWN, self.onLeftClick)
self.Bind(wx.EVT_MOTION, self.onMotion)
def onMotion(self, event):
print event.GetId()
def onRightClick(self, event):
self.leds[event.GetId()].select(1)
menu = wx.Menu()
for index,item in enumerate(self.menu_list):
menu.Append(index,item[0])
wx.EVT_MENU(menu, index, self.menuSelection)
self.PopupMenu(menu, self.leds[event.GetId()].GetPosition() + event.GetPosition())
for item in self.leds:
item.select(0)
menu.Destroy()
def onLeftClick(self, event):
if event.CmdDown():
self.leds[event.GetId()].select(3)
def menuSelection(self, event):
for item in self.leds:
if item.selected:
item.setColour(self.colour_map[self.menu_list[event.GetId()][1]])
item.select(0)
def onSize(self, event):
size = self.GetSize()[0]
event.Skip()
class side(wx.Panel):
def __init__(self, parent, colour=wx.NullColour):
wx.Panel.__init__(self, parent, -1)
self.SetBackgroundColour(colour)
class ledPanel(wx.Panel):
def __init__(self, parent, Id, colour):
wx.Panel.__init__(self, parent, Id)
self.parent = parent
self.SetBackgroundColour(wx.BLACK)
self.selected = 0
self.colour = colour
self.Bind(wx.EVT_PAINT, self.onPaint)
self.Bind(wx.EVT_SIZE, self.onSize)
self.Bind(wx.EVT_RIGHT_DOWN, self.onMouse)
self.Bind(wx.EVT_LEFT_DOWN, self.onMouse)
self.Bind(wx.EVT_MOTION, self.onMouse)
def onMouse(self, event):
wx.PostEvent(self.parent, event)
event.Skip()
def select(self, val):
if val < 2:
self.selected = val
else:
self.selected = not self.selected
self.Refresh()
def setColour(self, colour):
self.colour = colour
self.Refresh()
def onSize(self, event):
self.size = self.GetSize()[0]
self.border = self.size/10.0
self.Refresh()
def onPaint(self, event):
dc = wx.PaintDC(self)
gc = wx.GraphicsContext.Create(dc)
gc.SetBrush(wx.Brush("#FFFFFF"))
gc.DrawRectangle(self.border,self.border,self.size - self.border*2.0 + 1,self.size - self.border*2.0)
gc.SetBrush(wx.Brush(self.colour))
gc.DrawRectangle(self.border,self.border,self.size - self.border*2.0 + 1,self.size - self.border*2.0)
if self.selected:
gc.SetBrush(wx.Brush("#26466D7F"))
gc.DrawRectangle(0,0,self.size,self.size)
app = wx.App(0)
frame = mainFrame(None, "SooPad Test")
app.MainLoop()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment