From 1710254709d2df3fa6ef678c9888f499bf8c5fd7 Mon Sep 17 00:00:00 2001 From: Arkady Trestman Date: Fri, 30 Apr 2010 02:02:36 +0000 Subject: [PATCH] initial commit --- direct/src/leveleditor/ProtoObjs.py | 40 +++++++++ direct/src/leveleditor/ProtoObjsUI.py | 124 ++++++++++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100755 direct/src/leveleditor/ProtoObjs.py create mode 100755 direct/src/leveleditor/ProtoObjsUI.py diff --git a/direct/src/leveleditor/ProtoObjs.py b/direct/src/leveleditor/ProtoObjs.py new file mode 100755 index 0000000000..208c784bd6 --- /dev/null +++ b/direct/src/leveleditor/ProtoObjs.py @@ -0,0 +1,40 @@ +""" +Palette for Prototyping +""" +import os +import imp +import types + +class ProtoObjs: + def __init__(self, name): + self.dirname = os.path.dirname(__file__) + self.name = name; + self.filename = "/%s.py"%(name) + self.data = {} + + def populate(self): + moduleName = self.name + try: + file, pathname, description = imp.find_module(moduleName, [self.dirname]) + module = imp.load_module(moduleName, file, pathname, description) + self.data = module.protoData + except: + print "%s doesn't exist"%(self.name) + return + + def saveProtoData(self, f): + if not f: + return + + for key in self.data.keys(): + f.write("\t'%s':'%s',\n"%(key, self.data[key])) + + def saveToFile(self): + try: + f = open(self.dirname + self.filename, 'w') + f.write("protoData = {\n") + self.saveProtoData(f) + f.write("}\n") + f.close() + except: + pass diff --git a/direct/src/leveleditor/ProtoObjsUI.py b/direct/src/leveleditor/ProtoObjsUI.py new file mode 100755 index 0000000000..509c38dd77 --- /dev/null +++ b/direct/src/leveleditor/ProtoObjsUI.py @@ -0,0 +1,124 @@ +""" +Defines ProtoObjs List UI +""" +import wx +import os +import cPickle as pickl + +from pandac.PandaModules import * +from ProtoObjs import * + +class ProtoDropTarget(wx.PyDropTarget): + """Implements drop target functionality to receive files, bitmaps and text""" + def __init__(self, ui): + wx.PyDropTarget.__init__(self) + self.ui = ui + self.do = wx.DataObjectComposite() # the dataobject that gets filled with the appropriate data + self.filedo = wx.FileDataObject() + self.textdo = wx.TextDataObject() + self.bmpdo = wx.BitmapDataObject() + self.do.Add(self.filedo) + self.do.Add(self.bmpdo) + self.do.Add(self.textdo) + self.SetDataObject(self.do) + + def OnData(self, x, y, d): + """ + Handles drag/dropping files/text or a bitmap + """ + if self.GetData(): + df = self.do.GetReceivedFormat().GetType() + if df in [wx.DF_UNICODETEXT, wx.DF_TEXT]: + text = self.textdo.GetText() + # self.editor.ui.protoFontsUI.tree.ChangeHierarchy(text, x, y) + + elif df == wx.DF_FILENAME: + for name in self.filedo.GetFilenames(): + self.ui.AquireFile(name) + + elif df == wx.DF_BITMAP: + bmp = self.bmpdo.GetBitmap() + + return d # you must return this + +class ProtoObjsUI(wx.Panel): + def __init__(self, parent, editor, protoObjs, supportedExts): + wx.Panel.__init__(self, parent) + + self.editor = editor + self.protoObjs = protoObjs + self.supportedExts = supportedExts + + self.llist = wx.ListCtrl(self, -1, style=wx.LC_REPORT) + self.llist.InsertColumn(0, "Files") + + sizer = wx.BoxSizer(wx.VERTICAL) + sizer.Add(self.llist, 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.opDelete = "Delete" + self.menuItems = list() + self.menuItems.append(self.opDelete) + + self.popupmenu = wx.Menu() + for item in self.menuItems: + menuItem = self.popupmenu.Append(-1, item) + self.Bind(wx.EVT_MENU, self.onPopupItemSelected, menuItem) + self.Bind(wx.EVT_CONTEXT_MENU, self.onShowPopup) + + self.SetDropTarget(ProtoDropTarget(self)) + + import pdb;pdb.set_trace() + for key in self.protoObjs.data.keys(): + self.add(self.protoObjs.data[key]) + + # All subclasses should implement this method + def addObj(self, filename): + raise NotImplementedError + + def onPopupItemSelected(self, event): + menuItem = self.popupmenu.FindItemById(event.GetId()) + text = menuItem.GetText() + if text == self.opDelete: + self.remove() + + def onShowPopup(self, event): + pos = event.GetPosition() + pos = self.ScreenToClient(pos) + self.PopupMenu(self.popupmenu, pos) + + def findLabel(self, text): + found = False + for index in range(self.llist.GetItemCount()): + itemtext = self.llist.GetItemText(index) + if itemtext == text: + return True + return found + + def remove(self): + index = self.llist.GetFirstSelected() + if index != -1: + key = self.llist.GetItemText(index) + del(self.protoObjs.data[key]) + item = self.llist.DeleteItem(index) + + def add(self, filename): + name = os.path.basename(filename) + for ext in self.supportedExts: + if name.upper().endswith(ext.upper()): + if not self.findLabel(name): + try: + index = self.llist.InsertStringItem(self.llist.GetItemCount(), name) + self.protoObjs.data[name]= filename + self.addObj(filename) + except: + pass + break + + def AquireFile(self, filename): + filenameFull = Filename.Filename.fromOsSpecific(filename).getFullpath() + self.add(filenameFull)