Add package frequency

Part of #70
This commit is contained in:
Raffson
2023-01-13 20:27:13 +01:00
parent e8151678dd
commit 7bae6cd562
5 changed files with 111 additions and 21 deletions

View File

@@ -20,6 +20,7 @@ from game.ato.flight import Flight
from game.ato.flightplans.planningerror import PlanningError
from game.ato.package import Package
from game.game import Game
from game.radio.radios import RadioFrequency
from game.server import EventStream
from game.sim import GameUpdateEvents
from game.theater.missiontarget import MissionTarget
@@ -27,6 +28,7 @@ from qt_ui.models import AtoModel, GameModel, PackageModel
from qt_ui.uiconstants import EVENT_ICONS
from qt_ui.widgets.ato import QFlightList
from qt_ui.windows.mission.flight.QFlightCreator import QFlightCreator
from qt_ui.windows.mission.package.QPackageFrequency import QPackageFrequency
class QPackageDialog(QDialog):
@@ -56,17 +58,30 @@ class QPackageDialog(QDialog):
self.summary_row = QHBoxLayout()
self.layout.addLayout(self.summary_row)
self.package_type_column = QHBoxLayout()
self.package_type_column = QVBoxLayout()
self.summary_row.addLayout(self.package_type_column)
package_type_row = QHBoxLayout()
self.package_type_label = QLabel("Package Type:")
self.package_type_text = QLabel(self.package_model.description)
# noinspection PyUnresolvedReferences
self.package_changed.connect(
lambda: self.package_type_text.setText(self.package_model.description)
self.package_changed.connect(self.on_package_changed)
package_type_row.addWidget(self.package_type_label)
package_type_row.addWidget(self.package_type_text)
self.package_type_column.addLayout(package_type_row)
# TODO: make freq red if used by another package
package_freq_row = QHBoxLayout()
self.package_freq_label = QLabel("Package FREQ:")
freq = (
self.package_model.package.frequency.mhz
if self.package_model.package.frequency is not None
else ""
)
self.package_type_column.addWidget(self.package_type_label)
self.package_type_column.addWidget(self.package_type_text)
self.package_freq_text = QLabel(f"{freq}")
package_freq_row.addWidget(self.package_freq_label)
package_freq_row.addWidget(self.package_freq_text)
self.package_type_column.addLayout(package_freq_row)
self.summary_row.addStretch(1)
@@ -130,6 +145,10 @@ class QPackageDialog(QDialog):
self.delete_flight_button.setEnabled(model.rowCount() > 0)
self.button_layout.addWidget(self.delete_flight_button)
self.open_radio_button = QPushButton("Set Package FREQ")
self.open_radio_button.clicked.connect(self.on_open_radio)
self.button_layout.addWidget(self.open_radio_button)
self.package_model.tot_changed.connect(self.update_tot)
self.button_layout.addStretch()
@@ -218,6 +237,23 @@ class QPackageDialog(QDialog):
def on_change_name(self) -> None:
self.package_model.package.custom_name = self.package_name_text.text()
def on_open_radio(self) -> None:
self.package_frequency_dialog = QPackageFrequency(
self.game, self.package_model.package, parent=self.window()
)
self.package_frequency_dialog.accepted.connect(self.assign_frequency)
self.package_frequency_dialog.show()
def assign_frequency(self):
hz = round(self.package_frequency_dialog.frequency_input.value() * 10**6)
self.package_model.package.frequency = RadioFrequency(hertz=hz)
self.package_changed.emit()
def on_package_changed(self):
self.package_type_text.setText(self.package_model.description)
if (freq := self.package_model.package.frequency) is not None:
self.package_freq_text.setText(f"{freq.mhz} MHz")
class QNewPackageDialog(QPackageDialog):
"""Dialog window for creating a new package.

View File

@@ -0,0 +1,47 @@
from typing import Optional, Type
from PySide2.QtCore import Qt
from PySide2.QtWidgets import (
QDialog,
QPushButton,
QVBoxLayout,
QLabel,
QHBoxLayout,
QDoubleSpinBox,
)
from game import Game
from game.ato.package import Package
from game.radio.radios import RadioRegistry
from qt_ui.uiconstants import EVENT_ICONS
class QPackageFrequency(QDialog):
def __init__(self, game: Game, package: Package, parent=None) -> None:
super().__init__(parent=parent)
self.setMinimumWidth(400)
self.game = game
self.package = package
# Make dialog modal to prevent background windows to close unexpectedly.
self.setModal(True)
self.setWindowTitle("Assign frequency")
self.setWindowIcon(EVENT_ICONS["strike"])
layout = QHBoxLayout()
self.frequency_label = QLabel("FREQ (Mhz):")
self.frequency_input = QDoubleSpinBox()
self.frequency_input.setRange(225, 399.975)
self.frequency_input.setSingleStep(0.025)
self.frequency_input.setDecimals(3)
layout.addWidget(self.frequency_label)
layout.addWidget(self.frequency_input)
self.create_button = QPushButton("Save")
self.create_button.clicked.connect(self.accept)
layout.addWidget(self.create_button, alignment=Qt.AlignRight)
self.setLayout(layout)