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