wx.EVT_KEY_DOWN(self, self.OnKeyDown)
wx.EVT_KEY_UP(self, self.OnKeyUp)
+ self.drag = None
+
def AddButton(self, id, image, text):
from wx.lib import buttons
button = buttons.GenBitmapButton(self, id, image, size=self.TOOL_SIZE,
button.SetBezelWidth(0)
wx.EVT_KEY_DOWN(button, self.OnKeyDown)
wx.EVT_KEY_UP(button, self.OnKeyUp)
- wx.EVT_RIGHT_DOWN(button, self.OnRightClick)
+ wx.EVT_LEFT_DOWN(button, self.OnLeftDownOnButton)
+ wx.EVT_MOTION(button, self.OnMotionOnButton)
button.SetToolTipString(text)
self.curSizer.Add(button)
self.groups[-1][1][id] = button
else: box.SetLabel('[-] ' + box.name)
self.Layout()
- # Drag
- def OnRightClick(self, evt):
+ # DaD
+ def OnLeftDownOnButton(self, evt):
+ self.posDown = evt.GetPosition()
+ self.idDown = evt.GetId()
+ self.btnDown = evt.GetEventObject()
+ evt.Skip()
+
+ def OnMotionOnButton(self, evt):
+ # Detect dragging
+ if evt.Dragging() and evt.LeftIsDown():
+ d = evt.GetPosition() - self.posDown
+ if max(abs(d[0]), abs(d[1])) >= 5:
+ if self.btnDown.HasCapture():
+ # Generate up event to release mouse
+ evt = wx.MouseEvent(wx.EVT_LEFT_UP.typeId)
+ evt.SetId(self.idDown)
+ # Set flag to prevent normal button operation this time
+ self.drag = True
+ self.btnDown.ProcessEvent(evt)
+ self.StartDrag()
+ evt.Skip()
+
+ def StartDrag(self):
do = MyDataObject()
- do.SetData(str(evt.GetId()))
- bm = evt.GetEventObject().GetBitmapLabel()
+ do.SetData(str(self.idDown))
+ bm = self.btnDown.GetBitmapLabel()
# wxGTK requires wxIcon cursor, wxWIN and wxMAC require wxCursor
if wx.Platform == '__WXGTK__':
icon = wx.EmptyIcon()
# Register events
wx.EVT_TREE_SEL_CHANGED(self, self.GetId(), self.OnSelChanged)
# One works on Linux, another on Windows
- if wx.Platform == '__WXGTK__':
+ if wx.Platform == '__WXGTK__': # !!! MAC too?
wx.EVT_TREE_ITEM_ACTIVATED(self, self.GetId(), self.OnItemActivated)
else:
wx.EVT_LEFT_DCLICK(self, self.OnDClick)