GH-942 fix vanilla version list

Latest release gets the star
Latest snapshot, if it's newer than latest release gets the bug
This commit is contained in:
Petr Mrázek 2015-05-06 09:00:21 +02:00
parent 9598f80335
commit 2a4647125d
4 changed files with 72 additions and 33 deletions

View File

@ -166,14 +166,25 @@ QVariant VersionProxyModel::data(const QModelIndex &index, int role) const
{
case Name:
{
auto value = sourceModel()->data(parentIndex, BaseVersionList::RecommendedRole);
if(value.toBool())
if(hasRecommended)
{
return tr("Recommended");
}
else if(index.row() == 0)
{
return tr("Latest");
auto value = sourceModel()->data(parentIndex, BaseVersionList::RecommendedRole);
if(value.toBool())
{
return tr("Recommended");
}
else if(hasLatest)
{
auto value = sourceModel()->data(parentIndex, BaseVersionList::LatestRole);
if(value.toBool())
{
return tr("Latest");
}
}
else if(index.row() == 0)
{
return tr("Latest");
}
}
}
default:
@ -188,24 +199,35 @@ QVariant VersionProxyModel::data(const QModelIndex &index, int role) const
{
case Name:
{
auto value = sourceModel()->data(parentIndex, BaseVersionList::RecommendedRole);
if(value.toBool())
if(hasRecommended)
{
return MMC->getThemedIcon("star");
auto value = sourceModel()->data(parentIndex, BaseVersionList::RecommendedRole);
if(value.toBool())
{
return MMC->getThemedIcon("star");
}
else if(hasLatest)
{
auto value = sourceModel()->data(parentIndex, BaseVersionList::LatestRole);
if(value.toBool())
{
return MMC->getThemedIcon("bug");
}
}
else if(index.row() == 0)
{
return MMC->getThemedIcon("bug");
}
auto pixmap = QPixmapCache::find("placeholder");
if(!pixmap)
{
QPixmap px(16,16);
px.fill(Qt::transparent);
QPixmapCache::insert("placeholder", px);
return px;
}
return *pixmap;
}
else if(index.row() == 0)
{
return MMC->getThemedIcon("bug");
}
auto pixmap = QPixmapCache::find("placeholder");
if(!pixmap)
{
QPixmap px(16,16);
px.fill(Qt::transparent);
QPixmapCache::insert("placeholder", px);
return px;
}
return *pixmap;
}
default:
{
@ -326,6 +348,14 @@ void VersionProxyModel::setSourceModel(BaseVersionList *replacing)
{
m_columns.push_back(Type);
}
if(roles.contains(BaseVersionList::RecommendedRole))
{
hasRecommended = true;
}
if(roles.contains(BaseVersionList::LatestRole))
{
hasLatest = true;
}
filterModel->setSourceModel(replacing);
endResetModel();

View File

@ -53,4 +53,6 @@ private:
FilterMap m_filters;
BaseVersionList::RoleList roles;
VersionFilterModel * filterModel;
bool hasRecommended = false;
bool hasLatest = false;
};

View File

@ -46,6 +46,7 @@ public:
VersionIdRole,
ParentGameVersionRole,
RecommendedRole,
LatestRole,
TypeRole,
BranchRole,
PathRole,

View File

@ -364,7 +364,21 @@ QVariant MinecraftVersionList::data(const QModelIndex& index, int role) const
return version->descriptor();
case RecommendedRole:
return version->descriptor() == g_VersionFilterData.recommendedMinecraftVersion;
return version->descriptor() == m_latestReleaseID;
case LatestRole:
{
if(version->descriptor() != m_latestSnapshotID)
return false;
MinecraftVersionPtr latestRelease = std::dynamic_pointer_cast<MinecraftVersion>(getLatestStable());
/*
if(latestRelease && latestRelease->m_releaseTime > version->m_releaseTime)
{
return false;
}
*/
return true;
}
case TypeRole:
return version->typeString();
@ -376,7 +390,7 @@ QVariant MinecraftVersionList::data(const QModelIndex& index, int role) const
BaseVersionList::RoleList MinecraftVersionList::providesRoles()
{
return {VersionPointerRole, VersionRole, VersionIdRole, RecommendedRole, TypeRole};
return {VersionPointerRole, VersionRole, VersionIdRole, RecommendedRole, LatestRole, TypeRole};
}
BaseVersionPtr MinecraftVersionList::getLatestStable() const
@ -388,14 +402,6 @@ BaseVersionPtr MinecraftVersionList::getLatestStable() const
BaseVersionPtr MinecraftVersionList::getRecommended() const
{
for(auto item: m_vlist)
{
auto version = std::dynamic_pointer_cast<MinecraftVersion>(item);
if(version->descriptor() == g_VersionFilterData.recommendedMinecraftVersion)
{
return item;
}
}
return getLatestStable();
}