mirror of
https://github.com/dcs-retribution/dcs-retribution.git
synced 2025-11-10 15:41:24 +00:00
Hide incompatible campaigns by default.
https://github.com/dcs-liberation/dcs_liberation/issues/1178
This commit is contained in:
parent
3d4415d5d2
commit
1ea98a6ed1
@ -8,7 +8,7 @@ from typing import Any, Dict, List, Union, Tuple
|
||||
|
||||
import packaging.version
|
||||
from PySide2 import QtGui
|
||||
from PySide2.QtCore import QItemSelectionModel
|
||||
from PySide2.QtCore import QItemSelectionModel, QModelIndex, Qt
|
||||
from PySide2.QtGui import QStandardItem, QStandardItemModel
|
||||
from PySide2.QtWidgets import QAbstractItemView, QListView
|
||||
|
||||
@ -116,6 +116,7 @@ def load_campaigns() -> List[Campaign]:
|
||||
class QCampaignItem(QStandardItem):
|
||||
def __init__(self, campaign: Campaign) -> None:
|
||||
super(QCampaignItem, self).__init__()
|
||||
self.setData(campaign, QCampaignList.CampaignRole)
|
||||
self.setIcon(QtGui.QIcon(CONST.ICONS[campaign.icon_name]))
|
||||
self.setEditable(False)
|
||||
if campaign.is_compatible:
|
||||
@ -126,31 +127,29 @@ class QCampaignItem(QStandardItem):
|
||||
|
||||
|
||||
class QCampaignList(QListView):
|
||||
def __init__(self, campaigns: List[Campaign]) -> None:
|
||||
CampaignRole = Qt.UserRole
|
||||
|
||||
def __init__(self, campaigns: list[Campaign], show_incompatible: bool) -> None:
|
||||
super(QCampaignList, self).__init__()
|
||||
self.model = QStandardItemModel(self)
|
||||
self.setModel(self.model)
|
||||
self.campaign_model = QStandardItemModel(self)
|
||||
self.setModel(self.campaign_model)
|
||||
self.setMinimumWidth(250)
|
||||
self.setMinimumHeight(350)
|
||||
self.campaigns = []
|
||||
self.campaigns = campaigns
|
||||
self.setSelectionBehavior(QAbstractItemView.SelectItems)
|
||||
self.setup_content(campaigns)
|
||||
self.setup_content(show_incompatible)
|
||||
|
||||
def setup_content(self, campaigns: List[Campaign]) -> None:
|
||||
for campaign in campaigns:
|
||||
self.campaigns.append(campaign)
|
||||
item = QCampaignItem(campaign)
|
||||
self.model.appendRow(item)
|
||||
self.setSelectedCampaign(0)
|
||||
self.repaint()
|
||||
@property
|
||||
def selected_campaign(self) -> Campaign:
|
||||
return self.currentIndex().data(QCampaignList.CampaignRole)
|
||||
|
||||
def setSelectedCampaign(self, row):
|
||||
self.selectionModel().clearSelection()
|
||||
index = self.model.index(row, 0)
|
||||
if not index.isValid():
|
||||
index = self.model.index(0, 0)
|
||||
self.selectionModel().setCurrentIndex(index, QItemSelectionModel.Select)
|
||||
self.repaint()
|
||||
def setup_content(self, show_incompatible: bool) -> None:
|
||||
self.campaign_model.clear()
|
||||
for campaign in self.campaigns:
|
||||
if show_incompatible or campaign.is_compatible:
|
||||
item = QCampaignItem(campaign)
|
||||
self.campaign_model.appendRow(item)
|
||||
|
||||
def clear_layout(self):
|
||||
self.model.removeRows(0, self.model.rowCount())
|
||||
self.selectionModel().setCurrentIndex(
|
||||
self.campaign_model.index(0, 0, QModelIndex()), QItemSelectionModel.Select
|
||||
)
|
||||
|
||||
@ -6,7 +6,7 @@ from typing import List
|
||||
|
||||
from PySide2 import QtGui, QtWidgets
|
||||
from PySide2.QtCore import QItemSelectionModel, QPoint, Qt, QDate
|
||||
from PySide2.QtWidgets import QVBoxLayout, QTextEdit, QLabel
|
||||
from PySide2.QtWidgets import QVBoxLayout, QTextEdit, QLabel, QCheckBox
|
||||
from jinja2 import Environment, FileSystemLoader, select_autoescape
|
||||
|
||||
from game import db
|
||||
@ -319,7 +319,16 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
|
||||
)
|
||||
|
||||
# List of campaigns
|
||||
campaignList = QCampaignList(campaigns)
|
||||
show_incompatible_campaigns_checkbox = QCheckBox(
|
||||
text="Show incompatible campaigns"
|
||||
)
|
||||
show_incompatible_campaigns_checkbox.setChecked(False)
|
||||
campaignList = QCampaignList(
|
||||
campaigns, show_incompatible_campaigns_checkbox.isChecked()
|
||||
)
|
||||
show_incompatible_campaigns_checkbox.toggled.connect(
|
||||
lambda checked: campaignList.setup_content(show_incompatible=checked)
|
||||
)
|
||||
self.registerField("selectedCampaign", campaignList)
|
||||
|
||||
# Faction description
|
||||
@ -380,8 +389,7 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
|
||||
template_perf = jinja_env.get_template(
|
||||
"campaign_performance_template_EN.j2"
|
||||
)
|
||||
index = campaignList.selectionModel().currentIndex().row()
|
||||
campaign = campaignList.campaigns[index]
|
||||
campaign = campaignList.selected_campaign
|
||||
self.setField("selectedCampaign", campaign)
|
||||
self.campaignMapDescription.setText(template.render({"campaign": campaign}))
|
||||
self.faction_selection.setDefaultFactions(campaign)
|
||||
@ -396,9 +404,12 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
|
||||
campaignList.selectionModel().selectionChanged.connect(on_campaign_selected)
|
||||
on_campaign_selected()
|
||||
|
||||
# Docs Link
|
||||
docsText = QtWidgets.QLabel(
|
||||
'<a href="https://github.com/dcs-liberation/dcs_liberation/wiki/Custom-Campaigns"><span style="color:#FFFFFF;">How to create your own theater</span></a>'
|
||||
"<p>Want more campaigns? You can "
|
||||
'<a href="https://github.com/dcs-liberation/dcs_liberation/wiki/Campaign-maintenance"><span style="color:#FFFFFF;">offer to help</span></a>, '
|
||||
'<a href="https://github.com/dcs-liberation/dcs_liberation/wiki/Community-campaigns"><span style="color:#FFFFFF;">play a community campaign</span></a>, '
|
||||
'or <a href="https://github.com/dcs-liberation/dcs_liberation/wiki/Custom-Campaigns"><span style="color:#FFFFFF;">create your own</span></a>.'
|
||||
"</p>"
|
||||
)
|
||||
docsText.setAlignment(Qt.AlignCenter)
|
||||
docsText.setOpenExternalLinks(True)
|
||||
@ -418,7 +429,8 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
|
||||
layout = QtWidgets.QGridLayout()
|
||||
layout.setColumnMinimumWidth(0, 20)
|
||||
layout.addWidget(campaignList, 0, 0, 5, 1)
|
||||
layout.addWidget(docsText, 5, 0, 1, 1)
|
||||
layout.addWidget(show_incompatible_campaigns_checkbox, 5, 0, 1, 1)
|
||||
layout.addWidget(docsText, 6, 0, 1, 1)
|
||||
layout.addWidget(self.campaignMapDescription, 0, 1, 1, 1)
|
||||
layout.addWidget(self.performanceText, 1, 1, 1, 1)
|
||||
layout.addWidget(mapSettingsGroup, 2, 1, 1, 1)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user