Browse Source

initial commit

Arkady Trestman 16 years ago
parent
commit
1710254709
2 changed files with 164 additions and 0 deletions
  1. 40 0
      direct/src/leveleditor/ProtoObjs.py
  2. 124 0
      direct/src/leveleditor/ProtoObjsUI.py

+ 40 - 0
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

+ 124 - 0
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)