Rename UnitType.name what it is: the variant ID.

This property affects safe compat because the ID is what gets preserved
in the save, but it's unfortunately also used as the display name, which
means changing the display name breaks save compat. It also prevents us
from changing display names without breaking faction definitions.

This is the first step in fixing that. The next is adding a separate
display_name property that can be updated without breaking either of
those.
This commit is contained in:
Dan Albert
2023-08-09 20:50:01 -07:00
committed by Raffson
parent 97ee6ba19f
commit 1760532168
20 changed files with 79 additions and 45 deletions

View File

@@ -611,12 +611,12 @@ class AircraftTypeList(QListView):
self.add_aircraft_type(aircraft)
def remove_aircraft_type(self, aircraft: AircraftType):
for item in self.item_model.findItems(aircraft.name):
for item in self.item_model.findItems(aircraft.variant_id):
self.item_model.removeRow(item.row())
self.page_index_changed.emit(self.selectionModel().currentIndex().row())
def add_aircraft_type(self, aircraft: AircraftType):
aircraft_item = QStandardItem(aircraft.name)
aircraft_item = QStandardItem(aircraft.variant_id)
icon = self.icon_for(aircraft)
if icon is not None:
aircraft_item.setIcon(icon)
@@ -728,7 +728,7 @@ class AirWingConfigurationTab(QWidget):
)
# Add Squadron
if not self.type_list.item_model.findItems(selected_type.name):
if not self.type_list.item_model.findItems(selected_type.variant_id):
self.type_list.add_aircraft_type(selected_type)
# TODO Select the newly added type
self.squadrons_panel.add_squadron_to_panel(squadron)
@@ -814,8 +814,8 @@ class SquadronAircraftTypeSelector(QComboBox):
super().__init__()
self.setSizeAdjustPolicy(self.AdjustToContents)
for type in sorted(types, key=lambda type: type.name):
self.addItem(type.name, type)
for type in sorted(types, key=lambda type: type.variant_id):
self.addItem(type.variant_id, type)
if selected_aircraft:
self.setCurrentText(selected_aircraft)

View File

@@ -43,7 +43,7 @@ class SquadronDelegate(TwoColumnRowDelegate):
nickname = ""
return f"{squadron.name}{nickname}"
elif (row, column) == (0, 1):
return squadron.aircraft.name
return squadron.aircraft.variant_id
elif (row, column) == (1, 0):
return squadron.location.name
elif (row, column) == (1, 1):
@@ -130,7 +130,7 @@ class AircraftInventoryData:
player = "Player" if pilot.player else "AI"
yield AircraftInventoryData(
flight.departure.name,
flight.unit_type.name,
flight.unit_type.variant_id,
flight_type,
target,
pilot_name,
@@ -143,7 +143,7 @@ class AircraftInventoryData:
) -> Iterator[AircraftInventoryData]:
for _ in range(0, squadron.untasked_aircraft):
yield AircraftInventoryData(
squadron.name, squadron.aircraft.name, "Idle", "N/A", "N/A", "N/A"
squadron.name, squadron.aircraft.variant_id, "Idle", "N/A", "N/A", "N/A"
)

View File

@@ -23,7 +23,9 @@ class LossGrid(QGridLayout):
def __init__(self, debriefing: Debriefing, player: bool) -> None:
super().__init__()
self.add_loss_rows(debriefing.air_losses.by_type(player), lambda u: u.name)
self.add_loss_rows(
debriefing.air_losses.by_type(player), lambda u: u.variant_id
)
self.add_loss_rows(
debriefing.front_line_losses_by_type(player), lambda u: str(u)
)

View File

@@ -66,7 +66,7 @@ class QUnitInfoWindow(QDialog):
self.setModal(True)
self.game = game
self.unit_type = unit_type
self.name = unit_type.name
self.name = unit_type.variant_id
self.setWindowTitle(f"Unit Info: {self.name}")
self.setWindowIcon(QIcon("./resources/icon.png"))
self.setMinimumHeight(570)
@@ -93,7 +93,7 @@ class QUnitInfoWindow(QDialog):
self.details_grid_layout.setMargin(0)
self.name_box = QLabel(
f"<b>Name:</b> {unit_type.manufacturer} {unit_type.name}"
f"<b>Name:</b> {unit_type.manufacturer} {unit_type.variant_id}"
)
self.name_box.setProperty("style", "info-element")

View File

@@ -33,11 +33,11 @@ class DepartingConvoyInfo(QGroupBox):
if unit_type.dcs_id in VEHICLES_ICONS.keys():
icon.setPixmap(VEHICLES_ICONS[unit_type.dcs_id])
else:
icon.setText("<b>" + unit_type.name + "</b>")
icon.setText("<b>" + unit_type.variant_id + "</b>")
icon.setProperty("style", "icon-armor")
unit_layout.addWidget(icon, idx, 0)
unit_layout.addWidget(
QLabel(f"{count} x <strong>{unit_type.name}</strong>"),
QLabel(f"{count} x <strong>{unit_type.variant_id}</strong>"),
idx,
1,
)

View File

@@ -64,7 +64,7 @@ class UnitTransferList(QFrame):
task_box_layout = QGridLayout()
scroll_content.setLayout(task_box_layout)
units_column = sorted(cp.base.armor, key=lambda u: u.name)
units_column = sorted(cp.base.armor, key=lambda u: u.variant_id)
count = 0
for count, unit_type in enumerate(units_column):
@@ -173,7 +173,7 @@ class ScrollingUnitTransferGrid(QFrame):
unit_types = set(self.game_model.game.faction_for(player=True).ground_units)
sorted_units = sorted(
{u for u in unit_types if self.cp.base.total_units_of_type(u)},
key=lambda u: u.name,
key=lambda u: u.variant_id,
)
for row, unit_type in enumerate(sorted_units):
self.add_unit_row(unit_type, task_box_layout, row)
@@ -205,7 +205,7 @@ class ScrollingUnitTransferGrid(QFrame):
origin_inventory = self.cp.base.total_units_of_type(unit_type)
unit_name = QLabel(f"<b>{unit_type.name}</b>")
unit_name = QLabel(f"<b>{unit_type.variant_id}</b>")
unit_name.setSizePolicy(
QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding)
)

View File

@@ -44,7 +44,9 @@ class QAircraftRecruitmentMenu(UnitTransactionFrame[Squadron]):
for squadron in cp.squadrons:
unit_types.add(squadron.aircraft)
sorted_squadrons = sorted(cp.squadrons, key=lambda s: (s.aircraft.name, s.name))
sorted_squadrons = sorted(
cp.squadrons, key=lambda s: (s.aircraft.variant_id, s.name)
)
for row, squadron in enumerate(sorted_squadrons):
self.add_purchase_row(squadron, task_box_layout, row)

View File

@@ -32,7 +32,7 @@ class QArmorRecruitmentMenu(UnitTransactionFrame[GroundUnitType]):
unit_types = list(
set(self.game_model.game.faction_for(player=True).ground_units)
)
unit_types.sort(key=lambda u: u.name)
unit_types.sort(key=lambda u: u.variant_id)
for row, unit_type in enumerate(unit_types):
self.add_purchase_row(unit_type, task_box_layout, row)
stretch = QVBoxLayout()

View File

@@ -32,7 +32,7 @@ class QIntelInfo(QFrame):
).present.items():
if count:
task_type = unit_type.dcs_unit_type.task_default.name
units_by_task[task_type][unit_type.name] += count
units_by_task[task_type][unit_type.variant_id] += count
units_by_task = {
task: units_by_task[task] for task in sorted(units_by_task.keys())
@@ -41,7 +41,7 @@ class QIntelInfo(QFrame):
front_line_units = defaultdict(int)
for unit_type, count in self.cp.base.armor.items():
if count:
front_line_units[unit_type.name] += count
front_line_units[unit_type.variant_id] += count
units_by_task["Front line units"] = front_line_units
for task, unit_types in units_by_task.items():

View File

@@ -76,7 +76,7 @@ class QTgoLayoutGroupRow(QWidget):
# Add all possible units with the price
for unit_type in force_group.unit_types_for_group(group):
self.unit_selector.addItem(
f"{unit_type.name} [${unit_type.price}M]",
f"{unit_type.variant_id} [${unit_type.price}M]",
userData=(unit_type.dcs_unit_type, unit_type.price),
)
# Add all possible statics with price = 0

View File

@@ -88,11 +88,11 @@ class AircraftIntelLayout(IntelTableLayout):
continue
self.add_header(f"{control_point.name} ({base_total})")
for airframe in sorted(allocation.present, key=lambda k: k.name):
for airframe in sorted(allocation.present, key=lambda k: k.variant_id):
count = allocation.present[airframe]
if not count:
continue
self.add_row(f" {airframe.name}", count)
self.add_row(f" {airframe.variant_id}", count)
self.add_row("")
self.add_row("<b>Total</b>", total)
@@ -117,11 +117,11 @@ class ArmyIntelLayout(IntelTableLayout):
continue
self.add_header(f"{control_point.name} ({base.total_armor})")
for vehicle in sorted(base.armor, key=lambda k: k.name):
for vehicle in sorted(base.armor, key=lambda k: k.variant_id):
count = base.armor[vehicle]
if not count:
continue
self.add_row(f" {vehicle.name}", count)
self.add_row(f" {vehicle.variant_id}", count)
self.add_row("")
self.add_row("<b>Total</b>", total)