NBT tree allows value editing, Players list allows undo for NBT value changes, remove lines from tree branch icons for now
This commit is contained in:
parent
37943a08a5
commit
19a8c01f4f
@ -10,7 +10,7 @@ from PySide.QtCore import Qt
|
||||
|
||||
from mcedit2.command import SimpleRevisionCommand
|
||||
from mcedit2.util.screen import centerWidgetInScreen
|
||||
from mcedit2.widgets.nbttree.nbttreemodel import NBTTreeModel
|
||||
from mcedit2.widgets.nbttree.nbttreemodel import NBTTreeModel, NBTTreeList
|
||||
from mcedit2.util.load_ui import load_ui
|
||||
from mcedit2.util.resources import resourcePath
|
||||
from mcedit2.widgets.propertylist import PropertyListModel
|
||||
@ -23,6 +23,9 @@ log = logging.getLogger(__name__)
|
||||
class PlayerPropertyChangeCommand(SimpleRevisionCommand):
|
||||
pass
|
||||
|
||||
class NBTDataChangeCommand(SimpleRevisionCommand):
|
||||
pass
|
||||
|
||||
class PlayerPanel(QtGui.QWidget):
|
||||
def __init__(self, editorSession, *args, **kwargs):
|
||||
"""
|
||||
@ -61,10 +64,6 @@ class PlayerPanel(QtGui.QWidget):
|
||||
if len(playerUUIDs):
|
||||
self.setSelectedPlayerIndex(0)
|
||||
|
||||
# for playerUUID in editorSession.worldEditor.listPlayers():
|
||||
# self.setSelectedPlayerUUID(playerUUID)
|
||||
# break
|
||||
|
||||
icon = QtGui.QIcon(resourcePath("mcedit2/assets/mcedit2/icons/edit_player.png"))
|
||||
action = QtGui.QAction(icon, "Edit Player", self)
|
||||
action.setCheckable(True)
|
||||
@ -110,8 +109,34 @@ class PlayerPanel(QtGui.QWidget):
|
||||
self.playerPropertiesWidget.setModel(model)
|
||||
model.propertyChanged.connect(self.propertyDidChange)
|
||||
|
||||
def updateNBTTree(self):
|
||||
model = NBTTreeModel(self.selectedPlayer.rootTag)
|
||||
model.dataChanged.connect(self.nbtDataDidChange)
|
||||
self.treeView.setModel(model)
|
||||
|
||||
def revisionDidChange(self):
|
||||
self.initPropertiesWidget()
|
||||
self.updateNBTTree()
|
||||
|
||||
def nbtDataDidChange(self, index):
|
||||
model = self.treeView.model().sourceModel() # xxx filter model this is confusing
|
||||
parent = model.parent(index)
|
||||
item = model.getItem(index)
|
||||
if parent is not None and isinstance(parent, NBTTreeList):
|
||||
name = str(parent.tag.index(item.tag))
|
||||
else:
|
||||
name = item.tag.name
|
||||
|
||||
if self.selectedUUID != "":
|
||||
text = "Change player %s NBT tag %s" % (self.selectedUUID, name)
|
||||
else:
|
||||
text = "Change single-player NBT tag %s" % name
|
||||
|
||||
command = NBTDataChangeCommand(self.editorSession, text)
|
||||
with command.begin():
|
||||
self.selectedPlayer.dirty = True
|
||||
self.editorSession.worldEditor.syncToDisk()
|
||||
self.editorSession.pushCommand(command)
|
||||
|
||||
def propertyDidChange(self, name, value):
|
||||
if self.selectedUUID != "":
|
||||
@ -147,10 +172,7 @@ class PlayerPanel(QtGui.QWidget):
|
||||
log.info("PlayerPanel: player %s not found!", UUID)
|
||||
self.treeView.setModel(None)
|
||||
else:
|
||||
model = NBTTreeModel(self.selectedPlayer.rootTag)
|
||||
|
||||
self.treeView.setModel(model)
|
||||
self.treeView.sortByColumn(0, Qt.AscendingOrder)
|
||||
self.updateNBTTree()
|
||||
|
||||
@property
|
||||
def selectedPlayer(self):
|
||||
@ -177,6 +199,5 @@ class PlayerPanel(QtGui.QWidget):
|
||||
self.editorSession.editorTab.showCameraView()
|
||||
view = self.editorSession.editorTab.cameraView
|
||||
view.setPerspective(False)
|
||||
view = self.editorSession.editorTab.currentView()
|
||||
view.centerPoint = self.selectedPlayer.Position
|
||||
view.yawPitch = self.selectedPlayer.Rotation
|
||||
|
@ -8,9 +8,9 @@ WorldListItemWidget:pressed {
|
||||
border: none;
|
||||
}
|
||||
|
||||
QTreeView::branch:!has-children {
|
||||
border-bottom: 1px solid #d9d9d9;
|
||||
}
|
||||
/*QTreeView::branch { xxx overrides platform style - include icons*/
|
||||
/*border-bottom: 1px solid #d9d9d9;*/
|
||||
/*}*/
|
||||
|
||||
QTreeView::item {
|
||||
border-bottom: 1px solid #d9d9d9;
|
||||
|
@ -123,7 +123,7 @@ class NBTTreeCompound(object):
|
||||
|
||||
return True
|
||||
|
||||
def setData(self, value):
|
||||
def setValue(self, value):
|
||||
return False
|
||||
|
||||
|
||||
@ -187,7 +187,7 @@ class NBTTreeList(object):
|
||||
|
||||
return True
|
||||
|
||||
def setData(self, value):
|
||||
def setValue(self, value):
|
||||
return False
|
||||
|
||||
|
||||
@ -225,7 +225,7 @@ class NBTTreeItem(object):
|
||||
def parent(self):
|
||||
return self.parentItem
|
||||
|
||||
def setData(self, value):
|
||||
def setValue(self, value):
|
||||
self.tag.value = value
|
||||
return True
|
||||
|
||||
@ -263,7 +263,11 @@ class NBTTreeModel(QtCore.QAbstractItemModel):
|
||||
return 0
|
||||
|
||||
flags = QtCore.Qt.ItemIsEnabled | QtCore.Qt.ItemIsSelectable
|
||||
if self.allowNameChanges and index.column() == 0 and self.getItem(index).tag.name:
|
||||
item = self.getItem(index)
|
||||
parent = self.parent(index)
|
||||
parentItem = self.getItem(parent) if parent else None
|
||||
|
||||
if index.column() == 1 or (self.allowNameChanges and isinstance(parentItem, NBTTreeCompound)):
|
||||
flags |= QtCore.Qt.ItemIsEditable
|
||||
return flags
|
||||
|
||||
@ -342,7 +346,7 @@ class NBTTreeModel(QtCore.QAbstractItemModel):
|
||||
else:
|
||||
result = False
|
||||
elif column == 1:
|
||||
result = item.setData(column, value)
|
||||
result = item.setValue(value)
|
||||
else:
|
||||
return False
|
||||
|
||||
|
Reference in New Issue
Block a user