from PyQt5.QtWidgets import QWidget, QVBoxLayout, QLabel, QPushButton, QGridLayout, QTreeWidget, QTreeWidgetItem from editortool.map.map import map class ChunkPanel(QWidget): def __init__(self, parent=None): super().__init__(parent) layout = QVBoxLayout(self) self.chunkInfoLabel = QLabel("Tile Information") layout.addWidget(self.chunkInfoLabel) grid = QGridLayout() self.btnUp = QPushButton("U") self.btnN = QPushButton("N") self.btnDown = QPushButton("D") self.btnW = QPushButton("W") self.btnS = QPushButton("S") self.btnE = QPushButton("E") # Arrange buttons: U N D on top row, W S E on bottom row grid.addWidget(self.btnUp, 0, 0) grid.addWidget(self.btnN, 0, 1) grid.addWidget(self.btnDown, 0, 2) grid.addWidget(self.btnW, 1, 0) grid.addWidget(self.btnS, 1, 1) grid.addWidget(self.btnE, 1, 2) layout.addLayout(grid) # Add expandable tree list self.tree = QTreeWidget() self.tree.setHeaderLabel("Chunks") # Example tree items parentItem = QTreeWidgetItem(self.tree, ["Chunk 1"]) childItem1 = QTreeWidgetItem(parentItem, ["Tile A"]) childItem2 = QTreeWidgetItem(parentItem, ["Tile B"]) parentItem2 = QTreeWidgetItem(self.tree, ["Chunk 2"]) QTreeWidgetItem(parentItem2, ["Tile C"]) QTreeWidgetItem(parentItem2, ["Tile D"]) self.tree.expandAll() # Expand by default, remove if you want collapsed layout.addWidget(self.tree, 1) # Give tree stretch factor so it expands self.btnN.clicked.connect(lambda: map.moveRelative(0, 1, 0)) self.btnS.clicked.connect(lambda: map.moveRelative(0, -1, 0)) self.btnE.clicked.connect(lambda: map.moveRelative(1, 0, 0)) self.btnW.clicked.connect(lambda: map.moveRelative(-1, 0, 0)) self.btnUp.clicked.connect(lambda: map.moveRelative(0, 0, 1)) self.btnDown.clicked.connect(lambda: map.moveRelative(0, 0, -1)) # Subscribe to parent's fileSaving event if parent is not None and hasattr(parent, 'fileSaving'): parent.fileSaving.subscribe(self.onFileSaving) def onFileSaving(self, objOut): # Inject 'name' into the object objOut['name'] = 'ChunkPanel'