X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ec873c943d71f0d5f13e3398557071448cda6c23..a4027e74873007e3430af3bd77019bcab76f6c04:/wxPython/wx/lib/popupctl.py diff --git a/wxPython/wx/lib/popupctl.py b/wxPython/wx/lib/popupctl.py deleted file mode 100644 index ed3f3a0357..0000000000 --- a/wxPython/wx/lib/popupctl.py +++ /dev/null @@ -1,258 +0,0 @@ -#---------------------------------------------------------------------- -# Name: popup -# Purpose: Generic popup control -# -# Author: Gerrit van Dyk -# -# Created: 2002/11/20 -# Version: 0.1 -# RCS-ID: $Id$ -# License: wxWindows license -#---------------------------------------------------------------------- -# 12/09/2003 - Jeff Grimmett (grimmtooth@softhome.net) -# -# o 2.5 compatability update. -# -# 12/20/2003 - Jeff Grimmett (grimmtooth@softhome.net) -# -# o wxPopupDialog -> PopupDialog -# o wxPopupControl -> PopupControl -# - -import wx -from wx.lib.buttons import GenButtonEvent - - -class PopButton(wx.PyControl): - def __init__(self,*_args,**_kwargs): - apply(wx.PyControl.__init__,(self,) + _args,_kwargs) - - self.up = True - self.didDown = False - - self.InitColours() - - self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown) - self.Bind(wx.EVT_LEFT_UP, self.OnLeftUp) - self.Bind(wx.EVT_MOTION, self.OnMotion) - self.Bind(wx.EVT_PAINT, self.OnPaint) - - def InitColours(self): - faceClr = wx.SystemSettings_GetColour(wx.SYS_COLOUR_BTNFACE) - self.faceDnClr = faceClr - self.SetBackgroundColour(faceClr) - - shadowClr = wx.SystemSettings_GetColour(wx.SYS_COLOUR_BTNSHADOW) - highlightClr = wx.SystemSettings_GetColour(wx.SYS_COLOUR_BTNHIGHLIGHT) - self.shadowPen = wx.Pen(shadowClr, 1, wx.SOLID) - self.highlightPen = wx.Pen(highlightClr, 1, wx.SOLID) - self.blackPen = wx.Pen(wx.BLACK, 1, wx.SOLID) - - def Notify(self): - evt = GenButtonEvent(wx.wxEVT_COMMAND_BUTTON_CLICKED, self.GetId()) - evt.SetIsDown(not self.up) - evt.SetButtonObj(self) - evt.SetEventObject(self) - self.GetEventHandler().ProcessEvent(evt) - - def OnEraseBackground(self, event): - pass - - def OnLeftDown(self, event): - if not self.IsEnabled(): - return - self.didDown = True - self.up = False - self.CaptureMouse() - self.GetParent().textCtrl.SetFocus() - self.Refresh() - event.Skip() - - def OnLeftUp(self, event): - if not self.IsEnabled(): - return - if self.didDown: - self.ReleaseMouse() - if not self.up: - self.Notify() - self.up = True - self.Refresh() - self.didDown = False - event.Skip() - - def OnMotion(self, event): - if not self.IsEnabled(): - return - if event.LeftIsDown(): - if self.didDown: - x,y = event.GetPosition() - w,h = self.GetClientSize() - if self.up and x=0 and y=0: - self.up = False - self.Refresh() - return - if not self.up and (x<0 or y<0 or x>=w or y>=h): - self.up = True - self.Refresh() - return - event.Skip() - - def DrawBezel(self, dc, x1, y1, x2, y2): - # draw the upper left sides - if self.up: - dc.SetPen(self.highlightPen) - else: - dc.SetPen(self.shadowPen) - for i in range(2): - dc.DrawLine(x1+i, y1, x1+i, y2-i) - dc.DrawLine(x1, y1+i, x2-i, y1+i) - - # draw the lower right sides - if self.up: - dc.SetPen(self.shadowPen) - else: - dc.SetPen(self.highlightPen) - for i in range(2): - dc.DrawLine(x1+i, y2-i, x2+1, y2-i) - dc.DrawLine(x2-i, y1+i, x2-i, y2) - - def DrawArrow(self,dc): - w, h = self.GetSize() - mx = w / 2 - my = h / 2 - dc.SetPen(self.highlightPen) - dc.DrawLine(mx-5,my-5, mx+5,my-5) - dc.DrawLine(mx-5,my-5, mx,my+5) - dc.SetPen(self.shadowPen) - dc.DrawLine(mx+4,my-5, mx,my+5) - dc.SetPen(self.blackPen) - dc.DrawLine(mx+5,my-5, mx,my+5) - - def OnPaint(self, event): - width, height = self.GetClientSize() - x1 = y1 = 0 - x2 = width - 1 - y2 = height - 1 - dc = wx.BufferedPaintDC(self) - if self.up: - dc.SetBackground(wx.Brush(self.GetBackgroundColour(), wx.SOLID)) - else: - dc.SetBackground(wx.Brush(self.faceDnClr, wx.SOLID)) - dc.Clear() - self.DrawBezel(dc, x1, y1, x2, y2) - self.DrawArrow(dc) - - -#--------------------------------------------------------------------------- - - -# Tried to use wxPopupWindow but the control misbehaves on MSW -class PopupDialog(wx.Dialog): - def __init__(self,parent,content = None): - wx.Dialog.__init__(self,parent,-1,'', style = wx.BORDER_SIMPLE|wx.STAY_ON_TOP) - - self.ctrl = parent - self.win = wx.Window(self,-1,pos = (0,0),style = 0) - - if content: - self.SetContent(content) - - def SetContent(self,content): - self.content = content - self.content.Reparent(self.win) - self.content.Show(True) - self.win.SetClientSize(self.content.GetSize()) - self.SetSize(self.win.GetSize()) - - def Display(self): - pos = self.ctrl.ClientToScreen( (0,0) ) - dSize = wx.GetDisplaySize() - selfSize = self.GetSize() - tcSize = self.ctrl.GetSize() - - pos.x -= (selfSize.width - tcSize.width) / 2 - if pos.x + selfSize.width > dSize.width: - pos.x = dSize.width - selfSize.width - if pos.x < 0: - pos.x = 0 - - pos.y += tcSize.height - if pos.y + selfSize.height > dSize.height: - pos.y = dSize.height - selfSize.height - if pos.y < 0: - pos.y = 0 - - self.Move(pos) - - self.ctrl.FormatContent() - - self.ShowModal() - - -#--------------------------------------------------------------------------- - - -class PopupControl(wx.PyControl): - def __init__(self,*_args,**_kwargs): - if _kwargs.has_key('value'): - del _kwargs['value'] - apply(wx.PyControl.__init__,(self,) + _args,_kwargs) - - self.textCtrl = wx.TextCtrl(self,-1,'',pos = (0,0)) - self.bCtrl = PopButton(self,-1) - self.pop = None - self.content = None - self.OnSize(None) - - self.Bind(wx.EVT_SIZE, self.OnSize) - self.bCtrl.Bind(wx.EVT_BUTTON, self.OnButton, self.bCtrl) - # embedded control should get focus on TAB keypress - self.Bind(wx.EVT_SET_FOCUS, self.OnFocus) - - def OnFocus(self,evt): - self.textCtrl.SetFocus() - evt.Skip() - - def OnSize(self,evt): - w,h = self.GetClientSize() - self.textCtrl.SetDimensions(0,0,w-17,h) - self.bCtrl.SetDimensions(w-17,0,17,h) - - def OnButton(self,evt): - if not self.pop: - if self.content: - self.pop = PopupDialog(self,self.content) - del self.content - else: - print 'No Content to pop' - if self.pop: - self.pop.Display() - - def Enable(self,flag): - wx.PyControl.Enable(self,flag) - self.textCtrl.Enable(flag) - self.bCtrl.Enable(flag) - - def SetPopupContent(self,content): - if not self.pop: - self.content = content - self.content.Show(False) - else: - self.pop.SetContent(content) - - def FormatContent(self): - pass - - def PopDown(self): - if self.pop: - self.pop.EndModal(1) - - def SetValue(self,value): - self.textCtrl.SetValue(value) - - def GetValue(self): - return self.textCtrl.GetValue() - - -# an alias -PopupCtrl = PopupControl