102 lines
3.2 KiB
Python
102 lines
3.2 KiB
Python
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_())
|