fix(studio): Qt6 compat + Ctrl+C signal handler

- flash_console: setTextFormat(Qt.TextFormat.RichText) — int overload removed in Qt6
- installer_widget: same fix + add Qt to QtCore import
- project_editor/installer_widget: Session.has() → Session.can()
- app.py: signal.signal(SIGINT, SIG_DFL) so Ctrl+C kills the process from terminal

AR_electronics — AR-Autopilot Project
This commit is contained in:
2026-05-24 11:45:17 -04:00
parent 3c4a0b530e
commit b68cd64cf1
4 changed files with 14 additions and 11 deletions
+3
View File
@@ -80,6 +80,9 @@ def run(argv: list[str] | None = None) -> int:
from arautopilot.studio.login_window import LoginDialog from arautopilot.studio.login_window import LoginDialog
from arautopilot.studio.main_window import StudioMainWindow from arautopilot.studio.main_window import StudioMainWindow
import signal # noqa: PLC0415
signal.signal(signal.SIGINT, signal.SIG_DFL) # Ctrl+C kills the process
app = QApplication(sys.argv) app = QApplication(sys.argv)
app.setApplicationName("AR-Autopilot Studio") app.setApplicationName("AR-Autopilot Studio")
+5 -5
View File
@@ -330,9 +330,9 @@ class ProjectEditorWidget(QWidget):
# ------------------------------------------------------------------ # ------------------------------------------------------------------
def _apply_rbac(self) -> None: def _apply_rbac(self) -> None:
can_commission = self._session.has(Capability.EDIT_COMMISSIONING) can_commission = self._session.can(Capability.EDIT_COMMISSIONING)
can_gains = self._session.has(Capability.EDIT_BASE_GAINS) can_gains = self._session.can(Capability.EDIT_BASE_GAINS)
can_compile = self._session.has(Capability.EDIT_COMMISSIONING) can_compile = self._session.can(Capability.EDIT_COMMISSIONING)
for w in [ for w in [
self._max_rudder_deg, self._max_rudder_deg,
@@ -381,7 +381,7 @@ class ProjectEditorWidget(QWidget):
self._sens_diverge_alarm, self._sens_diverge_alarm,
self._sens_diverge_failover, self._sens_diverge_failover,
]: ]:
w.setEnabled(enabled and self._session.has(Capability.EDIT_COMMISSIONING)) w.setEnabled(enabled and self._session.can(Capability.EDIT_COMMISSIONING))
def _on_new(self) -> None: def _on_new(self) -> None:
self._project = None self._project = None
@@ -425,7 +425,7 @@ class ProjectEditorWidget(QWidget):
QMessageBox.critical(self, "Save error", str(exc)) QMessageBox.critical(self, "Save error", str(exc))
def _on_compile(self) -> None: def _on_compile(self) -> None:
if not self._session.has(Capability.EDIT_COMMISSIONING): if not self._session.can(Capability.EDIT_COMMISSIONING):
QMessageBox.warning(self, "Access denied", "Engineer or Super Admin required.") QMessageBox.warning(self, "Access denied", "Engineer or Super Admin required.")
return return
+2 -2
View File
@@ -31,7 +31,7 @@ import sys
from pathlib import Path from pathlib import Path
from typing import Optional from typing import Optional
from PySide6.QtCore import QObject, QThread, Signal from PySide6.QtCore import QObject, Qt, QThread, Signal
from PySide6.QtWidgets import ( from PySide6.QtWidgets import (
QComboBox, QComboBox,
QDialog, QDialog,
@@ -148,7 +148,7 @@ class FlashConsoleWidget(QWidget):
f"Logged in as <b>{self._session.user.display_name}</b> " f"Logged in as <b>{self._session.user.display_name}</b> "
f"({self._session.role.value})." f"({self._session.role.value})."
) )
header.setTextFormat(0x1) # PlainText would lose <br/>; RichText = 1 header.setTextFormat(Qt.TextFormat.RichText)
header.setWordWrap(True) header.setWordWrap(True)
outer.addWidget(header) outer.addWidget(header)
+4 -4
View File
@@ -20,7 +20,7 @@ import subprocess
import sys import sys
from pathlib import Path from pathlib import Path
from PySide6.QtCore import QObject, QThread, Signal from PySide6.QtCore import QObject, Qt, QThread, Signal
from PySide6.QtWidgets import ( from PySide6.QtWidgets import (
QCheckBox, QCheckBox,
QFileDialog, QFileDialog,
@@ -129,7 +129,7 @@ class InstallerWidget(QWidget):
"<span style='color:#8899AA;font-size:11px'>" "<span style='color:#8899AA;font-size:11px'>"
"Genera un pendrive USB con las apps AR Electronics y la licencia del buque.</span>" "Genera un pendrive USB con las apps AR Electronics y la licencia del buque.</span>"
) )
hdr.setTextFormat(1) # RichText hdr.setTextFormat(Qt.TextFormat.RichText) # RichText
hdr.setWordWrap(True) hdr.setWordWrap(True)
root.addWidget(hdr) root.addWidget(hdr)
@@ -220,7 +220,7 @@ class InstallerWidget(QWidget):
root.addWidget(self._log, 1) root.addWidget(self._log, 1)
# RBAC gate # RBAC gate
can_build = self._session.has(Capability.EDIT_COMMISSIONING) can_build = self._session.can(Capability.EDIT_COMMISSIONING)
if not can_build: if not can_build:
self._build_btn.setEnabled(False) self._build_btn.setEnabled(False)
self._build_btn.setToolTip("Requiere rol Engineer o Super Admin.") self._build_btn.setToolTip("Requiere rol Engineer o Super Admin.")
@@ -321,7 +321,7 @@ class InstallerWidget(QWidget):
self._set_running(False) self._set_running(False)
def _set_running(self, running: bool) -> None: def _set_running(self, running: bool) -> None:
can_build = self._session.has(Capability.EDIT_COMMISSIONING) can_build = self._session.can(Capability.EDIT_COMMISSIONING)
self._build_btn.setEnabled(not running and can_build) self._build_btn.setEnabled(not running and can_build)
self._cancel_btn.setEnabled(running) self._cancel_btn.setEnabled(running)