diff options
| author | Ben Boeckel <MathStuf@gmail.com> | 2008-09-05 20:41:05 +0000 |
|---|---|---|
| committer | Ben Boeckel <MathStuf@gmail.com> | 2008-09-05 20:41:05 +0000 |
| commit | b81f5bffa2772eb9bd3c67fb35485ab1ee2d96e7 (patch) | |
| tree | 6609f31b1635d948cf7a216c7fea72cfb3c905a0 /sigmodr/ValidationDialog.cpp | |
| parent | b99ffef4aa68dd5f0af64de9aec0f610e267d8cc (diff) | |
| download | sigen-b81f5bffa2772eb9bd3c67fb35485ab1ee2d96e7.tar.gz sigen-b81f5bffa2772eb9bd3c67fb35485ab1ee2d96e7.tar.xz sigen-b81f5bffa2772eb9bd3c67fb35485ab1ee2d96e7.zip | |
[FIX] Moving stuff for the move to the new name, Sigma Game Engine (sigen for short)
git-svn-id: https://pokegen.svn.sourceforge.net/svnroot/pokegen/trunk@249 6ecfd1a5-f3ed-3746-8530-beee90d26b22
Diffstat (limited to 'sigmodr/ValidationDialog.cpp')
| -rw-r--r-- | sigmodr/ValidationDialog.cpp | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/sigmodr/ValidationDialog.cpp b/sigmodr/ValidationDialog.cpp new file mode 100644 index 00000000..f2b765ec --- /dev/null +++ b/sigmodr/ValidationDialog.cpp @@ -0,0 +1,141 @@ +/* + * Copyright 2008 Ben Boeckel <MathStuf@gmail.com> + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +// Header include +#include "ValidationDialog.h" + +// Pokemod includes +#include "../pokemod/Object.h" + +// Qt includes +#include <QtGui/QLabel> +#include <QtGui/QTreeWidget> +#include <QtGui/QVBoxLayout> + +// KDE includes +#include <KColorScheme> +#include <KMessageBox> +#include <KProgressDialog> + +Pokemodr::ValidationDialog::ValidationDialog(Pokemod::Object* object, QWidget* parent) : + QWidget(parent), + m_processed(false), + m_object(object), + m_valTree(new QTreeWidget) +{ + m_valTree->setHeaderHidden(true); + connect(m_object, SIGNAL(changed()), this, SLOT(objectChanged())); +} + +int Pokemodr::ValidationDialog::errors() const +{ + return m_errors; +} + +int Pokemodr::ValidationDialog::warnings() const +{ + return m_warnings; +} + +void Pokemodr::ValidationDialog::process() +{ + if (!m_processed) + { + m_errors = 0; + m_warnings = 0; + m_valTree->clear(); + m_parents.clear(); + m_parents.push(ObjectErrorCount(m_valTree->invisibleRootItem(), 0)); + KProgressDialog* progress = new KProgressDialog(this, "Validating", "Please wait"); + progress->progressBar()->setRange(0, 0); + progress->setAllowCancel(false); + progress->setModal(true); + progress->show(); + connect(m_object, SIGNAL(valMessage(QString)), this, SLOT(addMessage(QString))); + connect(m_object, SIGNAL(valWarning(QString)), this, SLOT(addWarning(QString))); + connect(m_object, SIGNAL(valError(QString)), this, SLOT(addError(QString))); + m_object->validate(); + disconnect(m_object, SIGNAL(valMessage(QString)), this, SLOT(addMessage(QString))); + disconnect(m_object, SIGNAL(valWarning(QString)), this, SLOT(addWarning(QString))); + disconnect(m_object, SIGNAL(valError(QString)), this, SLOT(addError(QString))); + delete progress; + m_valTree->addTopLevelItem(m_parents.top().first); + } + m_processed = true; +} + +void Pokemodr::ValidationDialog::show() +{ + if (!m_processed) + process(); + if (m_parents.top().second) + { + KDialog* dialog = new KDialog(this); + dialog->setCaption("Validation Messages"); + dialog->setButtons(KDialog::Ok); + QWidget* widget = new QWidget(this); + QVBoxLayout* layout = new QVBoxLayout(widget); + layout->addWidget(new QLabel(QString("Warnings: %1\nErrors: %2").arg(m_warnings).arg(m_errors), widget)); + layout->addWidget(m_valTree); + dialog->setMainWidget(widget); + dialog->exec(); + delete dialog; + } + else + KMessageBox::information(this, "No messages", "Validation"); +} + +void Pokemodr::ValidationDialog::insertMessage(const QString& msg, const QBrush& brush) +{ + ++m_parents.top().second; + QTreeWidgetItem* item = new QTreeWidgetItem(m_parents.top().first, QStringList(msg)); + item->setBackground(0, brush); +} + +void Pokemodr::ValidationDialog::addMessage(const QString& msg) +{ + if (msg.startsWith("++")) + m_parents.push(ObjectErrorCount(new QTreeWidgetItem(QStringList(msg.mid(2))), 0)); + else if (msg.startsWith("--")) + { + ObjectErrorCount count = m_parents.pop(); + if (count.second) + { + m_parents.top().first->addChild(count.first); + ++m_parents.top().second; + } + } + else + insertMessage(msg, KStatefulBrush(KColorScheme::View, KColorScheme::PositiveBackground).brush(QPalette::Normal)); +} + +void Pokemodr::ValidationDialog::addError(const QString& msg) +{ + insertMessage(msg, KStatefulBrush(KColorScheme::View, KColorScheme::NegativeBackground).brush(QPalette::Normal)); + ++m_errors; +} + +void Pokemodr::ValidationDialog::addWarning(const QString& msg) +{ + insertMessage(msg, KStatefulBrush(KColorScheme::View, KColorScheme::NeutralBackground).brush(QPalette::Normal)); + ++m_warnings; +} + +void Pokemodr::ValidationDialog::objectChanged() +{ + m_processed = false; +} |
