X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a7d8ec1e42288ca161d70e754bbe32dd387c7765..2b232d202ae5e2d2b375aa5dde006720f284386b:/wxPython/wx/tools/XRCed/tools.py diff --git a/wxPython/wx/tools/XRCed/tools.py b/wxPython/wx/tools/XRCed/tools.py index 3471d256bb..abb8297b0c 100644 --- a/wxPython/wx/tools/XRCed/tools.py +++ b/wxPython/wx/tools/XRCed/tools.py @@ -56,7 +56,6 @@ class Tools(wx.Panel): (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()), @@ -99,6 +98,10 @@ class Tools(wx.Panel): 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 @@ -107,7 +110,8 @@ class Tools(wx.Panel): 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 @@ -116,15 +120,16 @@ class Tools(wx.Panel): # 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,{})) @@ -132,7 +137,6 @@ class Tools(wx.Panel): # 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 @@ -153,18 +157,52 @@ class Tools(wx.Panel): 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() + + 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() - # Drag - def OnRightClick(self, evt): + 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() @@ -326,3 +364,4 @@ class Tools(wx.Panel): self.EnableGroupItem(GROUP_MENUS, ID_NEW.MENU_BAR) # Save state self.state = state + self.Refresh()