]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wx/lib/foldmenu.py
Merged the wxPy_newswig branch into the HEAD branch (main trunk)
[wxWidgets.git] / wxPython / wx / lib / foldmenu.py
diff --git a/wxPython/wx/lib/foldmenu.py b/wxPython/wx/lib/foldmenu.py
new file mode 100644 (file)
index 0000000..72e3819
--- /dev/null
@@ -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()