from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QListWidget, QListWidgetItem, QMenuBar, QAction, QFileDialog, QMessageBox from PyQt5.QtGui import QKeySequence from editortool.cutscene.cutsceneitemeditor import CutsceneItemEditor from editortool.cutscene.cutscenemenubar import CutsceneMenuBar import sys class CutsceneToolWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Dusk Cutscene Editor") self.setGeometry(100, 100, 800, 600) self.nextItemNumber = 1 # Track next available number self.currentFile = None self.dirty = False # Track unsaved changes # File menu (handled by CutsceneMenuBar) menubar = CutsceneMenuBar(self) self.setMenuBar(menubar) # Main layout: horizontal split central = QWidget() mainLayout = QHBoxLayout(central) self.setCentralWidget(central) # Timeline leftPanel = QWidget() leftLayout = QVBoxLayout(leftPanel) self.timelineList = QListWidget() self.timelineList.setSelectionMode(QListWidget.SingleSelection) leftLayout.addWidget(QLabel("Cutscene Timeline")) leftLayout.addWidget(self.timelineList) btnLayout = QHBoxLayout() self.addBtn = QPushButton("Add") self.removeBtn = QPushButton("Remove") btnLayout.addWidget(self.addBtn) btnLayout.addWidget(self.removeBtn) leftLayout.addLayout(btnLayout) mainLayout.addWidget(leftPanel, 2) # Property editor self.editorPanel = QWidget() self.editorLayout = QVBoxLayout(self.editorPanel) self.itemEditor = None # Only create when needed mainLayout.addWidget(self.editorPanel, 3) # Events self.timelineList.currentItemChanged.connect(self.onItemSelected) self.addBtn.clicked.connect(self.addCutsceneItem) self.removeBtn.clicked.connect(self.removeCutsceneItem) def addCutsceneItem(self): name = f"Cutscene item {self.nextItemNumber}" timelineItem = QListWidgetItem(name) self.timelineList.addItem(timelineItem) self.timelineList.setCurrentItem(timelineItem) self.nextItemNumber += 1 self.dirty = True def removeCutsceneItem(self): row = self.timelineList.currentRow() if row < 0: return self.timelineList.takeItem(row) self.dirty = True # Remove editor if nothing selected if self.timelineList.currentItem() is None or self.itemEditor is None: return self.editorLayout.removeWidget(self.itemEditor) self.itemEditor.deleteLater() self.itemEditor = None def clearCutscene(self): self.timelineList.clear() self.nextItemNumber = 1 self.currentFile = None self.dirty = False if self.itemEditor: self.editorLayout.removeWidget(self.itemEditor) def onItemSelected(self, current, previous): if current: if not self.itemEditor: self.itemEditor = CutsceneItemEditor() self.editorLayout.addWidget(self.itemEditor) return if not self.itemEditor: return self.editorLayout.removeWidget(self.itemEditor) self.itemEditor.deleteLater() self.itemEditor = None if __name__ == "__main__": app = QApplication(sys.argv) window = CutsceneToolWindow() window.show() sys.exit(app.exec_())