From 1430a9e2b52109f3f57cfa7a9bb2f68e0dda1365 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Sun, 1 Mar 2009 20:44:32 -0500 Subject: Made the rest of the widgets use pimpl --- sigmodr/widgets/MapTrainerUI.cpp | 121 ++++++++++++++++++++------------------- 1 file changed, 62 insertions(+), 59 deletions(-) (limited to 'sigmodr/widgets/MapTrainerUI.cpp') diff --git a/sigmodr/widgets/MapTrainerUI.cpp b/sigmodr/widgets/MapTrainerUI.cpp index fcb46cb1..d5d11b26 100644 --- a/sigmodr/widgets/MapTrainerUI.cpp +++ b/sigmodr/widgets/MapTrainerUI.cpp @@ -17,6 +17,7 @@ // Header include #include "MapTrainerUI.h" +#include "MapTrainerUI_p.h" // Sigmodr core widget includes #include @@ -36,11 +37,8 @@ #include // Qt includes -#include #include #include -#include -#include using namespace Sigcore; using namespace Sigmod; @@ -48,49 +46,69 @@ using namespace Sigmodr::CoreWidgets; using namespace Sigmodr::Widgets; MapTrainerUI::MapTrainerUI(MapTrainer* trainer, QWidget* parent) : - ObjectUI(parent) + ObjectUI(trainer, parent), + d(new Private(new MapTrainer(*trainer))) { - setObjects(trainer, new MapTrainer(*trainer)); + setWidget(d->makeWidgets(this)); } -void MapTrainerUI::initGui() +void MapTrainerUI::apply() +{ + *qobject_cast(m_object) = *d->m_trainer; + ObjectUI::apply(); +} + +void MapTrainerUI::discard() +{ + *d->m_trainer = *qobject_cast(m_object); + d->resetGui(); + ObjectUI::discard(); +} + +MapTrainerUI::Private::Private(MapTrainer* trainer) : + ObjectUIPrivate(trainer), + m_trainer(trainer) +{ +} + +MapTrainerUI::Private::~Private() { - QFile file(":/gui/maptrainer.ui"); - file.open(QFile::ReadOnly); - QWidget *formWidget = QUiLoader().load(&file, this); - file.close(); - ui_name = formWidget->findChild("varName"); - ui_trainerClass = formWidget->findChild("varTrainerClass"); - ui_numberFight = formWidget->findChild("varNumberFight"); - ui_script = formWidget->findChild("varScript"); - ui_leadTeamMembers = formWidget->findChild("varLeadTeamMembers"); + delete m_trainer; +} + +QWidget* MapTrainerUI::Private::makeWidgets(ObjectUI* widget) +{ + QWidget *form = openUiFile(":/gui/maptrainer.ui", widget); + ui_name = form->findChild("varName"); + ui_trainerClass = form->findChild("varTrainerClass"); + ui_numberFight = form->findChild("varNumberFight"); + ui_script = form->findChild("varScript"); + ui_leadTeamMembers = form->findChild("varLeadTeamMembers"); connect(ui_name, SIGNAL(textChanged(QString)), this, SLOT(nameChanged(QString))); connect(ui_trainerClass, SIGNAL(currentIndexChanged(int)), this, SLOT(trainerClassChanged(int))); connect(ui_numberFight, SIGNAL(valueChanged(int)), this, SLOT(numberFightChanged(int))); connect(ui_script, SIGNAL(valueChanged(Sigcore::Script)), this, SLOT(scriptChanged(Sigcore::Script))); connect(ui_leadTeamMembers, SIGNAL(added(QListWidgetItem*)), this, SLOT(leadTeamMemberAdded(QListWidgetItem*))); connect(ui_leadTeamMembers, SIGNAL(removed(QListWidgetItem*)), this, SLOT(leadTeamMemberRemoved(QListWidgetItem*))); - QVBoxLayout* layout = new QVBoxLayout; - layout->addWidget(formWidget); - setLayout(layout); + return form; } -void MapTrainerUI::refreshGui() +void MapTrainerUI::Private::refreshGui() { const bool blockedTrainerClass = ui_trainerClass->blockSignals(true); ui_trainerClass->clear(); - for (int i = 0; i < game()->trainerCount(); ++i) - ui_trainerClass->addItem(game()->trainer(i)->name()); + for (int i = 0; i < m_trainer->game()->trainerCount(); ++i) + ui_trainerClass->addItem(m_trainer->game()->trainer(i)->name()); ui_trainerClass->blockSignals(blockedTrainerClass); - ui_numberFight->setMaximum(game()->rules()->maxFight()); + ui_numberFight->setMaximum(m_trainer->game()->rules()->maxFight()); const bool blockedLeadTeamMember = ui_leadTeamMembers->blockSignals(true); ui_leadTeamMembers->availableListWidget()->clear(); ui_leadTeamMembers->selectedListWidget()->clear(); - for (int i = 0; i < qobject_cast(original())->teamMemberCount(); ++i) + for (int i = 0; i < m_trainer->teamMemberCount(); ++i) { QString speciesName; - const MapTrainerTeamMember* teamMember = qobject_cast(original())->teamMember(i); - const Species* species = game()->species(teamMember->species()); + const MapTrainerTeamMember* teamMember = m_trainer->teamMember(i); + const Species* species = m_trainer->game()->species(teamMember->species()); speciesName = species ? species->name() : "(Invalid)"; QListWidgetItem* widgetItem = new QListWidgetItem(QString("%1 level %2 (%3)").arg(speciesName, teamMember->level(), i), ui_leadTeamMembers->availableListWidget()); widgetItem->setData(Qt::UserRole, teamMember->id()); @@ -99,71 +117,56 @@ void MapTrainerUI::refreshGui() ui_leadTeamMembers->setButtonsEnabled(); } -void MapTrainerUI::setGui() +void MapTrainerUI::Private::resetGui() { - ui_name->setText(qobject_cast(modified())->name()); - ui_trainerClass->setCurrentIndex(game()->trainerIndex(qobject_cast(modified())->trainerClass())); - ui_numberFight->setValue(qobject_cast(modified())->numberFight()); - ui_script->setValue(qobject_cast(modified())->script()); + ui_name->setText(m_trainer->name()); + ui_trainerClass->setCurrentIndex(m_trainer->game()->trainerIndex(m_trainer->trainerClass())); + ui_numberFight->setValue(m_trainer->numberFight()); + ui_script->setValue(m_trainer->script()); for (int i = 0; i < ui_leadTeamMembers->availableListWidget()->count(); ++i) { QListWidgetItem* widgetItem = ui_leadTeamMembers->availableListWidget()->item(i); - if (qobject_cast(modified())->leadTeamMember(widgetItem->data(Qt::UserRole).toInt())) + if (m_trainer->leadTeamMember(widgetItem->data(Qt::UserRole).toInt())) ui_leadTeamMembers->selectedListWidget()->addItem(ui_leadTeamMembers->availableListWidget()->takeItem(i--)); } for (int i = 0; i < ui_leadTeamMembers->selectedListWidget()->count(); ++i) { QListWidgetItem* widgetItem = ui_leadTeamMembers->selectedListWidget()->item(i); - if (!qobject_cast(modified())->leadTeamMember(widgetItem->data(Qt::UserRole).toInt())) + if (!m_trainer->leadTeamMember(widgetItem->data(Qt::UserRole).toInt())) ui_leadTeamMembers->availableListWidget()->addItem(ui_leadTeamMembers->selectedListWidget()->takeItem(i--)); } ui_leadTeamMembers->setButtonsEnabled(); } -void MapTrainerUI::apply() -{ - *qobject_cast(original()) = *qobject_cast(modified()); - emit(changed(false)); -} - -void MapTrainerUI::discard() -{ - *qobject_cast(modified()) = *qobject_cast(original()); - setGui(); - emit(changed(false)); -} - -void MapTrainerUI::nameChanged(const QString& name) +void MapTrainerUI::Private::nameChanged(const QString& name) { const int cursor = ui_name->cursorPosition(); - qobject_cast(modified())->setName(name); + m_trainer->setName(name); ui_name->setCursorPosition(cursor); } -void MapTrainerUI::trainerClassChanged(const int trainerClass) +void MapTrainerUI::Private::trainerClassChanged(const int trainerClass) { if (0 <= trainerClass) - qobject_cast(modified())->setTrainerClass(game()->trainer(trainerClass)->id()); + m_trainer->setTrainerClass(m_trainer->game()->trainer(trainerClass)->id()); } -void MapTrainerUI::numberFightChanged(const int numberFight) +void MapTrainerUI::Private::numberFightChanged(const int numberFight) { - qobject_cast(modified())->setNumberFight(numberFight); + m_trainer->setNumberFight(numberFight); } -void MapTrainerUI::scriptChanged(const Script& script) +void MapTrainerUI::Private::scriptChanged(const Script& script) { - qobject_cast(modified())->setScript(script); + m_trainer->setScript(script); } -void MapTrainerUI::leadTeamMemberAdded(QListWidgetItem* item) +void MapTrainerUI::Private::leadTeamMemberAdded(QListWidgetItem* item) { - qobject_cast(modified())->setLeadTeamMember(item->data(Qt::UserRole).toInt(), true); - setGui(); + m_trainer->setLeadTeamMember(item->data(Qt::UserRole).toInt(), true); } -void MapTrainerUI::leadTeamMemberRemoved(QListWidgetItem* item) +void MapTrainerUI::Private::leadTeamMemberRemoved(QListWidgetItem* item) { - qobject_cast(modified())->setLeadTeamMember(item->data(Qt::UserRole).toInt(), false); - setGui(); + m_trainer->setLeadTeamMember(item->data(Qt::UserRole).toInt(), false); } -- cgit