aboutsummaryrefslogtreecommitdiff
path: root/launcher/ui/pages/modplatform/ResourcePage.cpp
diff options
context:
space:
mode:
authorflow <flowlnlnln@gmail.com>2022-12-18 15:41:46 -0300
committerflow <flowlnlnln@gmail.com>2023-01-13 16:23:07 -0300
commit45d1319891ce87cc1546a316ad550f892d411633 (patch)
treea1eaabd0e5fc362a82ebfbe93bfe20697608fe1e /launcher/ui/pages/modplatform/ResourcePage.cpp
parent39b7ac90d40eb53d7b88ef99b0fa46fb3e1840b9 (diff)
downloadPrismLauncher-45d1319891ce87cc1546a316ad550f892d411633.tar.gz
PrismLauncher-45d1319891ce87cc1546a316ad550f892d411633.tar.bz2
PrismLauncher-45d1319891ce87cc1546a316ad550f892d411633.zip
refactor(RD): decouple ResourceModels from ResourcePages
This makes it so that we don't need a reference to the parent page in the model. It will be useful once we change the page from a widget-based one to a QML page. It also makes tasks be created in the dialog instead of the page, so that the dialog can also have the necessary information to mark versions as selected / deselected easily. It also makes the task pointers into smart pointers. Signed-off-by: flow <flowlnlnln@gmail.com>
Diffstat (limited to 'launcher/ui/pages/modplatform/ResourcePage.cpp')
-rw-r--r--launcher/ui/pages/modplatform/ResourcePage.cpp29
1 files changed, 17 insertions, 12 deletions
diff --git a/launcher/ui/pages/modplatform/ResourcePage.cpp b/launcher/ui/pages/modplatform/ResourcePage.cpp
index 161b5c22..e04278af 100644
--- a/launcher/ui/pages/modplatform/ResourcePage.cpp
+++ b/launcher/ui/pages/modplatform/ResourcePage.cpp
@@ -103,17 +103,16 @@ void ResourcePage::setSearchTerm(QString term)
m_ui->searchEdit->setText(term);
}
-ModPlatform::IndexedPack ResourcePage::getCurrentPack() const
+bool ResourcePage::setCurrentPack(ModPlatform::IndexedPack pack)
{
- return m_model->data(m_ui->packView->currentIndex(), Qt::UserRole).value<ModPlatform::IndexedPack>();
+ QVariant v;
+ v.setValue(pack);
+ return m_model->setData(m_ui->packView->currentIndex(), v, Qt::UserRole);
}
-bool ResourcePage::isPackSelected(const ModPlatform::IndexedPack& pack, int version) const
+ModPlatform::IndexedPack ResourcePage::getCurrentPack() const
{
- if (version < 0 || !pack.versionsLoaded)
- return m_parent_dialog->isSelected(pack.name);
-
- return m_parent_dialog->isSelected(pack.name, pack.versions[version].fileName);
+ return m_model->data(m_ui->packView->currentIndex(), Qt::UserRole).value<ModPlatform::IndexedPack>();
}
void ResourcePage::updateUi()
@@ -185,7 +184,7 @@ void ResourcePage::updateSelectionButton()
}
m_ui->resourceSelectionButton->setEnabled(true);
- if (!isPackSelected(getCurrentPack(), m_selected_version_index)) {
+ if (!getCurrentPack().isVersionSelected(m_selected_version_index)) {
m_ui->resourceSelectionButton->setText(tr("Select %1 for download").arg(resourceString()));
} else {
m_ui->resourceSelectionButton->setText(tr("Deselect %1 for download").arg(resourceString()));
@@ -256,12 +255,12 @@ void ResourcePage::onVersionSelectionChanged(QString data)
void ResourcePage::addResourceToDialog(ModPlatform::IndexedPack& pack, ModPlatform::IndexedVersion& version)
{
- m_parent_dialog->addResource(pack.name, new ResourceDownloadTask(pack, version, m_parent_dialog->getBaseModel()));
+ m_parent_dialog->addResource(pack, version);
}
-void ResourcePage::removeResourceFromDialog(ModPlatform::IndexedPack& pack, ModPlatform::IndexedVersion&)
+void ResourcePage::removeResourceFromDialog(ModPlatform::IndexedPack& pack, ModPlatform::IndexedVersion& version)
{
- m_parent_dialog->removeResource(pack.name);
+ m_parent_dialog->removeResource(pack, version);
}
void ResourcePage::onResourceSelected()
@@ -270,13 +269,19 @@ void ResourcePage::onResourceSelected()
return;
auto current_pack = getCurrentPack();
+ if (!current_pack.versionsLoaded)
+ return;
auto& version = current_pack.versions[m_selected_version_index];
- if (m_parent_dialog->isSelected(current_pack.name, version.fileName))
+ if (version.is_currently_selected)
removeResourceFromDialog(current_pack, version);
else
addResourceToDialog(current_pack, version);
+ // Save the modified pack (and prevent warning in release build)
+ [[maybe_unused]] bool set = setCurrentPack(current_pack);
+ Q_ASSERT(set);
+
updateSelectionButton();
/* Force redraw on the resource list when the selection changes */