From 5c82ed90df734ee5a00dd3d465e7a39716218cba Mon Sep 17 00:00:00 2001 From: Roman Rolinsky Date: Thu, 26 Apr 2007 19:51:14 +0000 Subject: [PATCH] drag-and-drop adding of controls to test window git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@45678 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- wxPython/wx/tools/XRCed/globals.py | 13 +++++++++++++ wxPython/wx/tools/XRCed/tools.py | 22 +++++++++++++++++++--- 2 files changed, 32 insertions(+), 3 deletions(-) diff --git a/wxPython/wx/tools/XRCed/globals.py b/wxPython/wx/tools/XRCed/globals.py index ca71046967..43f42e39d8 100644 --- a/wxPython/wx/tools/XRCed/globals.py +++ b/wxPython/wx/tools/XRCed/globals.py @@ -71,3 +71,16 @@ class Globals: g = Globals() + + +class MyDataObject(wx.PyDataObjectSimple): + def __init__(self): + wx.PyDataObjectSimple.__init__(self, wx.CustomDataFormat('XRCed_DND')) + self.data = '' + def GetDataSize(self): + return len(self.data) + def GetDataHere(self): + return self.data # returns a string + def SetData(self, data): + self.data = data + return True diff --git a/wxPython/wx/tools/XRCed/tools.py b/wxPython/wx/tools/XRCed/tools.py index 45687f850a..f2db30528c 100644 --- a/wxPython/wx/tools/XRCed/tools.py +++ b/wxPython/wx/tools/XRCed/tools.py @@ -16,7 +16,6 @@ GROUP_WINDOWS, GROUP_MENUS, GROUP_SIZERS, GROUP_CONTROLS = range(GROUPNUM) # States depending on current selection and Control/Shift keys STATE_ROOT, STATE_MENUBAR, STATE_TOOLBAR, STATE_MENU, STATE_STDDLGBTN, STATE_ELSE = range(6) - # Left toolbar for GUI elements class Tools(wx.Panel): TOOL_SIZE = (30, 30) @@ -97,17 +96,18 @@ class Tools(wx.Panel): self.SetSizeHints(self.GetSize()[0], -1) # Events wx.EVT_COMMAND_RANGE(self, ID_NEW.PANEL, ID_NEW.LAST, - wx.wxEVT_COMMAND_BUTTON_CLICKED, g.frame.OnCreate) + wx.wxEVT_COMMAND_BUTTON_CLICKED, g.frame.OnCreate) wx.EVT_KEY_DOWN(self, self.OnKeyDown) wx.EVT_KEY_UP(self, self.OnKeyUp) def AddButton(self, id, image, text): from wx.lib import buttons button = buttons.GenBitmapButton(self, id, image, size=self.TOOL_SIZE, - style=wx.NO_BORDER|wx.WANTS_CHARS) + style=wx.NO_BORDER|wx.WANTS_CHARS) button.SetBezelWidth(0) wx.EVT_KEY_DOWN(button, self.OnKeyDown) wx.EVT_KEY_UP(button, self.OnKeyUp) + wx.EVT_RIGHT_DOWN(button, self.OnRightClick) button.SetToolTipString(text) self.curSizer.Add(button) self.groups[-1][1][id] = button @@ -160,6 +160,22 @@ class Tools(wx.Panel): else: box.SetLabel('[-] ' + box.name) self.Layout() + # Drag + def OnRightClick(self, evt): + do = MyDataObject() + do.SetData(str(evt.GetId())) + bm = evt.GetEventObject().GetBitmapLabel() + if wx.Platform != '__WXMAC__': + icon = wx.EmptyIcon() + icon.CopyFromBitmap(bm) + dragSource = wx.DropSource(self, icon) + else: # on Mac DragSource requires cursor (but does not work anyway) + curs = wx.CursorFromImage(wx.ImageFromBitmap(bm)) + dragSource = wx.DropSource(self, curs) + dragSource.SetData(do) + g.frame.SetStatusText('Release the mouse button over the test window') + dragSource.DoDragDrop() + # Process key events def OnKeyDown(self, evt): if evt.GetKeyCode() == wx.WXK_CONTROL: