From 081d2f1e5183ff14f129b695a00e2dad819b87eb Mon Sep 17 00:00:00 2001 From: TheKodeToad Date: Thu, 12 Feb 2026 17:47:10 +0000 Subject: [PATCH] Reduce duplication in ResourceFolderModel subclasses Signed-off-by: TheKodeToad --- .../minecraft/mod/DataPackFolderModel.cpp | 60 ++++++++-------- launcher/minecraft/mod/ModFolderModel.cpp | 68 ++++++++----------- .../minecraft/mod/ResourcePackFolderModel.cpp | 63 ++++++++--------- .../minecraft/mod/TexturePackFolderModel.cpp | 68 ++++++++----------- .../mod/tasks/ResourceFolderLoadTask.h | 4 +- 5 files changed, 116 insertions(+), 147 deletions(-) diff --git a/launcher/minecraft/mod/DataPackFolderModel.cpp b/launcher/minecraft/mod/DataPackFolderModel.cpp index 7abab7a06..a975b742e 100644 --- a/launcher/minecraft/mod/DataPackFolderModel.cpp +++ b/launcher/minecraft/mod/DataPackFolderModel.cpp @@ -66,8 +66,6 @@ QVariant DataPackFolderModel::data(const QModelIndex& index, int role) const switch (role) { case Qt::DisplayRole: switch (column) { - case NameColumn: - return m_resources[row]->name(); case PackFormatColumn: { auto& resource = at(row); auto pack_format = resource.packFormat(); @@ -81,53 +79,51 @@ QVariant DataPackFolderModel::data(const QModelIndex& index, int role) const return QString("%1 (%2 - %3)") .arg(QString::number(pack_format), version_bounds.first.toString(), version_bounds.second.toString()); } - case DateColumn: - return m_resources[row]->dateTimeChanged(); - - default: - return {}; } + break; case Qt::DecorationRole: { - if (column == NameColumn && (at(row).isSymLinkUnder(instDirPath()) || at(row).isMoreThanOneHardLink())) - return QIcon::fromTheme("status-yellow"); if (column == ImageColumn) { return at(row).image({ 32, 32 }, Qt::AspectRatioMode::KeepAspectRatioByExpanding); } - return {}; + break; } case Qt::ToolTipRole: { if (column == PackFormatColumn) { //: The string being explained by this is in the format: ID (Lower version - Upper version) return tr("The data pack format ID, as well as the Minecraft versions it was designed for."); } - if (column == NameColumn) { - if (at(row).isSymLinkUnder(instDirPath())) { - return m_resources[row]->internal_id() + - tr("\nWarning: This resource is symbolically linked from elsewhere. Editing it will also change the original." - "\nCanonical Path: %1") - .arg(at(row).fileinfo().canonicalFilePath()); - ; - } - if (at(row).isMoreThanOneHardLink()) { - return m_resources[row]->internal_id() + - tr("\nWarning: This resource is hard linked elsewhere. Editing it will also change the original."); - } - } - return m_resources[row]->internal_id(); + break; } case Qt::SizeHintRole: if (column == ImageColumn) { return QSize(32, 32); } - return {}; - case Qt::CheckStateRole: - if (column == ActiveColumn) - return at(row).enabled() ? Qt::Checked : Qt::Unchecked; - else - return {}; - default: - return {}; + break; } + + // map the columns to the base equivilents + QModelIndex mappedIndex; + switch (column) { + case ActiveColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::ActiveColumn); + break; + case NameColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::NameColumn); + break; + case DateColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::DateColumn); + break; + case ProviderColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::ProviderColumn); + break; + // FIXME: there is no size column due to an oversight + } + + if (mappedIndex.isValid()) { + return ResourceFolderModel::data(mappedIndex, role); + } + + return {}; } QVariant DataPackFolderModel::headerData(int section, [[maybe_unused]] Qt::Orientation orientation, int role) const diff --git a/launcher/minecraft/mod/ModFolderModel.cpp b/launcher/minecraft/mod/ModFolderModel.cpp index e7bb13128..cf3219918 100644 --- a/launcher/minecraft/mod/ModFolderModel.cpp +++ b/launcher/minecraft/mod/ModFolderModel.cpp @@ -90,24 +90,15 @@ QVariant ModFolderModel::data(const QModelIndex& index, int role) const switch (role) { case Qt::DisplayRole: switch (column) { - case NameColumn: - return m_resources[row]->name(); case VersionColumn: { switch (at(row).type()) { case ResourceType::FOLDER: return tr("Folder"); case ResourceType::SINGLEFILE: return tr("File"); - default: - break; } return at(row).version(); } - case DateColumn: - return at(row).dateTimeChanged(); - case ProviderColumn: { - return at(row).provider(); - } case SideColumn: { return at(row).side(); } @@ -120,53 +111,54 @@ QVariant ModFolderModel::data(const QModelIndex& index, int role) const case ReleaseTypeColumn: { return at(row).releaseType(); } - case SizeColumn: { - return at(row).sizeStr(); - } case RequiredByColumn: { return at(row).requiredByCount(); } case RequiresColumn: { return at(row).requiresCount(); } - default: - return QVariant(); } - - case Qt::ToolTipRole: - if (column == NameColumn) { - if (at(row).isSymLinkUnder(instDirPath())) { - return m_resources[row]->internal_id() + - tr("\nWarning: This resource is symbolically linked from elsewhere. Editing it will also change the original." - "\nCanonical Path: %1") - .arg(at(row).fileinfo().canonicalFilePath()); - } - if (at(row).isMoreThanOneHardLink()) { - return m_resources[row]->internal_id() + - tr("\nWarning: This resource is hard linked elsewhere. Editing it will also change the original."); - } - } - return m_resources[row]->internal_id(); + break; case Qt::DecorationRole: { - if (column == NameColumn && (at(row).isSymLinkUnder(instDirPath()) || at(row).isMoreThanOneHardLink())) - return QIcon::fromTheme("status-yellow"); if (column == ImageColumn) { return at(row).icon({ 32, 32 }, Qt::AspectRatioMode::KeepAspectRatioByExpanding); } - return {}; + break; } case Qt::SizeHintRole: if (column == ImageColumn) { return QSize(32, 32); } - return {}; - case Qt::CheckStateRole: - if (column == ActiveColumn) - return at(row).enabled() ? Qt::Checked : Qt::Unchecked; - return QVariant(); + break; default: - return QVariant(); + break; } + + // map the columns to the base equivilents + QModelIndex mappedIndex; + switch (column) { + case ActiveColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::ActiveColumn); + break; + case NameColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::NameColumn); + break; + case DateColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::DateColumn); + break; + case ProviderColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::ProviderColumn); + break; + case SizeColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::SizeColumn); + break; + } + + if (mappedIndex.isValid()) { + return ResourceFolderModel::data(mappedIndex, role); + } + + return {}; } QVariant ModFolderModel::headerData(int section, [[maybe_unused]] Qt::Orientation orientation, int role) const diff --git a/launcher/minecraft/mod/ResourcePackFolderModel.cpp b/launcher/minecraft/mod/ResourcePackFolderModel.cpp index 5680f4c2d..c83f90e2a 100644 --- a/launcher/minecraft/mod/ResourcePackFolderModel.cpp +++ b/launcher/minecraft/mod/ResourcePackFolderModel.cpp @@ -67,8 +67,6 @@ QVariant ResourcePackFolderModel::data(const QModelIndex& index, int role) const switch (role) { case Qt::DisplayRole: switch (column) { - case NameColumn: - return m_resources[row]->name(); case PackFormatColumn: { auto& resource = at(row); auto pack_format = resource.packFormat(); @@ -82,55 +80,52 @@ QVariant ResourcePackFolderModel::data(const QModelIndex& index, int role) const return QString("%1 (%2 - %3)") .arg(QString::number(pack_format), version_bounds.first.toString(), version_bounds.second.toString()); } - case DateColumn: - return m_resources[row]->dateTimeChanged(); - case ProviderColumn: - return m_resources[row]->provider(); - case SizeColumn: - return m_resources[row]->sizeStr(); - default: - return {}; } case Qt::DecorationRole: { - if (column == NameColumn && (at(row).isSymLinkUnder(instDirPath()) || at(row).isMoreThanOneHardLink())) - return QIcon::fromTheme("status-yellow"); if (column == ImageColumn) { return at(row).image({ 32, 32 }, Qt::AspectRatioMode::KeepAspectRatioByExpanding); } - return {}; + break; } case Qt::ToolTipRole: { if (column == PackFormatColumn) { //: The string being explained by this is in the format: ID (Lower version - Upper version) return tr("The resource pack format ID, as well as the Minecraft versions it was designed for."); } - if (column == NameColumn) { - if (at(row).isSymLinkUnder(instDirPath())) { - return m_resources[row]->internal_id() + - tr("\nWarning: This resource is symbolically linked from elsewhere. Editing it will also change the original." - "\nCanonical Path: %1") - .arg(at(row).fileinfo().canonicalFilePath()); - ; - } - if (at(row).isMoreThanOneHardLink()) { - return m_resources[row]->internal_id() + - tr("\nWarning: This resource is hard linked elsewhere. Editing it will also change the original."); - } - } - return m_resources[row]->internal_id(); + break; } case Qt::SizeHintRole: if (column == ImageColumn) { return QSize(32, 32); } - return {}; - case Qt::CheckStateRole: - if (column == ActiveColumn) - return at(row).enabled() ? Qt::Checked : Qt::Unchecked; - return {}; - default: - return {}; + break; } + + // map the columns to the base equivilents + QModelIndex mappedIndex; + switch (column) { + case ActiveColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::ActiveColumn); + break; + case NameColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::NameColumn); + break; + case DateColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::DateColumn); + break; + case ProviderColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::ProviderColumn); + break; + case SizeColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::SizeColumn); + break; + } + + if (mappedIndex.isValid()) { + return ResourceFolderModel::data(mappedIndex, role); + } + + return {}; } QVariant ResourcePackFolderModel::headerData(int section, [[maybe_unused]] Qt::Orientation orientation, int role) const diff --git a/launcher/minecraft/mod/TexturePackFolderModel.cpp b/launcher/minecraft/mod/TexturePackFolderModel.cpp index 57c5f8ee9..e5f3eef88 100644 --- a/launcher/minecraft/mod/TexturePackFolderModel.cpp +++ b/launcher/minecraft/mod/TexturePackFolderModel.cpp @@ -63,56 +63,44 @@ QVariant TexturePackFolderModel::data(const QModelIndex& index, int role) const int column = index.column(); switch (role) { - case Qt::DisplayRole: - switch (column) { - case NameColumn: - return m_resources[row]->name(); - case DateColumn: - return m_resources[row]->dateTimeChanged(); - case ProviderColumn: - return m_resources[row]->provider(); - case SizeColumn: - return m_resources[row]->sizeStr(); - default: - return {}; - } - case Qt::ToolTipRole: - if (column == NameColumn) { - if (at(row).isSymLinkUnder(instDirPath())) { - return m_resources[row]->internal_id() + - tr("\nWarning: This resource is symbolically linked from elsewhere. Editing it will also change the original." - "\nCanonical Path: %1") - .arg(at(row).fileinfo().canonicalFilePath()); - ; - } - if (at(row).isMoreThanOneHardLink()) { - return m_resources[row]->internal_id() + - tr("\nWarning: This resource is hard linked elsewhere. Editing it will also change the original."); - } - } - - return m_resources[row]->internal_id(); case Qt::DecorationRole: { - if (column == NameColumn && (at(row).isSymLinkUnder(instDirPath()) || at(row).isMoreThanOneHardLink())) - return QIcon::fromTheme("status-yellow"); if (column == ImageColumn) { return at(row).image({ 32, 32 }, Qt::AspectRatioMode::KeepAspectRatioByExpanding); } - return {}; + break; } case Qt::SizeHintRole: if (column == ImageColumn) { return QSize(32, 32); } - return {}; - case Qt::CheckStateRole: - if (column == ActiveColumn) { - return m_resources[row]->enabled() ? Qt::Checked : Qt::Unchecked; - } - return {}; - default: - return {}; + break; } + + // map the columns to the base equivilents + QModelIndex mappedIndex; + switch (column) { + case ActiveColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::ActiveColumn); + break; + case NameColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::NameColumn); + break; + case DateColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::DateColumn); + break; + case ProviderColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::ProviderColumn); + break; + case SizeColumn: + mappedIndex = index.siblingAtColumn(ResourceFolderModel::SizeColumn); + break; + } + + if (mappedIndex.isValid()) { + return ResourceFolderModel::data(mappedIndex, role); + } + + return {}; } QVariant TexturePackFolderModel::headerData(int section, [[maybe_unused]] Qt::Orientation orientation, int role) const diff --git a/launcher/minecraft/mod/tasks/ResourceFolderLoadTask.h b/launcher/minecraft/mod/tasks/ResourceFolderLoadTask.h index 7f69a1841..7c872c13d 100644 --- a/launcher/minecraft/mod/tasks/ResourceFolderLoadTask.h +++ b/launcher/minecraft/mod/tasks/ResourceFolderLoadTask.h @@ -41,11 +41,9 @@ #include #include #include -#include "minecraft/mod/Resource.h" +#include "minecraft/mod/Mod.h" #include "tasks/Task.h" -class BaseInstance; - class ResourceFolderLoadTask : public Task { Q_OBJECT public: