From: Robin Dunn Date: Tue, 13 Nov 2001 03:16:03 +0000 (+0000) Subject: Finally figured out wxPopupWindow, added to demo. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/c0c84fa0883bf4d80162c4f64550a076e0a54b82 Finally figured out wxPopupWindow, added to demo. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@12395 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/wxPython/CHANGES.txt b/wxPython/CHANGES.txt index 4cfcb16f19..99e97c9486 100644 --- a/wxPython/CHANGES.txt +++ b/wxPython/CHANGES.txt @@ -81,6 +81,11 @@ Added wxStopWatch. Added wxMimeTypesManager and wxFileType. +Passing None for the handler parameter to one of the EVT_** functions +will now Disconnect the event. + +Added wxPopupWindow and wxPopupTransientWindow. + diff --git a/wxPython/demo/Main.py b/wxPython/demo/Main.py index 52c534bf68..0bc77f4a17 100644 --- a/wxPython/demo/Main.py +++ b/wxPython/demo/Main.py @@ -35,7 +35,7 @@ _treeList = [ 'wxRightTextCtrl', 'URLDragAndDrop', 'wxMimeTypesManager', - ##'wxPopupWindow', + 'wxPopupWindow', ]), ('Windows', ['wxFrame', 'wxDialog', 'wxMiniFrame', diff --git a/wxPython/demo/wxPopupWindow.py b/wxPython/demo/wxPopupWindow.py index 58133946bb..7973a417ea 100644 --- a/wxPython/demo/wxPopupWindow.py +++ b/wxPython/demo/wxPopupWindow.py @@ -3,28 +3,71 @@ from wxPython.wx import * #--------------------------------------------------------------------------- class TestPopup(wxPopupWindow): + """Adds a bit of text and mouse movement to the wxPopupWindow""" def __init__(self, parent, style): wxPopupWindow.__init__(self, parent, style) + self.SetBackgroundColour("CADET BLUE") + st = wxStaticText(self, -1, + "This is a special kind of top level\n" + "window that can be used for\n" + "popup menus, combobox popups\n" + "and such.\n\n" + "Try positioning the demo near\n" + "the bottom of the screen and \n" + "hit the button again.\n\n" + "In this demo this window can\n" + "be dragged with the left button\n" + "and closed with the right." + , + pos=(10,10)) + sz = st.GetBestSize() + self.SetSize( (sz.width+20, sz.height+20) ) EVT_LEFT_DOWN(self, self.OnMouseLeftDown) EVT_MOTION(self, self.OnMouseMotion) EVT_LEFT_UP(self, self.OnMouseLeftUp) + EVT_RIGHT_UP(self, self.OnRightUp) + EVT_LEFT_DOWN(st, self.OnMouseLeftDown) + EVT_MOTION(st, self.OnMouseMotion) + EVT_LEFT_UP(st, self.OnMouseLeftUp) + EVT_RIGHT_UP(st, self.OnRightUp) def OnMouseLeftDown(self, evt): - self.ldPos = evt.GetPosition() + self.ldPos = evt.GetEventObject().ClientToScreen(evt.GetPosition()) + self.wPos = self.GetParent().ClientToScreen(self.GetPosition()) self.CaptureMouse() def OnMouseMotion(self, evt): - if evt.Dragging(): - wPos = self.GetPosition() - dPos = evt.GetPosition() - self.Move((wPos.x + (dPos.x - self.ldPos.x), - wPos.y + (dPos.y - self.ldPos.y))) - print self.GetPosition() + if evt.Dragging() and evt.LeftIsDown(): + dPos = evt.GetEventObject().ClientToScreen(evt.GetPosition()) + nPos = (self.wPos.x + (dPos.x - self.ldPos.x), + self.wPos.y + (dPos.y - self.ldPos.y)) + self.Move(nPos) def OnMouseLeftUp(self, evt): self.ReleaseMouse() - pass + + + def OnRightUp(self, evt): + self.Show(false) + self.Destroy() + + +class TestTransientPopup(wxPopupTransientWindow): + """Adds a bit of text and mouse movement to the wxPopupWindow""" + def __init__(self, parent, style): + wxPopupTransientWindow.__init__(self, parent, style) + self.SetBackgroundColour("#FFB6C1") + st = wxStaticText(self, -1, + "wxPopupTransientWindow is a\n" + "wxPopupWindow which disappears\n" + "automatically when the user\n" + "clicks the mouse outside it or if it\n" + "loses focus in any other way." + , + pos=(10,10)) + sz = st.GetBestSize() + self.SetSize( (sz.width+20, sz.height+20) ) @@ -33,19 +76,38 @@ class TestPanel(wxPanel): wxPanel.__init__(self, parent, -1) self.log = log - b = wxButton(self, -1, "Show popup window", (25, 50)) + b = wxButton(self, -1, "Show wxPopupWindow", (25, 50)) EVT_BUTTON(self, b.GetId(), self.OnShowPopup) + b = wxButton(self, -1, "Show wxPopupTransientWindow", (25, 95)) + EVT_BUTTON(self, b.GetId(), self.OnShowPopupTransient) + def OnShowPopup(self, evt): win = TestPopup(self, wxSIMPLE_BORDER) - #win.SetPosition((200, 200)) - #win.SetSize((150, 150)) - win.Position((200, 200), (150, 150)) - win.SetBackgroundColour("CADET BLUE") + + # Show the popup right below or above the button + # depending on available screen space... + btn = evt.GetEventObject() + pos = btn.ClientToScreen( (0,0) ) + sz = btn.GetSize() + win.Position(pos, (0, sz.height)) + win.Show(true) + def OnShowPopupTransient(self, evt): + win = TestTransientPopup(self, wxSIMPLE_BORDER) + + # show the popup right below or above the button + btn = evt.GetEventObject() + pos = btn.ClientToScreen( (0,0) ) + sz = btn.GetSize() + win.Position(pos, (0, sz.height)) + + win.Popup(btn) + + #---------------------------------------------------------------------------