import os from PyQt5.QtWidgets import QMainWindow, QWidget, QHBoxLayout, QMessageBox from editortool.map.glwidget import GLWidget from editortool.map.chunkpanel import ChunkPanel from editortool.map.mapinfopanel import MapInfoPanel from editortool.map.mapdata import MapData from editortool.map.toolbar import MapToolbar from editortool.map.statusbar import StatusBar class MapWindow(QMainWindow): def __init__(self): super().__init__() # Subclasses self.mapData = MapData() # Window setup self.setWindowTitle("Dusk Map Editor") self.resize(1280, 720) # Components self.toolbar = MapToolbar(self) central = QWidget() self.setCentralWidget(central) mainLayout = QHBoxLayout(central) # Left panel (ChunkPanel) self.chunkPanel = ChunkPanel() leftWidget = QWidget() leftWidget.setLayout(self.chunkPanel.layout()) leftWidget.setFixedWidth(200) mainLayout.addWidget(leftWidget) # Center panel (GLWidget + controls) self.glWidget = GLWidget(self) mainLayout.addWidget(self.glWidget, stretch=3) # Right panel (MapInfoPanel) self.mapInfoPanel = MapInfoPanel(self) rightWidget = self.mapInfoPanel rightWidget.setFixedWidth(250) mainLayout.addWidget(rightWidget) # Status bar self.statusBar = StatusBar(self) self.setStatusBar(self.statusBar) def generateData(self): objOut = {} self.fileSaving.invoke(objOut) self.mapData.data = objOut return objOut def closeEvent(self, event): if not self.mapData.isDirty(): event.accept() return reply = QMessageBox.question( self, "Unsaved Changes", "You have unsaved changes. Do you want to save before closing?", QMessageBox.Save | QMessageBox.Discard | QMessageBox.Cancel, QMessageBox.Save ) if reply == QMessageBox.Save: self.saveFile() if self.mapData.isDirty(): event.ignore() return elif reply == QMessageBox.Cancel: event.ignore() return event.accept()