Add display name label to inventory editor. Rename "name" to "displayName" in data files. Add fallback for items without a defined displayName.

xxx add unlocalizedName and load Minecraft translation files?
This commit is contained in:
David Vierra 2015-05-08 13:38:34 -10:00
parent b474a8dca2
commit 30cf6c4197
5 changed files with 409 additions and 391 deletions

View File

@ -26,6 +26,7 @@ class InventoryItemModel(QtCore.QAbstractItemModel):
ItemIconRole = ItemRawIDRole + 1
ItemDamageRole = ItemIconRole + 1
ItemCountRole = ItemDamageRole + 1
ItemDisplayNameRole = ItemCountRole + 1
def __init__(self, itemListRef, editorSession):
super(InventoryItemModel, self).__init__()
@ -53,7 +54,7 @@ class InventoryItemModel(QtCore.QAbstractItemModel):
if itemStack is None:
return None
if role == self.ItemIconRole:
if role in (self.ItemIconRole, self.ItemDisplayNameRole):
try:
itemType = itemStack.itemType
except ValueError as e: # itemType not mapped
@ -61,7 +62,11 @@ class InventoryItemModel(QtCore.QAbstractItemModel):
except KeyError as e: # missing NBT tag?
log.exception("Error while reading item data: %r", e)
return None
return ItemTypeIcon(itemType, self.editorSession, itemStack)
if role == self.ItemIconRole:
return ItemTypeIcon(itemType, self.editorSession, itemStack)
if role == self.ItemDisplayNameRole:
return itemType.displayName
if role == self.ItemIDRole:
return itemStack.id
@ -289,8 +294,11 @@ class InventoryEditor(QtGui.QWidget):
self.currentIndex = None
self.itemNameLabel = QtGui.QLabel()
self.setLayout(Column(Row(self.inventoryView,
Column(self.itemListSearchBox, self.itemList)),
Row(QtGui.QLabel("Selected item:"), self.itemNameLabel, None),
Row(QtGui.QLabel("Internal Name"), self.internalNameField,
self.rawIDCheckbox, self.rawIDInput,
QtGui.QLabel("Damage"), self.damageInput,
@ -371,6 +379,9 @@ class InventoryEditor(QtGui.QWidget):
tagRef = self._itemListRef.getItemInSlot(index.row())
self.itemNBTEditor.setRootTagRef(tagRef)
displayName = index.data(InventoryItemModel.ItemDisplayNameRole)
self.itemNameLabel.setText(displayName)
def searchTextChanged(self, value):
self.proxyModel = QtGui.QSortFilterProxyModel()
self.proxyModel.setSourceModel(self.itemListModel)

View File

@ -35,7 +35,7 @@ class ItemTypeListModel(QtCore.QAbstractListModel):
row = index.row()
itemType = self.allItems[row]
if role == Qt.DisplayRole:
return itemType.name
return itemType.displayName
if role == Qt.DecorationRole:
return ItemTypeIcon(itemType, self.editorSession)
if role == self.InternalNameRole:

View File

@ -73,7 +73,7 @@ class ItemTypeSet(object):
retval = itemJson.get(attr)
if attr in ("name", "texture"):
if attr in ("displayName", "texture"):
if isinstance(retval, list):
assert itemType.meta is not None, "ItemType %s: Got a list %s for attr %s but meta is None" % (
itemType.internalName, retval, attr
@ -84,6 +84,12 @@ class ItemTypeSet(object):
return retval[itemType.meta]
if retval is None:
if attr == "displayName":
try:
return itemType.internalName
except AttributeError:
return "Unknown item %d" % itemType.ID
if attr not in self.defaults:
raise AttributeError(attr)
retval = self.defaults[attr]
@ -97,7 +103,8 @@ class ItemTypeSet(object):
internalName = "minecraft:" + jsonName
try:
ID = int(item["id"])
name = item["name"]
displayName = item["displayName"]
item["internalName"] = internalName
self.IDsByInternalName[internalName] = ID
@ -105,9 +112,9 @@ class ItemTypeSet(object):
texture = item.get("texture")
if isinstance(name, list):
if isinstance(displayName, list):
# damage is meta value
for meta, _ in enumerate(name):
for meta, _ in enumerate(displayName):
self.allItems.append(ItemType(ID, meta, self))
elif isinstance(texture, list):

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff