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(); return !mod.isInstalled();
case ModFilterMask::INSTALLED: case ModFilterMask::INSTALLED:
return mod.isInstalled(); return mod.isInstalled();
case ModFilterMask::UPDATEABLE: case ModFilterMask::UPDATABLE:
return mod.isUpdateAvailable(); return mod.isUpdateAvailable();
case ModFilterMask::ENABLED: case ModFilterMask::ENABLED:
return mod.isInstalled() && base->model->isModEnabled(modID); return mod.isInstalled() && base->model->isModEnabled(modID);
@@ -320,6 +320,31 @@ bool CModFilterModel::filterAcceptsRow(int source_row, const QModelIndex & sourc
return false; 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) CModFilterModel::CModFilterModel(ModStateItemModel * model, QObject * parent)
: QSortFilterProxyModel(parent), base(model), filterMask(ModFilterMask::ALL) : QSortFilterProxyModel(parent), base(model), filterMask(ModFilterMask::ALL)
{ {

View File

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