git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42925 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			71 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import wx
 | |
| 
 | |
| class DragController(wx.Control):
 | |
|     """
 | |
|     Just a little control to handle dragging the text from a text
 | |
|     control.  We use a separate control so as to not interfere with
 | |
|     the native drag-select functionality of the native text control.
 | |
|     """
 | |
|     def __init__(self, parent, source, size=(25,25)):
 | |
|         wx.Control.__init__(self, parent, -1, size=size,
 | |
|                             style=wx.SIMPLE_BORDER)
 | |
|         self.source = source
 | |
|         self.SetMinSize(size)
 | |
|         self.Bind(wx.EVT_PAINT, self.OnPaint)
 | |
|         self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
 | |
|         
 | |
|     def OnPaint(self, evt):
 | |
|         # draw a simple arrow
 | |
|         dc = wx.BufferedPaintDC(self)
 | |
|         dc.SetBackground(wx.Brush(self.GetBackgroundColour()))
 | |
|         dc.Clear()
 | |
|         w, h = dc.GetSize()
 | |
|         y = h/2
 | |
|         dc.SetPen(wx.Pen("dark blue", 2))
 | |
|         dc.DrawLine(w/8,   y,  w-w/8, y)
 | |
|         dc.DrawLine(w-w/8, y,  w/2,   h/4)
 | |
|         dc.DrawLine(w-w/8, y,  w/2,   3*h/4)
 | |
| 
 | |
|     def OnLeftDown(self, evt):
 | |
|         text = self.source.GetValue()
 | |
|         data = wx.TextDataObject(text)
 | |
|         dropSource = wx.DropSource(self)
 | |
|         dropSource.SetData(data)
 | |
|         result = dropSource.DoDragDrop(wx.Drag_AllowMove)
 | |
| 
 | |
|         # if the user wants to move the data then we should delete it
 | |
|         # from the source
 | |
|         if result == wx.DragMove:
 | |
|             self.source.SetValue("")
 | |
|         
 | |
| class MyFrame(wx.Frame):
 | |
|     def __init__(self):
 | |
|         wx.Frame.__init__(self, None, title="Drop Source")
 | |
|         p = wx.Panel(self)
 | |
| 
 | |
|         # create the controls
 | |
|         label1 = wx.StaticText(p, -1, "Put some text in this control:")
 | |
|         label2 = wx.StaticText(p, -1,
 | |
|            "Then drag from the neighboring bitmap and\n"
 | |
|            "drop in an application that accepts dropped\n"
 | |
|            "text, such as MS Word.")
 | |
|         text = wx.TextCtrl(p, -1, "Some text")
 | |
|         dragctl = DragController(p, text)
 | |
| 
 | |
|         # setup the layout with sizers
 | |
|         sizer = wx.BoxSizer(wx.VERTICAL)
 | |
|         sizer.Add(label1, 0, wx.ALL, 5)
 | |
|         hrow = wx.BoxSizer(wx.HORIZONTAL)
 | |
|         hrow.Add(text, 1, wx.RIGHT, 5)
 | |
|         hrow.Add(dragctl, 0)
 | |
|         sizer.Add(hrow, 0, wx.EXPAND|wx.ALL, 5)
 | |
|         sizer.Add(label2, 0, wx.ALL, 5)
 | |
|         p.SetSizer(sizer)
 | |
|         sizer.Fit(self)
 | |
|         
 | |
| 
 | |
| app = wx.PySimpleApp()
 | |
| frm = MyFrame()
 | |
| frm.Show()
 | |
| app.MainLoop()
 |