dabo Commit
Revision 4326
Date: 2008-07-30 14:44:25 -0700 (Wed, 30 Jul 2008)
Author: Nate
Trac: http://svn.dabodev.com/trac/dabo/changeset/4326

Changed:
A   trunk/dabo/ui/uiwx/dDropTarget.py
U   trunk/dabo/ui/uiwx/dPemMixin.py

Log:
Added a new class dDropTarget.  The drop target using the 
wx.DataObjectComposite class to be able to handle both files and text drops.  
The class is built to allow for easy interfacing with the DroppedTextHandler 
and DroppedFileHandler properties in dPemMixin.

Modified the DroppedTextHandler and DroppedFileHandler properties to support 
the new drop target.  User code shouldn't need to change.

Diff:
Added: trunk/dabo/ui/uiwx/dDropTarget.py
===================================================================
--- trunk/dabo/ui/uiwx/dDropTarget.py                           (rev 0)
+++ trunk/dabo/ui/uiwx/dDropTarget.py   2008-07-30 21:44:25 UTC (rev 4326)
@@ -0,0 +1,61 @@
+# -*- coding: utf-8 -*-
+import wx
+from dabo.dLocalize import _
+
+class dDropTarget(wx.DropTarget):
+       def __init__(self):
+               wx.DropTarget.__init__(self)
+               
+               self._fileHandle  = self._textHandle = None
+               
+               self.compositeDataObject = wx.DataObjectComposite()
+               self.fileData = wx.FileDataObject()
+               self.compositeDataObject.Add(self.fileData)
+               self.textData = wx.TextDataObject()
+               self.compositeDataObject.Add(self.textData)
+               
+               self.SetDataObject(self.compositeDataObject)
+       
+       def OnData(self, x, y, defResult):
+               if self.GetData():
+                       format = 
self.compositeDataObject.ReceivedFormat.GetType()
+                       print "Data type = %s, file type = %s" % (format, 
wx.DF_FILENAME)
+                       if format == wx.DF_FILENAME:
+                               print "dropping files to file handle: %s" % 
self._fileHandle
+                               if self._fileHandle:
+                                       
self._fileHandle.processDroppedFiles(self.fileData.Filenames)
+                       elif format == wx.DF_TEXT or wx.DF_HTML:
+                               
self._textHandle.processDroppedText(self.textData.Text)
+               else:
+                       print false
+               
+               return defResult
+       
+       def OnDragOver(self, xpos, ypos, result):
+               return wx.DragLink
+       
+       #Property getters and setters
+       def _getFileHandler(self):
+               return self._fileHandle
+       
+       def _setFileHandler(self, val):
+               self._fileHandle = val
+       
+       
+       def _getTextHandler(self):
+               return self._textHandle
+       
+       def _setTextHandler(self, val):
+               self._textHandle = val
+       
+       
+       #PropertyDefinitions
+       FileHandler = property(_getFileHandler, _setFileHandler, None,
+               _("""Reference to the object that will handle files dropped on 
this control.
+                       When files are dropped, a list of them will be passed 
to this object's 
+                       'processDroppedFiles()' method. Default=None  (object 
or None)"""))
+       
+       TextHandler = property(_getTextHandler, _setTextHandler, None,
+               _("""Reference to the object that will handle text dropped on 
this control.
+                       When text is dropped, that text will be passed to this 
object's 
+                       'processDroppedText()' method. Default=None  (object or 
None)"""))
\ No newline at end of file

Modified: trunk/dabo/ui/uiwx/dPemMixin.py
===================================================================
--- trunk/dabo/ui/uiwx/dPemMixin.py     2008-07-30 16:52:50 UTC (rev 4325)
+++ trunk/dabo/ui/uiwx/dPemMixin.py     2008-07-30 21:44:25 UTC (rev 4326)
@@ -15,6 +15,7 @@
 from dabo.dObject import dObject
 from dabo.ui import makeDynamicProperty
 from dabo.lib.utils import dictStringify
+from dDropTarget import dDropTarget
 
 
 class dPemMixin(dPemMixinBase):
@@ -296,6 +297,7 @@
                # Handlers for drag/drop
                self._droppedFileHandler = None
                self._droppedTextHandler = None
+               self._dropTarget = None
 
                # _beforeInit hook for Class Designer code
                self._beforeInitDesignerHook()
@@ -1873,18 +1875,12 @@
        def _setDroppedFileHandler(self, val):
                if self._constructed():
                        self._droppedFileHandler = val
-                       class FileDropTarget(wx.FileDropTarget):
-                               def __init__(self):
-                                       wx.FileDropTarget.__init__(self)
-                                       self.handler = val
-                               def OnDropFiles(self, xpos, ypos, filelist):
-                                       if self.handler:
-                                               
self.handler.processDroppedFiles(filelist)
-                                       return True
-                               def OnDragOver(self, xpos, ypos, result):
-                                       return wx.DragLink
-                       self.SetDropTarget(FileDropTarget())
-                       self.SetDropTarget(FileDropTarget())
+                       
+                       if self._dropTarget == None:
+                               self._dropTarget = dDropTarget()
+                               self.SetDropTarget(self._dropTarget)
+                       
+                       self._dropTarget.FileHandler = val
                else:
                        self._properties["DroppedFileHandler"] = val
 
@@ -1895,18 +1891,13 @@
        def _setDroppedTextHandler(self, val):
                if self._constructed():
                        self._droppedTextHandler = val
-
-                       class TextDropTarget(wx.TextDropTarget):
-                               def __init__(self):
-                                       wx.TextDropTarget.__init__(self)
-                                       self.handler = val
-                               def OnDropText(self, xpos, ypos, txt):
-                                       if self.handler:
-                                               
self.handler.processDroppedText(txt)
-                                       return True
-                               def OnDragOver(self, xpos, ypos, result):
-                                       return wx.DragLink
-                       self.SetDropTarget(TextDropTarget())
+                       target = self.GetDropTarget()
+                       
+                       if self._dropTarget == None:
+                               self._dropTarget = dDropTarget()
+                               self.SetDropTarget(self._dropTarget)
+                       
+                       self._dropTarget.TextHandler = val
                else:
                        self._properties["DroppedTextHandler"] = val
 
@@ -2776,7 +2767,6 @@
        DynamicWidth = makeDynamicProperty(Width)
 
 
-
 class DrawObject(dObject):
        """Class to handle drawing on an object. 
 




_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev
Searchable Archives: http://leafe.com/archives/search/dabo-dev
This message: http://leafe.com/archives/byMID/[EMAIL PROTECTED]

Reply via email to