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:
David Vierra 2015-02-01 01:59:30 -10:00
parent 37943a08a5
commit 19a8c01f4f
3 changed files with 43 additions and 18 deletions

View File

@ -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

View File

@ -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;

View File

@ -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