77 lines
2.0 KiB
Python
77 lines
2.0 KiB
Python
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() |