X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/eb6a4098a0f2e9ae55e72ad960b3dfc134d177c9..d14a1e28567de23c586bc80017073d0c39f8d18f:/wxPython/wx/lib/foldmenu.py diff --git a/wxPython/wx/lib/foldmenu.py b/wxPython/wx/lib/foldmenu.py new file mode 100644 index 0000000000..72e3819221 --- /dev/null +++ b/wxPython/wx/lib/foldmenu.py @@ -0,0 +1,78 @@ + +import wx +from wx.lib.evtmgr import eventManager + +class FoldOutWindow(wx.PopupWindow): + def __init__(self,parent,style=0): + wx.PopupWindow.__init__(self,parent,style) + self.SetAutoLayout(True) + self.sizer=wx.BoxSizer(wx.HORIZONTAL) + self.SetSizer(self.sizer, deleteOld=False) + self.handlers={} + self.InitColors() + self.inWindow=False + wx.EVT_ENTER_WINDOW(self,self.evEnter) + wx.EVT_LEAVE_WINDOW(self,self.evLeave) + + def InitColors(self): + faceClr = wx.SystemSettings_GetSystemColour(wx.SYS_COLOUR_WINDOW) + self.SetBackgroundColour(faceClr) + + def AddButton(self,bitmap,handler=None): + id=wx.NewId() + btn=wx.BitmapButton(self,id,bitmap) + self.sizer.Add(btn, 1, wx.ALIGN_CENTER|wx.ALL|wx.EXPAND, 2) + wx.EVT_BUTTON(self,id,self.OnBtnClick) + self.sizer.Fit(self) + self.Layout() + if handler: + self.handlers[id]=handler + return id + + def Popup(self): + if not self.IsShown(): + self.Show() + + def OnBtnClick(self,event): + id=event.GetEventObject().GetId() + if self.handlers.has_key(id): + self.handlers[id](event) + self.Hide() + self.inWindow=False + event.Skip() + + def evEnter(self,event): + self.inWindow=True + self.rect=self.GetRect() + event.Skip() + + def evLeave(self,event): + if self.inWindow: + if not self.rect.Inside(self.ClientToScreen(event.GetPosition())): + self.Hide() + event.Skip() + + + + + +class FoldOutMenu(wx.BitmapButton): + def __init__(self,parent,id,bitmap,pos = wx.DefaultPosition, + size = wx.DefaultSize, style = wx.BU_AUTODRAW, + validator = wx.DefaultValidator, name = "button"): + wx.BitmapButton.__init__(self, parent, id, bitmap, pos, size, style, + validator, name) + self.parent=parent + wx.EVT_BUTTON(self.parent, self.GetId(), self.click) + self.popwin=FoldOutWindow(self.parent) + + def AddButton(self,bitmap,handler=None): + return self.popwin.AddButton(bitmap,handler=handler) + + def click(self,event): + pos=self.GetPosition() + sz=self.GetSize() + pos.x=pos.x+sz.width + pos.y=pos.y+sz.height/2 + self.popwin.Position(pos,sz) + self.popwin.Popup()