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.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.setApplicationName("AR-Autopilot Studio")
+5 -5
View File
@@ -330,9 +330,9 @@ class ProjectEditorWidget(QWidget):
# ------------------------------------------------------------------
def _apply_rbac(self) -> None:
can_commission = self._session.has(Capability.EDIT_COMMISSIONING)
can_gains = self._session.has(Capability.EDIT_BASE_GAINS)
can_compile = self._session.has(Capability.EDIT_COMMISSIONING)
can_commission = self._session.can(Capability.EDIT_COMMISSIONING)
can_gains = self._session.can(Capability.EDIT_BASE_GAINS)
can_compile = self._session.can(Capability.EDIT_COMMISSIONING)
for w in [
self._max_rudder_deg,
@@ -381,7 +381,7 @@ class ProjectEditorWidget(QWidget):
self._sens_diverge_alarm,
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:
self._project = None
@@ -425,7 +425,7 @@ class ProjectEditorWidget(QWidget):
QMessageBox.critical(self, "Save error", str(exc))
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.")
return
+2 -2
View File
@@ -31,7 +31,7 @@ import sys
from pathlib import Path
from typing import Optional
from PySide6.QtCore import QObject, QThread, Signal
from PySide6.QtCore import QObject, Qt, QThread, Signal
from PySide6.QtWidgets import (
QComboBox,
QDialog,
@@ -148,7 +148,7 @@ class FlashConsoleWidget(QWidget):
f"Logged in as <b>{self._session.user.display_name}</b> "
f"({self._session.role.value})."
)
header.setTextFormat(0x1) # PlainText would lose <br/>; RichText = 1
header.setTextFormat(Qt.TextFormat.RichText)
header.setWordWrap(True)
outer.addWidget(header)
+4 -4
View File
@@ -20,7 +20,7 @@ import subprocess
import sys
from pathlib import Path
from PySide6.QtCore import QObject, QThread, Signal
from PySide6.QtCore import QObject, Qt, QThread, Signal
from PySide6.QtWidgets import (
QCheckBox,
QFileDialog,
@@ -129,7 +129,7 @@ class InstallerWidget(QWidget):
"<span style='color:#8899AA;font-size:11px'>"
"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)
root.addWidget(hdr)
@@ -220,7 +220,7 @@ class InstallerWidget(QWidget):
root.addWidget(self._log, 1)
# RBAC gate
can_build = self._session.has(Capability.EDIT_COMMISSIONING)
can_build = self._session.can(Capability.EDIT_COMMISSIONING)
if not can_build:
self._build_btn.setEnabled(False)
self._build_btn.setToolTip("Requiere rol Engineer o Super Admin.")
@@ -321,7 +321,7 @@ class InstallerWidget(QWidget):
self._set_running(False)
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._cancel_btn.setEnabled(running)