diff --git a/src/mcedit2/panels/player.py b/src/mcedit2/panels/player.py index cda0db9..c963a71 100644 --- a/src/mcedit2/panels/player.py +++ b/src/mcedit2/panels/player.py @@ -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 diff --git a/src/mcedit2/styles/mcedit2.qcss b/src/mcedit2/styles/mcedit2.qcss index d66a7f8..1b59fd7 100644 --- a/src/mcedit2/styles/mcedit2.qcss +++ b/src/mcedit2/styles/mcedit2.qcss @@ -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; diff --git a/src/mcedit2/widgets/nbttree/nbttreemodel.py b/src/mcedit2/widgets/nbttree/nbttreemodel.py index bc7ba28..0ca76f4 100644 --- a/src/mcedit2/widgets/nbttree/nbttreemodel.py +++ b/src/mcedit2/widgets/nbttree/nbttreemodel.py @@ -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