"""Paso 8: confirmación final con resumen del proyecto.""" from __future__ import annotations from PySide6.QtCore import Qt from PySide6.QtWidgets import QLabel, QVBoxLayout, QWidget, QWizardPage from vmssailor.studio.theme import ( C_FOAM, C_FOG, C_MIDNIGHT, C_OK, C_SAND, C_STEEL, ui_font, ) class Step08Confirm(QWizardPage): def __init__(self, parent: QWidget | None = None) -> None: super().__init__(parent) self.setTitle("Paso 8 · Confirmación") self.setSubTitle( "Revisa el resumen del proyecto. Pulsa «Crear proyecto» para abrirlo en el editor." ) layout = QVBoxLayout(self) layout.setSpacing(16) self._summary_card = QLabel() self._summary_card.setWordWrap(True) self._summary_card.setTextFormat(Qt.RichText) self._summary_card.setFont(ui_font(11)) self._summary_card.setStyleSheet( f""" background: {C_MIDNIGHT}; border: 1px solid {C_STEEL}; border-radius: 12px; padding: 20px; color: {C_SAND}; """ ) layout.addWidget(self._summary_card, 1) footer = QLabel( "Una vez creado el proyecto se abre en el editor principal del Studio. " "Podrás agregar equipos, tags y tarjetas, y guardar el .vmsproj cuando quieras.\n\n" "Sprint 2 traerá: editor de equipos, motor de reglas, asignación de I/O." ) footer.setWordWrap(True) footer.setStyleSheet(f"color: {C_FOG};") footer.setFont(ui_font(9)) layout.addWidget(footer) def initializePage(self) -> None: from vmssailor.studio.wizard.wizard import ( F_BEAM, F_BULKHEAD_AFT, F_BULKHEAD_FWD, F_CUSTOMER, F_DRAFT, F_LOA, F_PROJECT_NAME, F_SYSTEMS, F_TEMPLATE_ID, F_VESSEL_NAME, F_VESSEL_SUBTYPE, F_VESSEL_TYPE, ) project_name = self.field(F_PROJECT_NAME) or "(sin nombre)" customer = self.field(F_CUSTOMER) or "(sin cliente)" v_type = self.field(F_VESSEL_TYPE) or "—" v_sub = self.field(F_VESSEL_SUBTYPE) or "—" template = self.field(F_TEMPLATE_ID) or "—" v_name = self.field(F_VESSEL_NAME) or "—" loa = self.field(F_LOA) or 0.0 beam = self.field(F_BEAM) or 0.0 draft = self.field(F_DRAFT) or 0.0 bh_aft = self.field(F_BULKHEAD_AFT) or 0.0 bh_fwd = self.field(F_BULKHEAD_FWD) or 0.0 systems = self.field(F_SYSTEMS) or [] n_sys = len(systems) systems_str = ", ".join(systems[:10]) if n_sys > 10: systems_str += f", … (+{n_sys - 10})" if not systems_str: systems_str = "(ninguno seleccionado)" html = f"""
Cliente: {customer}
| Eslora | {loa:.1f} m |
| Manga | {beam:.1f} m |
| Calado | {draft:.1f} m |
| Mamparo popa SM | x_pp {bh_aft:.1f} m |
| Mamparo proa SM | x_pp {bh_fwd:.1f} m |
✓ El proyecto se creará sin equipos. Agrega equipos manualmente o espera Sprint 2 (motor de reglas).
""" self._summary_card.setText(html)