diff options
Diffstat (limited to 'launcher/VersionProxyModel.cpp')
-rw-r--r-- | launcher/VersionProxyModel.cpp | 221 |
1 files changed, 85 insertions, 136 deletions
diff --git a/launcher/VersionProxyModel.cpp b/launcher/VersionProxyModel.cpp index 63a43465..6e0333e4 100644 --- a/launcher/VersionProxyModel.cpp +++ b/launcher/VersionProxyModel.cpp @@ -35,53 +35,48 @@ */ #include "VersionProxyModel.h" -#include "Application.h" -#include <QSortFilterProxyModel> -#include <QPixmapCache> #include <Version.h> #include <meta/VersionList.h> +#include <QPixmapCache> +#include <QSortFilterProxyModel> +#include "Application.h" -class VersionFilterModel : public QSortFilterProxyModel -{ +class VersionFilterModel : public QSortFilterProxyModel { Q_OBJECT -public: - VersionFilterModel(VersionProxyModel *parent) : QSortFilterProxyModel(parent) + public: + VersionFilterModel(VersionProxyModel* parent) : QSortFilterProxyModel(parent) { m_parent = parent; setSortRole(BaseVersionList::SortRole); sort(0, Qt::DescendingOrder); } - bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const + bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const { - const auto &filters = m_parent->filters(); - const QString &search = m_parent->search(); + const auto& filters = m_parent->filters(); + const QString& search = m_parent->search(); const QModelIndex idx = sourceModel()->index(source_row, 0, source_parent); if (!search.isEmpty() && !sourceModel()->data(idx, BaseVersionList::VersionRole).toString().contains(search, Qt::CaseInsensitive)) return false; - for (auto it = filters.begin(); it != filters.end(); ++it) - { + for (auto it = filters.begin(); it != filters.end(); ++it) { auto data = sourceModel()->data(idx, it.key()); auto match = data.toString(); - if(!it.value()->accepts(match)) - { + if (!it.value()->accepts(match)) { return false; } } return true; } - void filterChanged() - { - invalidateFilter(); - } -private: - VersionProxyModel *m_parent; + void filterChanged() { invalidateFilter(); } + + private: + VersionProxyModel* m_parent; }; -VersionProxyModel::VersionProxyModel(QObject *parent) : QAbstractProxyModel(parent) +VersionProxyModel::VersionProxyModel(QObject* parent) : QAbstractProxyModel(parent) { filterModel = new VersionFilterModel(this); connect(filterModel, &QAbstractItemModel::dataChanged, this, &VersionProxyModel::sourceDataChanged); @@ -104,19 +99,17 @@ VersionProxyModel::VersionProxyModel(QObject *parent) : QAbstractProxyModel(pare QVariant VersionProxyModel::headerData(int section, Qt::Orientation orientation, int role) const { - if(section < 0 || section >= m_columns.size()) + if (section < 0 || section >= m_columns.size()) return QVariant(); - if(orientation != Qt::Horizontal) + if (orientation != Qt::Horizontal) return QVariant(); auto column = m_columns[section]; - if(role == Qt::DisplayRole) - { - switch(column) - { + if (role == Qt::DisplayRole) { + switch (column) { case Name: return tr("Version"); case ParentVersion: - return tr("Minecraft"); //FIXME: this should come from metadata + return tr("Minecraft"); // FIXME: this should come from metadata case Branch: return tr("Branch"); case Type: @@ -128,15 +121,12 @@ QVariant VersionProxyModel::headerData(int section, Qt::Orientation orientation, case Time: return tr("Released"); } - } - else if(role == Qt::ToolTipRole) - { - switch(column) - { + } else if (role == Qt::ToolTipRole) { + switch (column) { case Name: return tr("The name of the version."); case ParentVersion: - return tr("Minecraft version"); //FIXME: this should come from metadata + return tr("Minecraft version"); // FIXME: this should come from metadata case Branch: return tr("The version's branch"); case Type: @@ -152,25 +142,19 @@ QVariant VersionProxyModel::headerData(int section, Qt::Orientation orientation, return QVariant(); } -QVariant VersionProxyModel::data(const QModelIndex &index, int role) const +QVariant VersionProxyModel::data(const QModelIndex& index, int role) const { - if(!index.isValid()) - { + if (!index.isValid()) { return QVariant(); } auto column = m_columns[index.column()]; auto parentIndex = mapToSource(index); - switch(role) - { - case Qt::DisplayRole: - { - switch(column) - { - case Name: - { + switch (role) { + case Qt::DisplayRole: { + switch (column) { + case Name: { QString version = sourceModel()->data(parentIndex, BaseVersionList::VersionRole).toString(); - if(version == m_currentVersion) - { + if (version == m_currentVersion) { return tr("%1 (installed)").arg(version); } return version; @@ -191,18 +175,14 @@ QVariant VersionProxyModel::data(const QModelIndex &index, int role) const return QVariant(); } } - case Qt::ToolTipRole: - { - if(column == Name && hasRecommended) - { + case Qt::ToolTipRole: { + if (column == Name && hasRecommended) { auto value = sourceModel()->data(parentIndex, BaseVersionList::RecommendedRole); - if(value.toBool()) - { + if (value.toBool()) { return tr("Recommended"); - } else if(hasLatest) { + } else if (hasLatest) { auto value = sourceModel()->data(parentIndex, BaseVersionList::LatestRole); - if(value.toBool()) - { + if (value.toBool()) { return tr("Latest"); } } @@ -210,32 +190,23 @@ QVariant VersionProxyModel::data(const QModelIndex &index, int role) const return sourceModel()->data(parentIndex, BaseVersionList::VersionIdRole); } } - case Qt::DecorationRole: - { - switch(column) - { - case Name: - { - if(hasRecommended) - { + case Qt::DecorationRole: { + switch (column) { + case Name: { + if (hasRecommended) { auto value = sourceModel()->data(parentIndex, BaseVersionList::RecommendedRole); - if(value.toBool()) - { + if (value.toBool()) { return APPLICATION->getThemedIcon("star"); - } - else if(hasLatest) - { + } else if (hasLatest) { auto value = sourceModel()->data(parentIndex, BaseVersionList::LatestRole); - if(value.toBool()) - { + if (value.toBool()) { return APPLICATION->getThemedIcon("bug"); } } QPixmap pixmap; QPixmapCache::find("placeholder", &pixmap); - if(!pixmap) - { - QPixmap px(16,16); + if (!pixmap) { + QPixmap px(16, 16); px.fill(Qt::transparent); QPixmapCache::insert("placeholder", px); return px; @@ -243,16 +214,13 @@ QVariant VersionProxyModel::data(const QModelIndex &index, int role) const return pixmap; } } - default: - { + default: { return QVariant(); } } } - default: - { - if(roles.contains((BaseVersionList::ModelRoles)role)) - { + default: { + if (roles.contains((BaseVersionList::ModelRoles)role)) { return sourceModel()->data(parentIndex, role); } return QVariant(); @@ -260,61 +228,56 @@ QVariant VersionProxyModel::data(const QModelIndex &index, int role) const } } -QModelIndex VersionProxyModel::parent(const QModelIndex &child) const +QModelIndex VersionProxyModel::parent(const QModelIndex& child) const { return QModelIndex(); } -QModelIndex VersionProxyModel::mapFromSource(const QModelIndex &sourceIndex) const +QModelIndex VersionProxyModel::mapFromSource(const QModelIndex& sourceIndex) const { - if(sourceIndex.isValid()) - { + if (sourceIndex.isValid()) { return index(sourceIndex.row(), 0); } return QModelIndex(); } -QModelIndex VersionProxyModel::mapToSource(const QModelIndex &proxyIndex) const +QModelIndex VersionProxyModel::mapToSource(const QModelIndex& proxyIndex) const { - if(proxyIndex.isValid()) - { + if (proxyIndex.isValid()) { return sourceModel()->index(proxyIndex.row(), 0); } return QModelIndex(); } -QModelIndex VersionProxyModel::index(int row, int column, const QModelIndex &parent) const +QModelIndex VersionProxyModel::index(int row, int column, const QModelIndex& parent) const { // no trees here... shoo - if(parent.isValid()) - { + if (parent.isValid()) { return QModelIndex(); } - if(row < 0 || row >= sourceModel()->rowCount()) + if (row < 0 || row >= sourceModel()->rowCount()) return QModelIndex(); - if(column < 0 || column >= columnCount()) + if (column < 0 || column >= columnCount()) return QModelIndex(); return QAbstractItemModel::createIndex(row, column); } -int VersionProxyModel::columnCount(const QModelIndex &parent) const +int VersionProxyModel::columnCount(const QModelIndex& parent) const { return parent.isValid() ? 0 : m_columns.size(); } -int VersionProxyModel::rowCount(const QModelIndex &parent) const +int VersionProxyModel::rowCount(const QModelIndex& parent) const { - if(sourceModel()) - { + if (sourceModel()) { return sourceModel()->rowCount(parent); } return 0; } -void VersionProxyModel::sourceDataChanged(const QModelIndex &source_top_left, - const QModelIndex &source_bottom_right) +void VersionProxyModel::sourceDataChanged(const QModelIndex& source_top_left, const QModelIndex& source_bottom_right) { - if(source_top_left.parent() != source_bottom_right.parent()) + if (source_top_left.parent() != source_bottom_right.parent()) return; // whole row is getting changed @@ -323,22 +286,20 @@ void VersionProxyModel::sourceDataChanged(const QModelIndex &source_top_left, emit dataChanged(topLeft, bottomRight); } -void VersionProxyModel::setSourceModel(QAbstractItemModel *replacingRaw) +void VersionProxyModel::setSourceModel(QAbstractItemModel* replacingRaw) { - auto replacing = dynamic_cast<BaseVersionList *>(replacingRaw); + auto replacing = dynamic_cast<BaseVersionList*>(replacingRaw); beginResetModel(); m_columns.clear(); - if(!replacing) - { + if (!replacing) { roles.clear(); filterModel->setSourceModel(replacing); return; } roles = replacing->providesRoles(); - if(roles.contains(BaseVersionList::VersionRole)) - { + if (roles.contains(BaseVersionList::VersionRole)) { m_columns.push_back(Name); } /* @@ -347,32 +308,25 @@ void VersionProxyModel::setSourceModel(QAbstractItemModel *replacingRaw) m_columns.push_back(ParentVersion); } */ - if(roles.contains(BaseVersionList::ArchitectureRole)) - { + if (roles.contains(BaseVersionList::ArchitectureRole)) { m_columns.push_back(Architecture); } - if(roles.contains(BaseVersionList::PathRole)) - { + if (roles.contains(BaseVersionList::PathRole)) { m_columns.push_back(Path); } - if(roles.contains(Meta::VersionList::TimeRole)) - { + if (roles.contains(Meta::VersionList::TimeRole)) { m_columns.push_back(Time); } - if(roles.contains(BaseVersionList::BranchRole)) - { + if (roles.contains(BaseVersionList::BranchRole)) { m_columns.push_back(Branch); } - if(roles.contains(BaseVersionList::TypeRole)) - { + if (roles.contains(BaseVersionList::TypeRole)) { m_columns.push_back(Type); } - if(roles.contains(BaseVersionList::RecommendedRole)) - { + if (roles.contains(BaseVersionList::RecommendedRole)) { hasRecommended = true; } - if(roles.contains(BaseVersionList::LatestRole)) - { + if (roles.contains(BaseVersionList::LatestRole)) { hasLatest = true; } filterModel->setSourceModel(replacing); @@ -382,16 +336,13 @@ void VersionProxyModel::setSourceModel(QAbstractItemModel *replacingRaw) QModelIndex VersionProxyModel::getRecommended() const { - if(!roles.contains(BaseVersionList::RecommendedRole)) - { + if (!roles.contains(BaseVersionList::RecommendedRole)) { return index(0, 0); } int recommended = 0; - for (int i = 0; i < rowCount(); i++) - { + for (int i = 0; i < rowCount(); i++) { auto value = sourceModel()->data(mapToSource(index(i, 0)), BaseVersionList::RecommendedRole); - if (value.toBool()) - { + if (value.toBool()) { recommended = i; } } @@ -401,16 +352,13 @@ QModelIndex VersionProxyModel::getRecommended() const QModelIndex VersionProxyModel::getVersion(const QString& version) const { int found = -1; - for (int i = 0; i < rowCount(); i++) - { + for (int i = 0; i < rowCount(); i++) { auto value = sourceModel()->data(mapToSource(index(i, 0)), BaseVersionList::VersionRole); - if (value.toString() == version) - { + if (value.toString() == version) { found = i; } } - if(found == -1) - { + if (found == -1) { return QModelIndex(); } return index(found, 0); @@ -423,23 +371,24 @@ void VersionProxyModel::clearFilters() filterModel->filterChanged(); } -void VersionProxyModel::setFilter(const BaseVersionList::ModelRoles column, Filter * f) +void VersionProxyModel::setFilter(const BaseVersionList::ModelRoles column, Filter* f) { m_filters[column].reset(f); filterModel->filterChanged(); } -void VersionProxyModel::setSearch(const QString &search) { +void VersionProxyModel::setSearch(const QString& search) +{ m_search = search; filterModel->filterChanged(); } -const VersionProxyModel::FilterMap &VersionProxyModel::filters() const +const VersionProxyModel::FilterMap& VersionProxyModel::filters() const { return m_filters; } -const QString &VersionProxyModel::search() const +const QString& VersionProxyModel::search() const { return m_search; } @@ -474,7 +423,7 @@ void VersionProxyModel::sourceRowsRemoved(const QModelIndex& parent, int first, endRemoveRows(); } -void VersionProxyModel::setCurrentVersion(const QString &version) +void VersionProxyModel::setCurrentVersion(const QString& version) { m_currentVersion = version; } |