summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorspycrab <spycrab@users.noreply.github.com>2019-02-11 11:09:43 +0100
committerGitHub <noreply@github.com>2019-02-11 11:09:43 +0100
commiteb11d045d7263e79bbf51049500a2ffd12bfb09b (patch)
tree1f036c316773796d1b1c6e6aee2ca7837da90bfa /Source/Core
parent4d85bb2d18383f6a1a8e8c532dfc78290f8c0b17 (diff)
parentf86b34ceb9958ebf64a82edebec30ac2a2a5c935 (diff)
Merge pull request #7790 from spycrab/rp_fixes
ResourcePacks: Fix various bugs
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/DolphinQt/ResourcePackManager.cpp30
-rw-r--r--Source/Core/DolphinQt/ResourcePackManager.h2
-rw-r--r--Source/Core/UICommon/ResourcePack/Manager.cpp3
-rw-r--r--Source/Core/UICommon/ResourcePack/ResourcePack.cpp10
4 files changed, 30 insertions, 15 deletions
diff --git a/Source/Core/DolphinQt/ResourcePackManager.cpp b/Source/Core/DolphinQt/ResourcePackManager.cpp
index 2f7287afd0..719a4257b0 100644
--- a/Source/Core/DolphinQt/ResourcePackManager.cpp
+++ b/Source/Core/DolphinQt/ResourcePackManager.cpp
@@ -160,6 +160,12 @@ void ResourcePackManager::RepopulateTable()
SelectionChanged();
}
+// Revert the indicies as to be more intuitive for users
+int ResourcePackManager::GetResourcePackIndex(QTableWidgetItem* item) const
+{
+ return m_table_widget->rowCount() - 1 - item->row();
+}
+
void ResourcePackManager::Change()
{
auto items = m_table_widget->selectedItems();
@@ -167,10 +173,14 @@ void ResourcePackManager::Change()
if (items.empty())
return;
- if (ResourcePack::IsInstalled(ResourcePack::GetPacks()[items[0]->row()]))
+ if (ResourcePack::IsInstalled(ResourcePack::GetPacks()[GetResourcePackIndex(items[0])]))
+ {
Uninstall();
+ }
else
+ {
Install();
+ }
}
void ResourcePackManager::Install()
@@ -180,7 +190,7 @@ void ResourcePackManager::Install()
if (items.empty())
return;
- auto& item = ResourcePack::GetPacks()[m_table_widget->rowCount() - 1 - items[0]->row()];
+ auto& item = ResourcePack::GetPacks()[GetResourcePackIndex(items[0])];
bool success = item.Install(File::GetUserPath(D_USER_IDX));
@@ -201,7 +211,7 @@ void ResourcePackManager::Uninstall()
if (items.empty())
return;
- auto& item = ResourcePack::GetPacks()[m_table_widget->rowCount() - 1 - items[0]->row()];
+ auto& item = ResourcePack::GetPacks()[GetResourcePackIndex(items[0])];
bool success = item.Uninstall(File::GetUserPath(D_USER_IDX));
@@ -232,8 +242,7 @@ void ResourcePackManager::Remove()
return;
Uninstall();
- File::Delete(
- ResourcePack::GetPacks()[m_table_widget->rowCount() - 1 - items[0]->row()].GetPath());
+ File::Delete(ResourcePack::GetPacks()[GetResourcePackIndex(items[0])].GetPath());
RepopulateTable();
}
@@ -244,7 +253,7 @@ void ResourcePackManager::PriorityDown()
if (items.empty())
return;
- int row = m_table_widget->rowCount() - 1 - items[0]->row();
+ auto row = GetResourcePackIndex(items[0]);
if (items[0]->row() >= m_table_widget->rowCount())
return;
@@ -269,7 +278,7 @@ void ResourcePackManager::PriorityUp()
if (items.empty())
return;
- int row = m_table_widget->rowCount() - 1 - items[0]->row();
+ auto row = GetResourcePackIndex(items[0]);
if (items[0]->row() == 0)
return;
@@ -301,9 +310,10 @@ void ResourcePackManager::SelectionChanged()
if (has_selection)
{
- m_change_button->setText(ResourcePack::IsInstalled(ResourcePack::GetPacks()[items[0]->row()]) ?
- tr("Uninstall") :
- tr("Install"));
+ m_change_button->setText(
+ ResourcePack::IsInstalled(ResourcePack::GetPacks()[GetResourcePackIndex(items[0])]) ?
+ tr("Uninstall") :
+ tr("Install"));
}
for (auto* item : {m_change_button, m_remove_button})
diff --git a/Source/Core/DolphinQt/ResourcePackManager.h b/Source/Core/DolphinQt/ResourcePackManager.h
index 8d0d848f2c..067f23157d 100644
--- a/Source/Core/DolphinQt/ResourcePackManager.h
+++ b/Source/Core/DolphinQt/ResourcePackManager.h
@@ -31,6 +31,8 @@ private:
void SelectionChanged();
void ItemDoubleClicked(QTableWidgetItem* item);
+ int GetResourcePackIndex(QTableWidgetItem* item) const;
+
QPushButton* m_open_directory_button;
QPushButton* m_change_button;
QPushButton* m_remove_button;
diff --git a/Source/Core/UICommon/ResourcePack/Manager.cpp b/Source/Core/UICommon/ResourcePack/Manager.cpp
index 03456d3428..a95d60a280 100644
--- a/Source/Core/UICommon/ResourcePack/Manager.cpp
+++ b/Source/Core/UICommon/ResourcePack/Manager.cpp
@@ -60,7 +60,8 @@ bool Init()
continue;
}
- order->Set(packs[i].GetManifest()->GetID(), static_cast<u64>(i));
+ if (i < packs.size())
+ order->Set(packs[i].GetManifest()->GetID(), static_cast<u64>(i));
}
file.Save(packs_path);
diff --git a/Source/Core/UICommon/ResourcePack/ResourcePack.cpp b/Source/Core/UICommon/ResourcePack/ResourcePack.cpp
index 92282626d5..225714c1f4 100644
--- a/Source/Core/UICommon/ResourcePack/ResourcePack.cpp
+++ b/Source/Core/UICommon/ResourcePack/ResourcePack.cpp
@@ -265,8 +265,9 @@ bool ResourcePack::Uninstall(const std::string& path)
// Check if a higher priority pack already provides a given texture, don't delete it
for (const auto& pack : GetHigherPriorityPacks(*this))
{
- if (std::find(pack->GetTextures().begin(), pack->GetTextures().end(), texture) !=
- pack->GetTextures().end())
+ if (::ResourcePack::IsInstalled(*pack) &&
+ std::find(pack->GetTextures().begin(), pack->GetTextures().end(), texture) !=
+ pack->GetTextures().end())
{
provided_by_other_pack = true;
break;
@@ -279,8 +280,9 @@ bool ResourcePack::Uninstall(const std::string& path)
// Check if a lower priority pack provides a given texture - if so, install it.
for (auto& pack : lower)
{
- if (std::find(pack->GetTextures().rbegin(), pack->GetTextures().rend(), texture) !=
- pack->GetTextures().rend())
+ if (::ResourcePack::IsInstalled(*pack) &&
+ std::find(pack->GetTextures().rbegin(), pack->GetTextures().rend(), texture) !=
+ pack->GetTextures().rend())
{
pack->Install(path);