First upload, 18 controller version
This commit is contained in:
85
app/ui/scene_preview_area.py
Normal file
85
app/ui/scene_preview_area.py
Normal file
@@ -0,0 +1,85 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from app.qt_compat import QLabel, QVBoxLayout, QWidget
|
||||
|
||||
from app.ui.preview_fullscreen import FullscreenPreviewWindow
|
||||
from app.ui.preview_modes import PREVIEW_MODE_TILE, normalize_preview_mode
|
||||
from app.ui.preview_widget import PreviewWidget
|
||||
|
||||
|
||||
class ScenePreviewArea(QWidget):
|
||||
def __init__(self, controller, preview_mode: str = PREVIEW_MODE_TILE, parent: QWidget | None = None) -> None:
|
||||
super().__init__(parent)
|
||||
self.controller = controller
|
||||
self.preview_mode = normalize_preview_mode(preview_mode)
|
||||
|
||||
self.fullscreen_preview = FullscreenPreviewWindow(self.controller, preview_mode=self.preview_mode, scene_role="live")
|
||||
|
||||
layout = QVBoxLayout(self)
|
||||
layout.setContentsMargins(0, 12, 0, 0)
|
||||
layout.setSpacing(14)
|
||||
|
||||
self.preview_title = QLabel("Preview")
|
||||
self.preview_title.setStyleSheet("font-size: 12px; font-weight: 600; color: #CCCCCC; padding: 0 0 6px 2px;")
|
||||
layout.addWidget(self.preview_title)
|
||||
|
||||
self.single_preview_container = QWidget()
|
||||
single_layout = QVBoxLayout(self.single_preview_container)
|
||||
single_layout.setContentsMargins(0, 0, 0, 0)
|
||||
single_layout.setSpacing(0)
|
||||
self.preview_widget = PreviewWidget(self.controller, preview_mode=self.preview_mode, scene_role="live")
|
||||
self.preview_widget.tileClicked.connect(self.controller.set_selected_tile)
|
||||
single_layout.addWidget(self.preview_widget, 1)
|
||||
layout.addWidget(self.single_preview_container, 1)
|
||||
|
||||
self.foh_preview_container = QWidget()
|
||||
foh_layout = QVBoxLayout(self.foh_preview_container)
|
||||
foh_layout.setContentsMargins(0, 0, 0, 0)
|
||||
foh_layout.setSpacing(12)
|
||||
|
||||
self.live_preview_widget = PreviewWidget(self.controller, preview_mode=self.preview_mode, scene_role="live")
|
||||
self.live_preview_widget.tileClicked.connect(self.controller.set_selected_tile)
|
||||
live_panel, self.live_preview_label = self._build_scene_preview_panel("Live", self.live_preview_widget)
|
||||
foh_layout.addWidget(live_panel, 1)
|
||||
|
||||
self.next_preview_widget = PreviewWidget(self.controller, preview_mode=self.preview_mode, scene_role="next")
|
||||
self.next_preview_widget.tileClicked.connect(self.controller.set_selected_tile)
|
||||
next_panel, self.next_preview_label = self._build_scene_preview_panel("Next", self.next_preview_widget)
|
||||
foh_layout.addWidget(next_panel, 1)
|
||||
|
||||
layout.addWidget(self.foh_preview_container, 1)
|
||||
|
||||
def set_preview_mode(self, mode: str) -> None:
|
||||
self.preview_mode = normalize_preview_mode(mode)
|
||||
self.preview_widget.set_preview_mode(self.preview_mode)
|
||||
self.live_preview_widget.set_preview_mode(self.preview_mode)
|
||||
self.next_preview_widget.set_preview_mode(self.preview_mode)
|
||||
self.fullscreen_preview.set_preview_mode(self.preview_mode)
|
||||
|
||||
def set_foh_mode(self, enabled: bool) -> None:
|
||||
self.single_preview_container.setVisible(not enabled)
|
||||
self.foh_preview_container.setVisible(enabled)
|
||||
|
||||
def set_scene_labels(self, live_label: str, next_label: str) -> None:
|
||||
self.live_preview_label.setText(live_label)
|
||||
self.next_preview_label.setText(next_label)
|
||||
|
||||
def toggle_fullscreen(self) -> None:
|
||||
if self.fullscreen_preview.isVisible():
|
||||
self.fullscreen_preview.hide()
|
||||
else:
|
||||
self.fullscreen_preview.showFullScreen()
|
||||
|
||||
def _build_scene_preview_panel(self, title: str, preview_widget: PreviewWidget) -> tuple[QWidget, QLabel]:
|
||||
panel = QWidget()
|
||||
layout = QVBoxLayout(panel)
|
||||
layout.setContentsMargins(0, 0, 0, 0)
|
||||
layout.setSpacing(6)
|
||||
|
||||
title_label = QLabel(title)
|
||||
title_label.setStyleSheet("font-size: 13px; font-weight: 600; color: #E6E6E6; padding-left: 2px;")
|
||||
layout.addWidget(title_label)
|
||||
|
||||
preview_widget.setMinimumHeight(220)
|
||||
layout.addWidget(preview_widget, 1)
|
||||
return panel, title_label
|
||||
Reference in New Issue
Block a user