mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Ability to set callsigns
This commit is contained in:
70
qt_ui/widgets/QCallsignWidget.py
Normal file
70
qt_ui/widgets/QCallsignWidget.py
Normal 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)
|
||||
56
qt_ui/windows/QCallsignDialog.py
Normal file
56
qt_ui/windows/QCallsignDialog.py
Normal 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)
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user