1
0
mirror of https://github.com/vcmi/vcmi.git synced 2025-11-23 22:37:55 +02:00

Merge pull request #6264 from kambala-decapitator/launcher-sort-enabled

[launcher] fix sorting mods by the Enabled column
This commit is contained in:
Ivan Savenko
2025-11-01 21:46:35 +02:00
committed by GitHub
2 changed files with 29 additions and 2 deletions

View File

@@ -276,7 +276,7 @@ bool CModFilterModel::filterMatchesCategory(const QModelIndex & source) const
return !mod.isInstalled();
case ModFilterMask::INSTALLED:
return mod.isInstalled();
case ModFilterMask::UPDATEABLE:
case ModFilterMask::UPDATABLE:
return mod.isUpdateAvailable();
case ModFilterMask::ENABLED:
return mod.isInstalled() && base->model->isModEnabled(modID);
@@ -320,6 +320,31 @@ bool CModFilterModel::filterAcceptsRow(int source_row, const QModelIndex & sourc
return false;
}
bool CModFilterModel::lessThan(const QModelIndex & source_left, const QModelIndex & source_right) const
{
if(source_left.column() != ModFields::STATUS_ENABLED)
return QSortFilterProxyModel::lessThan(source_left, source_right);
const auto leftMod = base->model->getMod(base->modIndexToName(source_left));
const auto rightMod = base->model->getMod(base->modIndexToName(source_right));
const auto isLeftEnabled = base->model->isModEnabled(leftMod.getID());
const auto isRightEnabled = base->model->isModEnabled(rightMod.getID());
if(!isLeftEnabled && isRightEnabled)
return true;
if(isLeftEnabled && !isRightEnabled)
return false;
const auto isLeftInstalled = leftMod.isInstalled();
const auto isRightInstalled = rightMod.isInstalled();
if(!isLeftInstalled && isRightInstalled)
return true;
if(isLeftInstalled && !isRightInstalled)
return false;
return QSortFilterProxyModel::lessThan(source_left.siblingAtColumn(ModFields::NAME), source_right.siblingAtColumn(ModFields::NAME));
}
CModFilterModel::CModFilterModel(ModStateItemModel * model, QObject * parent)
: QSortFilterProxyModel(parent), base(model), filterMask(ModFilterMask::ALL)
{

View File

@@ -32,7 +32,7 @@ enum class ModFilterMask : uint8_t
ALL,
AVAILABLE,
INSTALLED,
UPDATEABLE,
UPDATABLE,
ENABLED,
DISABLED
};
@@ -97,6 +97,8 @@ class CModFilterModel final : public QSortFilterProxyModel
bool filterAcceptsRow(int source_row, const QModelIndex & source_parent) const override;
bool lessThan(const QModelIndex & source_left, const QModelIndex & source_right) const override;
public:
void setTypeFilter(ModFilterMask filterMask);