Hide incompatible campaigns by default.

https://github.com/dcs-liberation/dcs_liberation/issues/1178
This commit is contained in:
Dan Albert 2021-06-05 15:07:25 -07:00
parent 3d4415d5d2
commit 1ea98a6ed1
2 changed files with 40 additions and 29 deletions

View File

@ -8,7 +8,7 @@ from typing import Any, Dict, List, Union, Tuple
import packaging.version import packaging.version
from PySide2 import QtGui from PySide2 import QtGui
from PySide2.QtCore import QItemSelectionModel from PySide2.QtCore import QItemSelectionModel, QModelIndex, Qt
from PySide2.QtGui import QStandardItem, QStandardItemModel from PySide2.QtGui import QStandardItem, QStandardItemModel
from PySide2.QtWidgets import QAbstractItemView, QListView from PySide2.QtWidgets import QAbstractItemView, QListView
@ -116,6 +116,7 @@ def load_campaigns() -> List[Campaign]:
class QCampaignItem(QStandardItem): class QCampaignItem(QStandardItem):
def __init__(self, campaign: Campaign) -> None: def __init__(self, campaign: Campaign) -> None:
super(QCampaignItem, self).__init__() super(QCampaignItem, self).__init__()
self.setData(campaign, QCampaignList.CampaignRole)
self.setIcon(QtGui.QIcon(CONST.ICONS[campaign.icon_name])) self.setIcon(QtGui.QIcon(CONST.ICONS[campaign.icon_name]))
self.setEditable(False) self.setEditable(False)
if campaign.is_compatible: if campaign.is_compatible:
@ -126,31 +127,29 @@ class QCampaignItem(QStandardItem):
class QCampaignList(QListView): 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__() super(QCampaignList, self).__init__()
self.model = QStandardItemModel(self) self.campaign_model = QStandardItemModel(self)
self.setModel(self.model) self.setModel(self.campaign_model)
self.setMinimumWidth(250) self.setMinimumWidth(250)
self.setMinimumHeight(350) self.setMinimumHeight(350)
self.campaigns = [] self.campaigns = campaigns
self.setSelectionBehavior(QAbstractItemView.SelectItems) self.setSelectionBehavior(QAbstractItemView.SelectItems)
self.setup_content(campaigns) self.setup_content(show_incompatible)
def setup_content(self, campaigns: List[Campaign]) -> None: @property
for campaign in campaigns: def selected_campaign(self) -> Campaign:
self.campaigns.append(campaign) return self.currentIndex().data(QCampaignList.CampaignRole)
item = QCampaignItem(campaign)
self.model.appendRow(item)
self.setSelectedCampaign(0)
self.repaint()
def setSelectedCampaign(self, row): def setup_content(self, show_incompatible: bool) -> None:
self.selectionModel().clearSelection() self.campaign_model.clear()
index = self.model.index(row, 0) for campaign in self.campaigns:
if not index.isValid(): if show_incompatible or campaign.is_compatible:
index = self.model.index(0, 0) item = QCampaignItem(campaign)
self.selectionModel().setCurrentIndex(index, QItemSelectionModel.Select) self.campaign_model.appendRow(item)
self.repaint()
def clear_layout(self): self.selectionModel().setCurrentIndex(
self.model.removeRows(0, self.model.rowCount()) self.campaign_model.index(0, 0, QModelIndex()), QItemSelectionModel.Select
)

View File

@ -6,7 +6,7 @@ from typing import List
from PySide2 import QtGui, QtWidgets from PySide2 import QtGui, QtWidgets
from PySide2.QtCore import QItemSelectionModel, QPoint, Qt, QDate 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 jinja2 import Environment, FileSystemLoader, select_autoescape
from game import db from game import db
@ -319,7 +319,16 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
) )
# List of campaigns # 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) self.registerField("selectedCampaign", campaignList)
# Faction description # Faction description
@ -380,8 +389,7 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
template_perf = jinja_env.get_template( template_perf = jinja_env.get_template(
"campaign_performance_template_EN.j2" "campaign_performance_template_EN.j2"
) )
index = campaignList.selectionModel().currentIndex().row() campaign = campaignList.selected_campaign
campaign = campaignList.campaigns[index]
self.setField("selectedCampaign", campaign) self.setField("selectedCampaign", campaign)
self.campaignMapDescription.setText(template.render({"campaign": campaign})) self.campaignMapDescription.setText(template.render({"campaign": campaign}))
self.faction_selection.setDefaultFactions(campaign) self.faction_selection.setDefaultFactions(campaign)
@ -396,9 +404,12 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
campaignList.selectionModel().selectionChanged.connect(on_campaign_selected) campaignList.selectionModel().selectionChanged.connect(on_campaign_selected)
on_campaign_selected() on_campaign_selected()
# Docs Link
docsText = QtWidgets.QLabel( 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.setAlignment(Qt.AlignCenter)
docsText.setOpenExternalLinks(True) docsText.setOpenExternalLinks(True)
@ -418,7 +429,8 @@ class TheaterConfiguration(QtWidgets.QWizardPage):
layout = QtWidgets.QGridLayout() layout = QtWidgets.QGridLayout()
layout.setColumnMinimumWidth(0, 20) layout.setColumnMinimumWidth(0, 20)
layout.addWidget(campaignList, 0, 0, 5, 1) 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.campaignMapDescription, 0, 1, 1, 1)
layout.addWidget(self.performanceText, 1, 1, 1, 1) layout.addWidget(self.performanceText, 1, 1, 1, 1)
layout.addWidget(mapSettingsGroup, 2, 1, 1, 1) layout.addWidget(mapSettingsGroup, 2, 1, 1, 1)