From 1a0bbdd9acaf1c5edaad6d3f0790c1b02674c0ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Mr=C3=A1zek?= Date: Sun, 21 Feb 2016 01:44:27 +0100 Subject: GH-1453 report version file problems in the version page --- application/pages/VersionPage.cpp | 96 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) (limited to 'application/pages/VersionPage.cpp') diff --git a/application/pages/VersionPage.cpp b/application/pages/VersionPage.cpp index e1abcf0c..f01a2d62 100644 --- a/application/pages/VersionPage.cpp +++ b/application/pages/VersionPage.cpp @@ -47,6 +47,51 @@ #include "icons/IconList.h" #include "Exception.h" +#include "MultiMC.h" + +class IconProxy : public QIdentityProxyModel +{ + Q_OBJECT +public: + + IconProxy(QWidget *parentWidget) : QIdentityProxyModel(parentWidget) + { + connect(parentWidget, &QObject::destroyed, this, &IconProxy::widgetGone); + m_parentWidget = parentWidget; + } + + virtual QVariant data(const QModelIndex &proxyIndex, int role = Qt::DisplayRole) const override + { + QVariant var = QIdentityProxyModel::data(mapToSource(proxyIndex), role); + int column = proxyIndex.column(); + if(column == 0 && role == Qt::DecorationRole && m_parentWidget) + { + if(!var.isNull()) + { + auto string = var.toString(); + if(string == "warning") + { + return MMC->getThemedIcon("status-yellow"); + } + else if(string == "error") + { + return MMC->getThemedIcon("status-bad"); + } + } + return MMC->getThemedIcon("status-good"); + } + return var; + } +private slots: + void widgetGone() + { + m_parentWidget = nullptr; + } + +private: + QWidget *m_parentWidget = nullptr; +}; + QIcon VersionPage::icon() const { return ENV.icons()->getIcon(m_inst->iconKey()); @@ -72,11 +117,15 @@ VersionPage::VersionPage(OneSixInstance *inst, QWidget *parent) m_version = m_inst->getMinecraftProfile(); if (m_version) { - ui->packageView->setModel(m_version.get()); + auto proxy = new IconProxy(ui->packageView); + proxy->setSourceModel(m_version.get()); + ui->packageView->setModel(proxy); ui->packageView->installEventFilter(this); ui->packageView->setSelectionMode(QAbstractItemView::SingleSelection); connect(ui->packageView->selectionModel(), &QItemSelectionModel::currentChanged, this, &VersionPage::versionCurrent); + auto smodel = ui->packageView->selectionModel(); + connect(smodel, SIGNAL(currentChanged(QModelIndex, QModelIndex)), SLOT(packageCurrent(QModelIndex, QModelIndex))); updateVersionControls(); // select first item. preselect(0); @@ -94,6 +143,49 @@ VersionPage::~VersionPage() delete ui; } +void VersionPage::packageCurrent(const QModelIndex ¤t, const QModelIndex &previous) +{ + if (!current.isValid()) + { + ui->frame->clear(); + return; + } + int row = current.row(); + auto patch = m_version->versionPatch(row); + auto severity = patch->getProblemSeverity(); + switch(severity) + { + case PROBLEM_WARNING: + ui->frame->setModText(tr("%1 possibly has issues.").arg(patch->getPatchName())); + break; + case PROBLEM_ERROR: + ui->frame->setModText(tr("%1 has issues!").arg(patch->getPatchName())); + break; + default: + case PROBLEM_NONE: + ui->frame->clear(); + return; + } + + auto &problems = patch->getProblems(); + QString problemOut; + for (auto &problem: problems) + { + if(problem.getSeverity() == PROBLEM_ERROR) + { + problemOut += tr("Error: "); + } + else if(problem.getSeverity() == PROBLEM_WARNING) + { + problemOut += tr("Warning: "); + } + problemOut += problem.getDescription(); + problemOut += "\n"; + } + ui->frame->setModDescription(problemOut); +} + + void VersionPage::updateVersionControls() { ui->forgeBtn->setEnabled(true); @@ -453,3 +545,5 @@ void VersionPage::on_revertBtn_clicked() updateButtons(); preselect(currentIdx); } + +#include "VersionPage.moc" -- cgit v1.2.3