]> git.saurik.com Git - wxWidgets.git/blobdiff - wxPython/wx/tools/XRCed/tools.py
Send the calendar and date changed events to the datepicker ctrl first
[wxWidgets.git] / wxPython / wx / tools / XRCed / tools.py
index f2db30528c5355102e57728ea007c6e398822a92..abb8297b0c07154c3596ff3c8b6a17a5ed6bf7ee 100644 (file)
@@ -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,23 +157,58 @@ 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()
 
-    # 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)
@@ -325,3 +364,4 @@ class Tools(wx.Panel):
                 self.EnableGroupItem(GROUP_MENUS, ID_NEW.MENU_BAR)
         # Save state
         self.state = state
+        self.Refresh()