54 lines
1.7 KiB
Python
Executable File
54 lines
1.7 KiB
Python
Executable File
"""
|
|
Defines ObjectPalette tree UI
|
|
"""
|
|
import wx
|
|
import cPickle as pickle
|
|
from ObjectPalette import *
|
|
|
|
class ObjectPaletteUI(wx.Panel):
|
|
def __init__(self, parent, editor):
|
|
wx.Panel.__init__(self, parent)
|
|
|
|
self.editor = editor
|
|
|
|
self.palette = self.editor.objectPalette
|
|
self.tree = wx.TreeCtrl(self)
|
|
root = self.tree.AddRoot('Objects')
|
|
self.addTreeNodes(root, self.palette.data)
|
|
|
|
sizer = wx.BoxSizer(wx.VERTICAL)
|
|
sizer.Add(self.tree, 1, wx.EXPAND, 0)
|
|
self.SetSizer(sizer); self.Layout()
|
|
|
|
parentSizer = wx.BoxSizer(wx.VERTICAL)
|
|
parentSizer.Add(self, 1, wx.EXPAND, 0)
|
|
parent.SetSizer(parentSizer); parent.Layout()
|
|
|
|
self.tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.onSelected)
|
|
self.tree.Bind(wx.EVT_TREE_BEGIN_DRAG, self.onBeginDrag)
|
|
|
|
def addTreeNodes(self, parentItem, items):
|
|
for key in items.keys():
|
|
newItem = self.tree.AppendItem(parentItem, key)
|
|
if type(items[key]) == dict:
|
|
self.addTreeNodes(newItem, items[key])
|
|
else:
|
|
self.tree.SetItemPyData(newItem, items[key])
|
|
|
|
def onSelected(self, event):
|
|
data = self.tree.GetItemPyData(event.GetItem())
|
|
if data:
|
|
print data.properties
|
|
|
|
def onBeginDrag(self, event):
|
|
item = event.GetItem()
|
|
|
|
if item != self.tree.GetRootItem(): # prevent dragging root item
|
|
text = self.tree.GetItemText(item)
|
|
print "Starting drag'n'drop with %s..." % repr(text)
|
|
|
|
tdo = wx.TextDataObject(text)
|
|
tds = wx.DropSource(self.tree)
|
|
tds.SetData(tdo)
|
|
tds.DoDragDrop(True)
|