mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-03 02:15:43 -04:00
added suport for multi selections, and object deletions in the sceneGraphUI
This commit is contained in:
parent
055af9db0b
commit
a8e0db164a
@ -110,7 +110,7 @@ class LevelEditorBase(DirectObject):
|
|||||||
# Node path events
|
# Node path events
|
||||||
('DIRECT-delete', self.handleDelete),
|
('DIRECT-delete', self.handleDelete),
|
||||||
('preRemoveNodePath', self.removeNodePathHook),
|
('preRemoveNodePath', self.removeNodePathHook),
|
||||||
('DIRECT_selectedNodePath_fMulti_fTag', self.selectedNodePathHook),
|
('DIRECT_selectedNodePath_fMulti_fTag_fLEPane', self.selectedNodePathHook),
|
||||||
('DIRECT_deselectedNodePath', self.deselectAll),
|
('DIRECT_deselectedNodePath', self.deselectAll),
|
||||||
('DIRECT_deselectAll', self.deselectAll),
|
('DIRECT_deselectAll', self.deselectAll),
|
||||||
('LE-Undo', self.actionMgr.undo),
|
('LE-Undo', self.actionMgr.undo),
|
||||||
@ -142,9 +142,15 @@ class LevelEditorBase(DirectObject):
|
|||||||
base.direct.selected.last = None
|
base.direct.selected.last = None
|
||||||
|
|
||||||
def handleDelete(self):
|
def handleDelete(self):
|
||||||
|
oldSelectedNPs = base.direct.selected.getSelectedAsList()
|
||||||
|
for oldNP in oldSelectedNPs:
|
||||||
|
obj = self.objectMgr.findObjectByNodePath(oldNP)
|
||||||
|
if obj:
|
||||||
|
self.ui.sceneGraphUI.delete(obj[OG.OBJ_UID])
|
||||||
action = ActionDeleteObj(self)
|
action = ActionDeleteObj(self)
|
||||||
self.actionMgr.push(action)
|
self.actionMgr.push(action)
|
||||||
action()
|
action()
|
||||||
|
|
||||||
## reply = wx.MessageBox("Do you want to delete selected?", "Delete?",
|
## reply = wx.MessageBox("Do you want to delete selected?", "Delete?",
|
||||||
## wx.YES_NO | wx.ICON_QUESTION)
|
## wx.YES_NO | wx.ICON_QUESTION)
|
||||||
## if reply == wx.YES:
|
## if reply == wx.YES:
|
||||||
@ -159,13 +165,19 @@ class LevelEditorBase(DirectObject):
|
|||||||
## coa = Vec3(row[0], row[1], row[2])
|
## coa = Vec3(row[0], row[1], row[2])
|
||||||
## base.direct.cameraControl.updateCoa(coa)
|
## base.direct.cameraControl.updateCoa(coa)
|
||||||
|
|
||||||
def selectedNodePathHook(self, nodePath, fMultiSelect = 0, fSelectTag = 1):
|
def selectedNodePathHook(self, nodePath, fMultiSelect = 0, fSelectTag = 1, fLEPane = 0):
|
||||||
# handle unpickable nodepath
|
# handle unpickable nodepath
|
||||||
if nodePath.getName() in base.direct.iRay.unpickable:
|
if nodePath.getName() in base.direct.iRay.unpickable:
|
||||||
base.direct.deselect(nodePath)
|
base.direct.deselect(nodePath)
|
||||||
return
|
return
|
||||||
|
|
||||||
self.objectMgr.selectObject(nodePath)
|
if fMultiSelect == 0 and fLEPane == 0:
|
||||||
|
oldSelectedNPs = base.direct.selected.getSelectedAsList()
|
||||||
|
for oldNP in oldSelectedNPs:
|
||||||
|
obj = self.objectMgr.findObjectByNodePath(oldNP)
|
||||||
|
if obj:
|
||||||
|
self.ui.sceneGraphUI.deSelect(obj[OG.OBJ_UID])
|
||||||
|
self.objectMgr.selectObject(nodePath, fLEPane)
|
||||||
|
|
||||||
def deselectAll(self, np=None):
|
def deselectAll(self, np=None):
|
||||||
self.objectMgr.deselectAll()
|
self.objectMgr.deselectAll()
|
||||||
|
@ -174,8 +174,9 @@ class ObjectMgr:
|
|||||||
self.currNodePath = None
|
self.currNodePath = None
|
||||||
taskMgr.remove('_le_updateObjectUITask')
|
taskMgr.remove('_le_updateObjectUITask')
|
||||||
self.editor.ui.objectPropertyUI.clearPropUI()
|
self.editor.ui.objectPropertyUI.clearPropUI()
|
||||||
|
self.editor.ui.sceneGraphUI.tree.UnselectAll()
|
||||||
|
|
||||||
def selectObject(self, nodePath):
|
def selectObject(self, nodePath, fLEPane=0):
|
||||||
obj = self.findObjectByNodePath(nodePath)
|
obj = self.findObjectByNodePath(nodePath)
|
||||||
if obj is None:
|
if obj is None:
|
||||||
return
|
return
|
||||||
@ -184,6 +185,9 @@ class ObjectMgr:
|
|||||||
# [gjeon] to connect transform UI with nodepath's transform
|
# [gjeon] to connect transform UI with nodepath's transform
|
||||||
self.spawnUpdateObjectUITask()
|
self.spawnUpdateObjectUITask()
|
||||||
self.updateObjectPropertyUI(obj)
|
self.updateObjectPropertyUI(obj)
|
||||||
|
#import pdb;pdb.set_trace()
|
||||||
|
if fLEPane == 0:
|
||||||
|
self.editor.ui.sceneGraphUI.select(obj[OG.OBJ_UID])
|
||||||
|
|
||||||
def updateObjectPropertyUI(self, obj):
|
def updateObjectPropertyUI(self, obj):
|
||||||
objDef = obj[OG.OBJ_DEF]
|
objDef = obj[OG.OBJ_DEF]
|
||||||
@ -192,7 +196,7 @@ class ObjectMgr:
|
|||||||
|
|
||||||
def onEnterObjectPropUI(self, event):
|
def onEnterObjectPropUI(self, event):
|
||||||
taskMgr.remove('_le_updateObjectUITask')
|
taskMgr.remove('_le_updateObjectUITask')
|
||||||
|
|
||||||
def onLeaveObjectPropUI(self, event):
|
def onLeaveObjectPropUI(self, event):
|
||||||
self.spawnUpdateObjectUITask()
|
self.spawnUpdateObjectUITask()
|
||||||
|
|
||||||
|
@ -71,10 +71,8 @@ class ObjectPaletteUI(wx.Panel):
|
|||||||
newItem = self.addTreeNode(key, parentItem, items)
|
newItem = self.addTreeNode(key, parentItem, items)
|
||||||
|
|
||||||
def onSelected(self, event):
|
def onSelected(self, event):
|
||||||
data = self.tree.GetItemPyData(event.GetItem())
|
pass
|
||||||
if data:
|
|
||||||
print data.properties
|
|
||||||
|
|
||||||
def onBeginDrag(self, event):
|
def onBeginDrag(self, event):
|
||||||
item = event.GetItem()
|
item = event.GetItem()
|
||||||
|
|
||||||
|
@ -22,7 +22,9 @@ class SceneGraphUI(wx.Panel):
|
|||||||
wx.Panel.__init__(self, parent)
|
wx.Panel.__init__(self, parent)
|
||||||
|
|
||||||
self.editor = editor
|
self.editor = editor
|
||||||
self.tree = wx.TreeCtrl(self)
|
self.tree = wx.TreeCtrl(self, id=-1, pos=wx.DefaultPosition,
|
||||||
|
size=wx.DefaultSize, style=wx.TR_MULTIPLE|wx.TR_DEFAULT_STYLE,
|
||||||
|
validator=wx.DefaultValidator, name="treeCtrl")
|
||||||
self.root = self.tree.AddRoot('render')
|
self.root = self.tree.AddRoot('render')
|
||||||
self.tree.SetItemPyData(self.root, "render")
|
self.tree.SetItemPyData(self.root, "render")
|
||||||
|
|
||||||
@ -175,7 +177,7 @@ class SceneGraphUI(wx.Panel):
|
|||||||
itemId = self.tree.GetItemPyData(item)
|
itemId = self.tree.GetItemPyData(item)
|
||||||
newItem = self.tree.AppendItem(newParent, data)
|
newItem = self.tree.AppendItem(newParent, data)
|
||||||
self.tree.SetItemPyData(newItem, itemId)
|
self.tree.SetItemPyData(newItem, itemId)
|
||||||
|
|
||||||
# if an item had children, we need to re-parent them as well
|
# if an item had children, we need to re-parent them as well
|
||||||
if self.tree.ItemHasChildren(item):
|
if self.tree.ItemHasChildren(item):
|
||||||
# recursing...
|
# recursing...
|
||||||
@ -239,12 +241,33 @@ class SceneGraphUI(wx.Panel):
|
|||||||
self.removePandaObjectChildren(item)
|
self.removePandaObjectChildren(item)
|
||||||
# continue iteration to the next child
|
# continue iteration to the next child
|
||||||
|
|
||||||
|
def delete(self, itemId):
|
||||||
|
item = self.traverse(self.root, itemId)
|
||||||
|
if item:
|
||||||
|
self.tree.UnselectItem(item)
|
||||||
|
self.tree.Delete(item)
|
||||||
|
|
||||||
|
def select(self, itemId):
|
||||||
|
item = self.traverse(self.root, itemId)
|
||||||
|
if item:
|
||||||
|
if not self.tree.IsSelected(item):
|
||||||
|
self.tree.SelectItem(item)
|
||||||
|
|
||||||
|
def deSelect(self, itemId):
|
||||||
|
item = self.traverse(self.root, itemId)
|
||||||
|
if item is not None:
|
||||||
|
self.tree.UnselectItem(item)
|
||||||
|
|
||||||
def onSelected(self, event):
|
def onSelected(self, event):
|
||||||
itemId = self.tree.GetItemPyData(event.GetItem())
|
itemId = self.tree.GetItemPyData(event.GetItem())
|
||||||
if itemId:
|
if itemId:
|
||||||
obj = self.editor.objectMgr.findObjectById(itemId);
|
obj = self.editor.objectMgr.findObjectById(itemId);
|
||||||
if obj:
|
if obj:
|
||||||
base.direct.select(obj[OG.OBJ_NP])
|
selections = self.tree.GetSelections()
|
||||||
|
if len(selections) > 1:
|
||||||
|
base.direct.select(obj[OG.OBJ_NP], fMultiSelect = 1, fLEPane = 0)
|
||||||
|
else:
|
||||||
|
base.direct.select(obj[OG.OBJ_NP], fMultiSelect = 0, fLEPane = 0)
|
||||||
|
|
||||||
def onBeginDrag(self, event):
|
def onBeginDrag(self, event):
|
||||||
item = event.GetItem()
|
item = event.GetItem()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user