feat: AR-VMS-Seaman initial commit — Python FastAPI + PySide6 (runtime server + desktop studio client)
This commit is contained in:
@@ -20,6 +20,7 @@ from PySide6.QtWidgets import (
|
||||
QMessageBox,
|
||||
QPushButton,
|
||||
QSplitter,
|
||||
QStackedWidget,
|
||||
QStatusBar,
|
||||
QTabWidget,
|
||||
QToolBar,
|
||||
@@ -42,6 +43,7 @@ from vmssailor.studio.theme import (
|
||||
)
|
||||
from vmssailor.studio.widgets.system_sidebar import SystemSidebar
|
||||
from vmssailor.studio.widgets.vessel_canvas import VesselCanvas
|
||||
from vmssailor.studio.widgets.welcome_screen import WelcomeScreen
|
||||
from vmssailor.studio.wizard.wizard import VesselWizard
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -119,7 +121,10 @@ class MainWindow(QMainWindow):
|
||||
self._topbar = bar
|
||||
|
||||
def _build_central(self) -> None:
|
||||
# Splitter horizontal: sidebar | canvas
|
||||
# Welcome screen (visible al arrancar sin proyecto)
|
||||
self._welcome = WelcomeScreen()
|
||||
|
||||
# Workspace splitter (visible cuando hay proyecto cargado)
|
||||
self._splitter = QSplitter(Qt.Horizontal)
|
||||
self._splitter.setHandleWidth(1)
|
||||
self._splitter.setChildrenCollapsible(False)
|
||||
@@ -129,7 +134,6 @@ class MainWindow(QMainWindow):
|
||||
self._sidebar.setMinimumWidth(260)
|
||||
self._sidebar.setMaximumWidth(380)
|
||||
|
||||
# Right pane: vertical splitter with canvas on top + editor tabs below
|
||||
self._canvas = VesselCanvas()
|
||||
self._equipment_editor = EquipmentEditor()
|
||||
self._mimic_editor = MimicEditor()
|
||||
@@ -153,13 +157,18 @@ class MainWindow(QMainWindow):
|
||||
self._splitter.addWidget(right_splitter)
|
||||
self._splitter.setSizes([280, 1160])
|
||||
|
||||
# Compose central widget: topbar (top) + splitter (rest)
|
||||
# StackedWidget conmuta entre welcome y workspace
|
||||
self._main_stack = QStackedWidget()
|
||||
self._main_stack.addWidget(self._welcome) # index 0
|
||||
self._main_stack.addWidget(self._splitter) # index 1
|
||||
|
||||
# Compose central widget: topbar (top) + stack (rest)
|
||||
wrapper = QWidget()
|
||||
outer = QVBoxLayout(wrapper)
|
||||
outer.setContentsMargins(0, 0, 0, 0)
|
||||
outer.setSpacing(0)
|
||||
outer.addWidget(self._topbar)
|
||||
outer.addWidget(self._splitter, 1)
|
||||
outer.addWidget(self._main_stack, 1)
|
||||
self.setCentralWidget(wrapper)
|
||||
|
||||
def _build_statusbar(self) -> None:
|
||||
@@ -254,6 +263,9 @@ class MainWindow(QMainWindow):
|
||||
self._equipment_editor.projectMutated.connect(self._on_project_mutated)
|
||||
self._tag_editor.projectMutated.connect(self._on_project_mutated)
|
||||
self._alarm_editor.projectMutated.connect(self._on_project_mutated)
|
||||
# Welcome screen CTAs disparan las mismas acciones que el menú
|
||||
self._welcome.newProjectRequested.connect(self.on_new_wizard)
|
||||
self._welcome.openProjectRequested.connect(self.on_open)
|
||||
|
||||
# ----- Slots --------------------------------------------------------
|
||||
|
||||
@@ -360,6 +372,8 @@ class MainWindow(QMainWindow):
|
||||
self._btn_save_top.setEnabled(has_project)
|
||||
self._btn_validate.setEnabled(has_project)
|
||||
self._btn_compile.setEnabled(has_project)
|
||||
# Conmuta entre welcome screen (0) y workspace (1)
|
||||
self._main_stack.setCurrentIndex(1 if has_project else 0)
|
||||
self._update_window_title()
|
||||
self._update_stats()
|
||||
if project is not None:
|
||||
|
||||
Reference in New Issue
Block a user