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:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user