Files
RFP_Infinity-Vis/app/ui/scene_preview_area.py

86 lines
3.9 KiB
Python

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