]> git.saurik.com Git - wxWidgets.git/commitdiff
drag-and-drop with left button
authorRoman Rolinsky <rolinsky@femagsoft.com>
Mon, 30 Apr 2007 15:48:42 +0000 (15:48 +0000)
committerRoman Rolinsky <rolinsky@femagsoft.com>
Mon, 30 Apr 2007 15:48:42 +0000 (15:48 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45719 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

wxPython/wx/tools/XRCed/panel.py
wxPython/wx/tools/XRCed/params.py
wxPython/wx/tools/XRCed/tools.py
wxPython/wx/tools/XRCed/tree.py
wxPython/wx/tools/XRCed/undo.py
wxPython/wx/tools/XRCed/xrced.py

index 1bb555d530d20a58be627966eb6e9770cf07afaf..361ab59b6683c5120ed877e3776e3504d41fe258 100644 (file)
@@ -348,6 +348,7 @@ class PropPage(ParamPage):
                     self.origChecks.append((param, True))
                 self.origControls.append((param, value, True))
             except KeyError:
+                # Optional param not present in xxx - set empty value
                 self.checks[param].SetValue(False)
                 w.SetValue('')
                 w.Enable(False)
index 769f6d8f485dc4dcf4b62eccadc562281f26bee6..c62d3e1f495d6dcca447ba37846c3d3a13f935e4 100644 (file)
@@ -397,9 +397,11 @@ class ParamUnit(PPanel):
     def GetValue(self):
         return self.text.GetValue()
     def SetValue(self, value):
+        self.freeze = True
         if not value: value = '0'        
         self.text.SetValue(value)
         self.Change(0)
+        self.freeze = False
     def Change(self, x):
         self.freeze = True
         # Check if we are working with dialog units
index 3471d256bb9939ea26ef7f905ef68c0190f6c5f4..6fda618cfcf42bafb736c1fd435db25c166ff968 100644 (file)
@@ -100,6 +100,8 @@ class Tools(wx.Panel):
         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,
@@ -107,7 +109,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
@@ -160,11 +163,32 @@ class Tools(wx.Panel):
         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()
index 8ed352c8b077befcac6528df113a85335cbda8ee..e2ab28a4037cfd7e4545f80da4bd5ef862e8d31e 100644 (file)
@@ -501,7 +501,7 @@ class XML_Tree(wx.TreeCtrl):
         # 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)
index 4b28a76c38dd32c233f68fcfc32439f78bde5db0..f883f88e933ceee468e390e80647c5b2a56e0b97 100644 (file)
@@ -274,7 +274,8 @@ class UndoEdit:
         # Save current state for redo
         map(ParamPage.SaveState, g.panel.pages)
         pages = map(ParamPage.GetState, g.panel.pages)
-        map(ParamPage.SetState, g.panel.pages, self.pages)
+        if self.pages:
+            map(ParamPage.SetState, g.panel.pages, self.pages)
         self.pages = pages
         self.update(selected)
     def redo(self):
index 67966b9c2865b19d15909224aa79656be8485c21..26d6bc6f302b176bf9ff758288a718a259d2809a 100644 (file)
@@ -1101,6 +1101,10 @@ Homepage: http://xrced.sourceforge.net\
                 print msg
 
     def OnCreate(self, evt):
+        # Ignore fake events generated while dragging
+        if g.tools.drag: 
+            g.tools.drag = False
+            return
         selected = tree.selection
         if tree.ctrl: appendChild = False
         else: appendChild = not tree.NeedInsert(selected)