diff options
Diffstat (limited to 'sigmodr/widgets/ItemUI.cpp')
| -rw-r--r-- | sigmodr/widgets/ItemUI.cpp | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/sigmodr/widgets/ItemUI.cpp b/sigmodr/widgets/ItemUI.cpp new file mode 100644 index 00000000..92f4b980 --- /dev/null +++ b/sigmodr/widgets/ItemUI.cpp @@ -0,0 +1,126 @@ +/* + * Copyright 2008-2009 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 "ItemUI.h" + +// Sigmod includes +#include "../sigmod/Item.h" +#include "../sigmod/ItemType.h" +#include "../sigmod/Rules.h" +#include "../sigmod/Sigmod.h" + +Sigmodr::ItemUI::ItemUI(Sigmod::Item* item, QWidget* parent) : + ObjectUI(parent), + m_lastType(-1) +{ + setupUi(this); + setObjects(item, new Sigmod::Item(*item)); +} + +Sigmodr::ItemUI::~ItemUI() +{ +} + +void Sigmodr::ItemUI::refreshGui() +{ + const bool blocked = varType->blockSignals(true); + varType->clear(); + for (int i = 0; i < sigmod()->itemTypeCount(); ++i) + { + const Sigmod::ItemType* itemType = sigmod()->itemType(i); + varType->addItem(itemType->name(), itemType->id()); + } + varType->blockSignals(blocked); + varPrice->setMaximum(sigmod()->rules()->maxMoney()); +} + +void Sigmodr::ItemUI::setGui() +{ + const bool resetWeight = (qobject_cast<Sigmod::Item*>(modified())->type() != m_lastType); + varName->setText(qobject_cast<Sigmod::Item*>(modified())->name()); + varSellable->setCheckState(qobject_cast<Sigmod::Item*>(modified())->sellable() ? Qt::Checked : Qt::Unchecked); + varType->setCurrentIndex(varType->findData(qobject_cast<Sigmod::Item*>(modified())->type())); + m_lastType = qobject_cast<Sigmod::Item*>(modified())->type(); + varPrice->setValue(qobject_cast<Sigmod::Item*>(modified())->price()); + varSellPrice->setValue(qobject_cast<Sigmod::Item*>(modified())->sellPrice()); + varSellPrice->setEnabled(qobject_cast<Sigmod::Item*>(modified())->sellable()); + if (resetWeight) + { + const Sigmod::ItemType* itemType = sigmod()->itemTypeById(qobject_cast<Sigmod::Item*>(modified())->type()); + if (itemType) + varWeight->setMaximum(itemType->maxWeight()); + } + varWeight->setValue(qobject_cast<Sigmod::Item*>(modified())->weight()); + varDescription->setText(qobject_cast<Sigmod::Item*>(modified())->description()); + varScript->setValue(qobject_cast<Sigmod::Item*>(modified())->script()); +} + +void Sigmodr::ItemUI::apply() +{ + *qobject_cast<Sigmod::Item*>(original()) = *qobject_cast<Sigmod::Item*>(modified()); + emit(changed(false)); +} + +void Sigmodr::ItemUI::discard() +{ + *qobject_cast<Sigmod::Item*>(modified()) = *qobject_cast<Sigmod::Item*>(original()); + setGui(); + emit(changed(false)); +} + +void Sigmodr::ItemUI::on_varName_textChanged(const QString& name) +{ + const int cursor = varName->cursorPosition(); + qobject_cast<Sigmod::Item*>(modified())->setName(name); + varName->setCursorPosition(cursor); +} + +void Sigmodr::ItemUI::on_varSellable_toggled(const bool sellable) +{ + qobject_cast<Sigmod::Item*>(modified())->setSellable(sellable); +} + +void Sigmodr::ItemUI::on_varType_activated(const int type) +{ + qobject_cast<Sigmod::Item*>(modified())->setType(varType->itemData(type).toInt()); +} + +void Sigmodr::ItemUI::on_varPrice_valueChanged(const int price) +{ + qobject_cast<Sigmod::Item*>(modified())->setPrice(price); +} + +void Sigmodr::ItemUI::on_varSellPrice_valueChanged(const int sellPrice) +{ + qobject_cast<Sigmod::Item*>(modified())->setSellPrice(sellPrice); +} + +void Sigmodr::ItemUI::on_varWeight_valueChanged(const int weight) +{ + qobject_cast<Sigmod::Item*>(modified())->setWeight(weight); +} + +void Sigmodr::ItemUI::on_varDescription_textChanged(const QString& description) +{ + qobject_cast<Sigmod::Item*>(modified())->setDescription(description); +} + +void Sigmodr::ItemUI::on_varScript_valueChanged(const Sigcore::Script& script) +{ + qobject_cast<Sigmod::Item*>(modified())->setScript(script); +} |
