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()
 |