Some checks failed
Build Dusk / build-linux (push) Failing after 1m24s
Build Dusk / run-tests (push) Failing after 1m17s
Build Dusk / build-psp (push) Failing after 1m34s
Build Dusk / build-dolphin (push) Failing after 2m5s
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 tools.editor.cutscene.cutsceneitemeditor import CutsceneItemEditor
|
|
from tools.editor.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_())
|