Play-/Source/ui_qt/BootableModelProxy.cpp
Jean-Philip Desjardins 5b359051dd Keep path objects as is in Qt bootable UI.
Avoid converting to std::string since this won't work on paths with non-ASCII chars.
2023-03-08 17:40:22 -05:00

53 lines
1.5 KiB
C++

#include "BootableModelProxy.h"
#include "BootableModel.h"
#include "QStringUtils.h"
#include <regex>
BootableModelProxy::BootableModelProxy(QObject* parent)
: QSortFilterProxyModel(parent)
{
}
void BootableModelProxy::setFilterState(const QString& state)
{
if(state == "All")
{
m_state.clear();
}
else
{
m_state = state.toStdString();
}
invalidateFilter();
}
bool BootableModelProxy::filterAcceptsRow(int sourceRow, const QModelIndex& sourceParent) const
{
QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent);
QVariant data = sourceModel()->data(index);
if(data.canConvert<BootableCoverQVariant>())
{
BootableCoverQVariant bootablecover = qvariant_cast<BootableCoverQVariant>(data);
QString key = QString::fromStdString(bootablecover.GetKey());
QString title = QString::fromStdString(bootablecover.GetTitle());
QString path = PathToQString(bootablecover.GetPath());
#if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
QRegularExpression regex = filterRegularExpression();
regex.setPatternOptions(QRegularExpression::CaseInsensitiveOption);
#else
// QRegExp is deprecated in Qt6, while QRegularExpression is recommended over QRegExp since Qt5
// however QRegularExpression is producing incorrect results in Qt5
QRegExp regex = filterRegExp();
regex.setCaseSensitivity(Qt::CaseInsensitive);
#endif
bool res = (key.contains(regex) || title.contains(regex) || path.contains(regex));
if(!m_state.empty())
{
res &= bootablecover.HasState(m_state);
}
return res;
}
return false;
}