(ID_NEW.STATIC_TEXT, images.getToolStaticTextBitmap()),
(ID_NEW.STATIC_BITMAP, images.getToolStaticBitmapBitmap()),
(ID_NEW.STATIC_LINE, images.getToolStaticLineBitmap()),
-
(ID_NEW.BUTTON, images.getToolButtonBitmap()),
(ID_NEW.BITMAP_BUTTON, images.getToolBitmapButtonBitmap()),
(ID_NEW.STATIC_BOX, images.getToolStaticBoxBitmap()),
wx.wxEVT_COMMAND_BUTTON_CLICKED, g.frame.OnCreate)
wx.EVT_KEY_DOWN(self, self.OnKeyDown)
wx.EVT_KEY_UP(self, self.OnKeyUp)
+ # wxMSW does not generate click events for StaticBox
+ if wx.Platform == '__WXMSW__':
+ self.Bind(wx.EVT_LEFT_DOWN, self.OnClickBox)
+ self.drag = None
def AddButton(self, id, image, text):
from wx.lib import buttons
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
# Each group is inside box
id = wx.NewId()
box = wx.StaticBox(self, id, '[+] '+name, style=wx.WANTS_CHARS)
+ box.SetForegroundColour(wx.Colour(64, 64, 64))
+# box.SetFont(g.smallerFont())
box.show = True
box.name = name
box.gnum = len(self.groups)
- box.SetFont(g.smallerFont())
box.Bind(wx.EVT_LEFT_DOWN, self.OnClickBox)
boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
- boxSizer.Add((0, 4))
+ boxSizer.Add((0, 0))
self.boxes[id] = box
- self.curSizer = wx.GridSizer(0, 3)
+ self.curSizer = wx.GridSizer(0, 3, 3, 3)
boxSizer.Add(self.curSizer)
self.sizer.Add(boxSizer, 0, wx.TOP | wx.LEFT | wx.RIGHT | wx.EXPAND, 4)
self.groups.append((box,{}))
# Enable/disable group
def EnableGroup(self, gnum, enable = True):
grp = self.groups[gnum]
- grp[0].Enable(enable)
for b in grp[1].values(): b.Enable(enable)
# Show/hide group
grp[1][id].Enable(enable)
def OnClickBox(self, evt):
- box = self.boxes[evt.GetId()]
+ if wx.Platform == '__WXMSW__':
+ box = None
+ for id,b in self.boxes.items():
+ # How to detect a click on a label?
+ if b.GetRect().Inside(evt.GetPosition()):
+ box = b
+ break
+ if not box:
+ evt.Skip()
+ return
+ else:
+ box = self.boxes[evt.GetId()]
# Collapse/restore static box, change label
self.ShowGroup(box.gnum, not box.show)
if box.show: box.SetLabel('[+] ' + box.name)
else: box.SetLabel('[-] ' + box.name)
self.Layout()
+ self.Refresh()
+ #for b in self.boxes.items():
+
+ # DaD
+ def OnLeftDownOnButton(self, evt):
+ self.posDown = evt.GetPosition()
+ self.idDown = evt.GetId()
+ self.btnDown = evt.GetEventObject()
+ evt.Skip()
- # Drag
- def OnRightClick(self, evt):
+ 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()
- if wx.Platform != '__WXMAC__':
+ 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()
icon.CopyFromBitmap(bm)
dragSource = wx.DropSource(self, icon)
- else: # on Mac DragSource requires cursor (but does not work anyway)
+ else:
curs = wx.CursorFromImage(wx.ImageFromBitmap(bm))
dragSource = wx.DropSource(self, curs)
dragSource.SetData(do)
self.EnableGroupItem(GROUP_MENUS, ID_NEW.MENU_BAR)
# Save state
self.state = state
+ self.Refresh()