wx.DataObjectComposite の使い方

サンプルもないし大分悩んだので書いとく。
wx.URLDataObject が登録できないけど Firefox からは URL ドロップできる。というかテキストで送ってるだけだろう。

class DropTarget(wx.PyDropTarget):

    def __init__(self):
        self.data = wx.DataObjectComposite()
        dataobjs = (
            wx.FileDataObject(),
            wx.TextDataObject(),
            #wx.URLDataObject(),
            )
        self.dataobjs = {}
        for dataobj in dataobjs:
            self.dataobjs[dataobj.Format.Type] = dataobj
            self.data.Add(dataobj)

        super(DropTarget, self).__init__(self.data)

    def OnDragOver(self, x, y, d):
        return wx.DragCopy

    def OnData(self, x, y, d):
        if not self.GetData():
            return wx.DragNone

        format = self.data.GetReceivedFormat()
        dataobj = self.dataobjs[format.Type]
        if format.Type == wx.DF_FILENAME:
            print dataobj.GetFilenames()
        elif format.Type == wx.DF_TEXT:
            print dataobj.GetText()

        return d