diff --git a/qt_ui/windows/newgame/QNewGameWizard.py b/qt_ui/windows/newgame/QNewGameWizard.py index 16669b0d..9f49e8d1 100644 --- a/qt_ui/windows/newgame/QNewGameWizard.py +++ b/qt_ui/windows/newgame/QNewGameWizard.py @@ -2,7 +2,7 @@ from __future__ import unicode_literals import datetime import logging -from typing import List +from typing import List, Optional from PySide2 import QtGui, QtWidgets from PySide2.QtCore import QItemSelectionModel, QPoint, Qt @@ -295,6 +295,44 @@ class TheaterConfiguration(QtWidgets.QWizardPage): self.setLayout(layout) +class CurrencySpinner(QtWidgets.QSpinBox): + def __init__(self, minimum: Optional[int] = None, + maximum: Optional[int] = None, + initial: Optional[int] = None) -> None: + super().__init__() + + if minimum is not None: + self.setMinimum(minimum) + if maximum is not None: + self.setMaximum(maximum) + if initial is not None: + self.setValue(initial) + + def textFromValue(self, val: int) -> str: + return f"${val}" + + +class BudgetInputs(QtWidgets.QGridLayout): + def __init__(self) -> None: + super().__init__() + self.addWidget(QtWidgets.QLabel("Starting money"), 0, 0) + + minimum = 0 + maximum = 5000 + initial = 650 + + slider = QtWidgets.QSlider(Qt.Horizontal) + slider.setMinimum(minimum) + slider.setMaximum(maximum) + slider.setValue(initial) + self.starting_money = CurrencySpinner(minimum, maximum, initial) + slider.valueChanged.connect(lambda x: self.starting_money.setValue(x)) + self.starting_money.valueChanged.connect(lambda x: slider.setValue(x)) + + self.addWidget(slider, 1, 0) + self.addWidget(self.starting_money, 1, 1) + + class MiscOptions(QtWidgets.QWizardPage): def __init__(self, parent=None): super(MiscOptions, self).__init__(parent) @@ -327,16 +365,6 @@ class MiscOptions(QtWidgets.QWizardPage): no_enemy_navy = QtWidgets.QCheckBox() self.registerField('no_enemy_navy', no_enemy_navy) - # Economy settings - economySettingsGroup = QtWidgets.QGroupBox("Economy") - starting_money_slider = QtWidgets.QSlider(Qt.Horizontal) - starting_money_slider.setMinimum(0) - starting_money_slider.setMaximum(5000) - starting_money_slider.setValue(650) - starting_money_label = QtWidgets.QLabel("$650M") - starting_money_slider.valueChanged.connect(lambda x: starting_money_label.setText("${}M".format(x))) - self.registerField('starting_money', starting_money_slider) - layout = QtWidgets.QGridLayout() layout.addWidget(QtWidgets.QLabel("Start at mid game"), 1, 0) layout.addWidget(midGame, 1, 1) @@ -357,11 +385,10 @@ class MiscOptions(QtWidgets.QWizardPage): generatorLayout.addWidget(no_enemy_navy, 5, 1) generatorSettingsGroup.setLayout(generatorLayout) - economyLayout = QtWidgets.QGridLayout() - economyLayout.addWidget(QtWidgets.QLabel("Starting money"), 0, 0) - economyLayout.addWidget(starting_money_slider, 1, 0) - economyLayout.addWidget(starting_money_label, 1, 1) - economySettingsGroup.setLayout(economyLayout) + budget_inputs = BudgetInputs() + economySettingsGroup = QtWidgets.QGroupBox("Economy") + economySettingsGroup.setLayout(budget_inputs) + self.registerField('starting_money', budget_inputs.starting_money) mlayout = QVBoxLayout() mlayout.addWidget(miscSettingsGroup)