Created
April 5, 2012 05:32
-
-
Save kasbah/2308241 to your computer and use it in GitHub Desktop.
Soopad test
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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