Ability to set callsigns

This commit is contained in:
Raffson
2023-11-18 23:05:01 +01:00
parent aaf23d52bc
commit ade81f4548
7 changed files with 180 additions and 6 deletions

View File

@@ -0,0 +1,70 @@
from PySide6.QtCore import Signal
from PySide6.QtWidgets import (
QHBoxLayout,
QLabel,
QPushButton,
QWidget,
)
from game.radio.CallsignContainer import CallsignContainer, Callsign
from qt_ui.models import GameModel
from qt_ui.windows.QCallsignDialog import QCallsignDialog
class QCallsignWidget(QWidget):
callsign_changed = Signal(QWidget)
def __init__(self, container: CallsignContainer, game_model: GameModel) -> None:
super().__init__()
self.ct = container
self.gm = game_model
columns = QHBoxLayout()
self.setLayout(columns)
self.callsign = QLabel(self._get_label_text())
columns.addWidget(self.callsign)
columns.addStretch()
self.set_callsign_btn = QPushButton("Set Callsign")
self.set_callsign_btn.setProperty("class", "comms")
self.set_callsign_btn.setFixedWidth(100)
columns.addWidget(self.set_callsign_btn)
self.set_callsign_btn.clicked.connect(self.open_callsign_dialog)
self.reset_callsign_btn = QPushButton("Reset Callsign")
self.reset_callsign_btn.setProperty("class", "btn-danger comms")
self.reset_callsign_btn.setFixedWidth(100)
columns.addWidget(self.reset_callsign_btn)
self.reset_callsign_btn.clicked.connect(self.reset_callsign)
def _get_label_text(self) -> str:
cs = (
"AUTO"
if self.ct.callsign is None
else f"{self.ct.callsign.name} {self.ct.callsign.nr}"
)
return f"<b>Callsign: {cs}</b>"
def open_callsign_dialog(self) -> None:
self.callsign_dialog = QCallsignDialog(self, self.ct)
self.callsign_dialog.accepted.connect(self.assign_callsign)
self.callsign_dialog.show()
def assign_callsign(self) -> None:
name = self.callsign_dialog.callsign_name_input.currentText()
nr = self.callsign_dialog.callsign_nr_input.value()
self.ct.callsign = Callsign(name, nr)
self.callsign.setText(self._get_label_text())
self.callsign_changed.emit(self)
def reset_callsign(self) -> None:
self.ct.callsign = None
self.callsign.setText(self._get_label_text())
self._reset_color_and_tooltip()
self.callsign_changed.emit(self)
def _reset_color_and_tooltip(self):
self.callsign.setStyleSheet("color: white")
self.callsign.setToolTip(None)

View File

@@ -0,0 +1,56 @@
from typing import Optional
from PySide6.QtCore import Qt
from PySide6.QtWidgets import (
QDialog,
QPushButton,
QLabel,
QHBoxLayout,
QSpinBox,
QComboBox,
)
from game.radio.CallsignContainer import CallsignContainer
from qt_ui.uiconstants import EVENT_ICONS
class QCallsignDialog(QDialog):
def __init__(
self, parent=None, container: Optional[CallsignContainer] = None
) -> None:
super().__init__(parent=parent)
self.container = container
self.setMinimumWidth(400)
# Make dialog modal to prevent background windows to close unexpectedly.
self.setModal(True)
self.setWindowTitle("Assign Callsign")
self.setWindowIcon(EVENT_ICONS["strike"])
layout = QHBoxLayout()
self.callsign_label = QLabel("Callsign:")
self.callsign_name_input = QComboBox()
self.callsign_name_input.addItems(container.available_callsigns)
self.callsign_nr_input = QSpinBox()
self.callsign_nr_input.setRange(1, 9)
self.callsign_nr_input.setSingleStep(1)
self.callsign_nr_input.setMaximumWidth(50)
layout.addWidget(self.callsign_label)
layout.addStretch()
layout.addWidget(self.callsign_name_input)
layout.addStretch()
layout.addWidget(self.callsign_nr_input)
layout.addStretch()
self.create_button = QPushButton("Save")
self.create_button.clicked.connect(self.accept)
layout.addWidget(self.create_button, alignment=Qt.AlignmentFlag.AlignRight)
self.setLayout(layout)
if container is not None:
if container.callsign is not None:
self.callsign_name_input.setCurrentText(container.callsign.name)
self.callsign_nr_input.setValue(container.callsign.nr)

View File

@@ -2,13 +2,14 @@ from PySide6.QtWidgets import QGroupBox, QVBoxLayout
from game.ato import Flight, FlightType
from qt_ui.models import GameModel
from qt_ui.widgets.QCallsignWidget import QCallsignWidget
from qt_ui.widgets.QFrequencyWidget import QFrequencyWidget
from qt_ui.widgets.QTacanWidget import QTacanWidget
class QCommsEditor(QGroupBox):
def __init__(self, flight: Flight, game: GameModel):
title = "Intra-Flight Frequency"
title = "COMMs"
layout = QVBoxLayout()
@@ -16,9 +17,9 @@ class QCommsEditor(QGroupBox):
has_tacan = flight.unit_type.dcs_unit_type.tacan
layout.addWidget(QFrequencyWidget(flight, game))
layout.addWidget(QCallsignWidget(flight, game))
if is_refuel and has_tacan:
layout.addWidget(QTacanWidget(flight, game))
title = title + " / TACAN"
super(QCommsEditor, self).__init__(title)
self.flight = flight