import wx
class Panel(object):
def __init__(self):
object.__init__(self)
self._size = None
self._caption = ""
def GetSize(self, size):
self._size = size
return self
def Caption(self, caption):
self._caption = caption
return self
class cWindow(wx.Window):
def __init__(self, parent, id=-1, pos=wx.DefaultPosition,
size=wx.DefaultSize, style=wx.SIMPLE_BORDER, name="cWindow"):
wx.Window.__init__(self, parent, id, pos, size, style, name)
def GetCheckedBitmap():
return wx.BitmapFromImage(GetCheckedImage())
def GetCheckedImage():
return wx.Image("checked.ico", wx.BITMAP_TYPE_ICO)
def GetNotCheckedBitmap():
return wx.BitmapFromImage(GetNotCheckedImage())
def GetNotCheckedImage():
return wx.Image("notchecked.ico", wx.BITMAP_TYPE_ICO)
def GrayOut(anImage):
factor = 0.7
if anImage.HasMask():
maskColor = (anImage.GetMaskRed(), anImage.GetMaskGreen(),
anImage.GetMaskBlue())
else:
maskColor = None
data = map(ord, list(anImage.GetData()))
for i in range(0, len(data), 3):
pixel = (data[i], data[i+1], data[i+2])
pixel = MakeGray(pixel, factor, maskColor)
for x in range(3):
data[i+x] = pixel[x]
anImage.SetData(''.join(map(chr, data)))
return anImage.ConvertToBitmap()
def MakeGray((r,g,b), factor, maskColor):
if(r,g,b)!=maskColor:
return map(lambda x: int((230 - x) * factor)+ x , (r,g,b))
else:
return (r,g,b)
class cItem(wx.PyControl):
def __init__(self, parent, id=wx.ID_ANY, label="",
pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.NO_BORDER,
validator=wx.DefaultValidator, name="cItem"):
wx.PyControl.__init__(self, parent, id, pos, size, style,
validator, name)
self._isHover = False
self._isSelect = False
self._hasFocus = False
self._checked = False
self.bitmaps = {"CheckEnable": GetCheckedBitmap(),
"UnCheckedEnable": GetNotCheckedBitmap(),
"CheckedDisable": GrayOut(GetCheckedImage()),
"UnCheckedDisable":
GrayOut(GetNotCheckedImage())}
self.SetLabel(label)
self._spacing = 3
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
self.Bind(wx.EVT_LEFT_DOWN, self.OnMouseClick)
if wx.Platform == '__WXMSW__':
self.Bind(wx.EVT_LEFT_DCLICK, self.OnMouseClick)
self.Bind(wx.EVT_KEY_UP, self.OnKeyUp)
self.Bind(wx.EVT_SET_FOCUS, self.OnSetFocus)
self.Bind(wx.EVT_KILL_FOCUS, self.OnKillFocus)
def OnPaint(self, event):
dc = wx.BufferedPaintDC(self)
self.Draw(dc)
def SetLabel(self, label):
wx.PyControl.SetLabel(self, label)
self.Refresh()
#def GetLabel()
def SetSpacing(self, spacing):
self._spacing = spacing
self.Refresh()
def GetSpacing(self):
return self._spacing
def HasFocus(self):
return self._hasFocus
def Draw(self, dc):
width, height = self.GetClientSize()
if not width or not height:
return
backcolor = self.GetBackgroundColour()
backbrush = wx.Brush(backcolor, wx.SOLID)
dc.SetBackground(backbrush)
dc.Clear()
if self.IsEnabled():
dc.SetTextForeground(self.GetForegroundColour())
else:
dc.SetTextForeground(wx.SystemSettings.GetColour(wx.SYS_COLOUR_GRAYTEXT))
dc.SetFont(self.GetFont())
label = self.GetLabel()
bitmap = self.GetBitmap()
spacing = self.GetSpacing()
textW, textH = dc.GetTextExtent(label)
bitmapW, bitmapH = bitmap.GetWidth(), bitmap.GetHeight()
bmpXpos = 0
bmpYpos = (height - bitmapH)/2
textXpos = bitmapW + spacing
textYpos = (height - textH)/2
dc.DrawBitmap(bitmap, bmpXpos, bmpYpos, True)
dc.DrawText(label, textXpos, textYpos)
if self.HasFocus():
dc.SetBrush(wx.TRANSPARENT_BRUSH)
dc.SetPen(wx.BLACK_PEN)
dc.DrawRectangle(textXpos, textYpos, textW, textH)
def OnEraseBackground(self, event):
pass
def OnMouseClick(self, event):
if not self.IsEnabled():
return
self.SendMenuEvent()
event.Skip()
def Enable(self, enable=True):
wx.PyControl.SetBackgroundColour(self, enable)
self.Refresh()
def SendMenuEvent(self):
if self.IsSelected():
self.isHover = False
selectEvent =
wx.ComandEvent( wx.wxEVT_COMMAND_MENU_SELECTED, GetId())
selectEvent.SetInt(0)
else:
self.isHover = True
selectEvent =
wx.CommandEvent(wx.wxEVT_COMMAND_MENU_SELECTED, GetId())
selectEvent.SetInt(1)
selectEvent.SetEventObject(self)
self.GetEventHandler().ProcessEvent(selectEvent)
self.Refres()
def OnKeyUp(self, event):
if event.GetKeyCode() == wx.WXK_ENTER:
self.SendMenuEvent()
event.Skip()
return
event.Skip()
def OnSetFocus(self, event):
self._hasFocus = True
self.Refresh()
def OnKillFocus(self, event):
self._hasFocus = False
self.Refresh()
def AcceptxFocusFromKeyboard(self):
return True
def AcceptsFocus(self):
return False
def GetDefaultAttributes(self):
pass
#return wx.MenuItem.GetClassDefaultAttributes()
def ShowIdInheritColours(self):
return True
def DoGetBestSize(self):
label = self.GetLabel()
font = self.GetFont()
bitmap = self.GetBitmap()
if not font:
font = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)
dc = wx.ClientDC(self)
dc.SetFont()
def GetValue(self):
return self._isSelect
def IsChecked(self):
return self._checked
def SetValue(self, state):
self._checked = state
self.Refresh()
def GetBitmap(self):
if self.IsEnabled():
if self.IsChecked():
return self.bitmaps["CheckedEnable"]
else:
return self.bitmaps["UnCheckedEnable"]
else:
if self.IsChecked():
return self.bitmaps["ChecedDisable"]
else:
return self.bitmaps["UnCheckedDisable"]
class Frame(wx.MiniFrame):
def __init__(self, parent, id, title, pos, size, style, name):
style = wx.DEFAULT_FRAME_STYLE
title = ""
wx.MiniFrame.__init__(self, parent, id, title, pos, size,
style, name)
self._title = ""
def GetTitle(self, title):
self._title = title
return self
class MainFrame(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, id, title)
windo = Frame(self, -1, "Tool", wx.DefaultPosition,
wx.Size(200, 200), wx.DEFAULT_FRAME_STYLE, "Window")
menubar = wx.MenuBar()
menu = wx.Menu()
menu.Append(10, "Window", "")
menubar.Append(menu, "Tool")
self.SetMenuBar(menubar)
panel = wx.Panel(self, -1)
item = cItem(panel, -1, "Menu")
app = wx.App()
MainFrame(None, -1, "Test-10").Show()
app.MainLoop()