diff options
Diffstat (limited to 'sigmodr/widgets/BadgeUI.cpp')
| -rw-r--r-- | sigmodr/widgets/BadgeUI.cpp | 129 |
1 files changed, 67 insertions, 62 deletions
diff --git a/sigmodr/widgets/BadgeUI.cpp b/sigmodr/widgets/BadgeUI.cpp index d1dea1d0..bb6cb1b0 100644 --- a/sigmodr/widgets/BadgeUI.cpp +++ b/sigmodr/widgets/BadgeUI.cpp @@ -17,6 +17,7 @@ // Header include #include "BadgeUI.h" +#include "BadgeUI_p.h" // Sigmodr core widget includes #include <sigmodr/corewidgets/FractionWidget.h> @@ -34,12 +35,9 @@ #include <KLineEdit> // Qt includes -#include <QtCore/QFile> #include <QtGui/QHeaderView> #include <QtGui/QTableWidget> #include <QtGui/QTableWidgetItem> -#include <QtGui/QVBoxLayout> -#include <QtUiTools/QUiLoader> using namespace Sigcore; using namespace Sigmod; @@ -47,47 +45,67 @@ using namespace Sigmodr::CoreWidgets; using namespace Sigmodr::Widgets; BadgeUI::BadgeUI(Badge* badge, QWidget* parent) : - ObjectUI(parent) + ObjectUI(badge, parent), + d(new Private(new Badge(*badge))) { - setObjects(badge, new Badge(*badge)); + setWidget(d->makeWidgets(this)); } -void BadgeUI::initGui() +void BadgeUI::apply() +{ + *qobject_cast<Badge*>(m_object) = *d->m_badge; + ObjectUI::apply(); +} + +void BadgeUI::discard() +{ + *d->m_badge = *qobject_cast<Badge*>(m_object); + d->resetGui(); + ObjectUI::discard(); +} + +BadgeUI::Private::Private(Badge* badge) : + ObjectUIPrivate(badge), + m_badge(badge) +{ +} + +BadgeUI::Private::~Private() { - QFile file(":/gui/badge.ui"); - file.open(QFile::ReadOnly); - QWidget *formWidget = QUiLoader().load(&file, this); - file.close(); - ui_name = formWidget->findChild<KLineEdit*>("varName"); - ui_obey= formWidget->findChild<KIntNumInput*>("varObey"); - ui_face = formWidget->findChild<KComboBox*>("varFace"); - ui_badge = formWidget->findChild<KComboBox*>("varBadge"); - ui_stat = formWidget->findChild<QTableWidget*>("varStat"); - ui_statMultiplier = formWidget->findChild<FractionWidget*>("varStatMultiplier"); + delete m_badge; +} + +QWidget* BadgeUI::Private::makeWidgets(ObjectUI* widget) +{ + QWidget *form = openUiFile(":/gui/badge.ui", widget); + ui_name = form->findChild<KLineEdit*>("varName"); + ui_obey= form->findChild<KIntNumInput*>("varObey"); + ui_face = form->findChild<KComboBox*>("varFace"); + ui_badge = form->findChild<KComboBox*>("varBadge"); + ui_stat = form->findChild<QTableWidget*>("varStat"); + ui_statMultiplier = form->findChild<FractionWidget*>("varStatMultiplier"); connect(ui_name, SIGNAL(textChanged(QString)), this, SLOT(nameChanged(QString))); connect(ui_obey, SIGNAL(valueChanged(int)), this, SLOT(obeyChanged(int))); connect(ui_face, SIGNAL(currentIndexChanged(int)), this, SLOT(faceChanged(int))); connect(ui_badge, SIGNAL(currentIndexChanged(int)), this, SLOT(badgeChanged(int))); connect(ui_stat, SIGNAL(currentCellChanged(int,int,int,int)), this, SLOT(statChanged(int))); connect(ui_statMultiplier, SIGNAL(valueChanged(Sigcore::Fraction)), this, SLOT(statMultiplierChanged(Sigcore::Fraction))); - QVBoxLayout* layout = new QVBoxLayout; - layout->addWidget(formWidget); - setLayout(layout); ui_stat->horizontalHeader()->setResizeMode(QHeaderView::Stretch); + return form; } -void BadgeUI::refreshGui() +void BadgeUI::Private::refreshGui() { int maxHeight = 0; int maxWidth = 0; - ui_obey->setMaximum(game()->rules()->maxLevel()); + ui_obey->setMaximum(m_badge->game()->rules()->maxLevel()); const bool blockedFace = ui_face->blockSignals(true); const bool blockedBadge = ui_badge->blockSignals(true); ui_face->clear(); ui_badge->clear(); - for (int i = 0; i < game()->spriteCount(); ++i) + for (int i = 0; i < m_badge->game()->spriteCount(); ++i) { - const Sprite* sprite = game()->sprite(i); + const Sprite* sprite = m_badge->game()->sprite(i); QPixmap icon; icon.loadFromData(sprite->sprite()); maxHeight = qMax(maxHeight, icon.height()); @@ -100,7 +118,7 @@ void BadgeUI::refreshGui() const QSize maxSize(maxWidth, maxHeight); ui_face->setIconSize(maxSize); ui_badge->setIconSize(maxSize); - const bool isSplit = game()->rules()->specialSplit(); + const bool isSplit = m_badge->game()->rules()->specialSplit(); ui_stat->clear(); ui_stat->setRowCount((isSplit ? ST_SpecialDefense : ST_Special) - ST_Attack + 1); ui_stat->setVerticalHeaderLabels((isSplit ? StatGSCStr : StatRBYStr).mid(ST_Attack, (isSplit ? ST_SpecialDefense : ST_Special) - ST_Attack + 1)); @@ -143,68 +161,55 @@ void BadgeUI::refreshGui() } } -void BadgeUI::setGui() +void BadgeUI::Private::resetGui() { - ui_name->setText(qobject_cast<Badge*>(modified())->name()); - ui_obey->setValue(qobject_cast<Badge*>(modified())->obey()); - ui_face->setCurrentIndex(game()->spriteIndex(qobject_cast<Badge*>(modified())->face())); - ui_badge->setCurrentIndex(game()->spriteIndex(qobject_cast<Badge*>(modified())->badge())); - ui_stat->item(ST_Attack - ST_Attack, 0)->setData(Qt::DisplayRole, QString::number(qobject_cast<Badge*>(modified())->stat(ST_Attack), 'g', 7)); - ui_stat->item(ST_Defense - ST_Attack, 0)->setData(Qt::DisplayRole, QString::number(qobject_cast<Badge*>(modified())->stat(ST_Defense), 'g', 7)); - ui_stat->item(ST_Speed - ST_Attack, 0)->setData(Qt::DisplayRole, QString::number(qobject_cast<Badge*>(modified())->stat(ST_Speed), 'g', 7)); - if (game()->rules()->specialSplit()) + ui_name->setText(m_badge->name()); + ui_obey->setValue(m_badge->obey()); + ui_face->setCurrentIndex(m_badge->game()->spriteIndex(m_badge->face())); + ui_badge->setCurrentIndex(m_badge->game()->spriteIndex(m_badge->badge())); + ui_stat->item(ST_Attack - ST_Attack, 0)->setData(Qt::DisplayRole, QString::number(m_badge->stat(ST_Attack), 'g', 7)); + ui_stat->item(ST_Defense - ST_Attack, 0)->setData(Qt::DisplayRole, QString::number(m_badge->stat(ST_Defense), 'g', 7)); + ui_stat->item(ST_Speed - ST_Attack, 0)->setData(Qt::DisplayRole, QString::number(m_badge->stat(ST_Speed), 'g', 7)); + if (m_badge->game()->rules()->specialSplit()) { - ui_stat->item(ST_SpecialAttack - ST_Attack, 0)->setData(Qt::DisplayRole, QString::number(qobject_cast<Badge*>(modified())->stat(ST_SpecialAttack), 'g', 7)); - ui_stat->item(ST_SpecialDefense - ST_Attack, 0)->setData(Qt::DisplayRole, QString::number(qobject_cast<Badge*>(modified())->stat(ST_SpecialDefense), 'g', 7)); + ui_stat->item(ST_SpecialAttack - ST_Attack, 0)->setData(Qt::DisplayRole, QString::number(m_badge->stat(ST_SpecialAttack), 'g', 7)); + ui_stat->item(ST_SpecialDefense - ST_Attack, 0)->setData(Qt::DisplayRole, QString::number(m_badge->stat(ST_SpecialDefense), 'g', 7)); } else - ui_stat->item(ST_Special - ST_Attack, 0)->setData(Qt::DisplayRole, QString::number(qobject_cast<Badge*>(modified())->stat(ST_Special), 'g', 7)); - ui_statMultiplier->setValue(qobject_cast<Badge*>(modified())->stat(ui_stat->verticalHeaderItem(ui_stat->currentRow())->data(Qt::UserRole).value<Stat>())); -} - -void BadgeUI::apply() -{ - *qobject_cast<Badge*>(original()) = *qobject_cast<Badge*>(modified()); - emit(changed(false)); -} - -void BadgeUI::discard() -{ - *qobject_cast<Badge*>(modified()) = *qobject_cast<Badge*>(original()); - setGui(); - emit(changed(false)); + ui_stat->item(ST_Special - ST_Attack, 0)->setData(Qt::DisplayRole, QString::number(m_badge->stat(ST_Special), 'g', 7)); + ui_statMultiplier->setValue(m_badge->stat(ui_stat->verticalHeaderItem(ui_stat->currentRow())->data(Qt::UserRole).value<Stat>())); } -void BadgeUI::nameChanged(const QString& name) +void BadgeUI::Private::nameChanged(const QString& name) { const int cursor = ui_name->cursorPosition(); - qobject_cast<Badge*>(modified())->setName(name); + m_badge->setName(name); ui_name->setCursorPosition(cursor); } -void BadgeUI::obeyChanged(const int obey) +void BadgeUI::Private::obeyChanged(const int obey) { - qobject_cast<Badge*>(modified())->setObey(obey); + m_badge->setObey(obey); } -void BadgeUI::faceChanged(const int face) +void BadgeUI::Private::faceChanged(const int face) { if (0 <= face) - qobject_cast<Badge*>(modified())->setFace(game()->sprite(face)->id()); + m_badge->setFace(m_badge->game()->sprite(face)->id()); } -void BadgeUI::badgeChanged(const int badge) +void BadgeUI::Private::badgeChanged(const int badge) { if (0 <= badge) - qobject_cast<Badge*>(modified())->setBadge(game()->sprite(badge)->id()); + m_badge->setBadge(m_badge->game()->sprite(badge)->id()); } -void BadgeUI::statChanged(const int row) +void BadgeUI::Private::statChanged(const int row) { - ui_statMultiplier->setValue(qobject_cast<Badge*>(modified())->stat(ui_stat->verticalHeaderItem(row)->data(Qt::UserRole).value<Stat>())); + ui_statMultiplier->setValue(m_badge->stat(ui_stat->verticalHeaderItem(row)->data(Qt::UserRole).value<Stat>())); } -void BadgeUI::statMultiplierChanged(const Fraction& multiplier) +void BadgeUI::Private::statMultiplierChanged(const Fraction& multiplier) { - qobject_cast<Badge*>(modified())->setStat(ui_stat->verticalHeaderItem(ui_stat->currentRow())->data(Qt::UserRole).value<Stat>(), multiplier); + m_badge->setStat(ui_stat->verticalHeaderItem(ui_stat->currentRow())->data(Qt::UserRole).value<Stat>(), multiplier); } |
