/* * Copyright 2008-2009 Ben Boeckel * * 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 . */ // Header include #include "StoreUI.h" // Sigmod includes #include #include #include // KDE includes #include #include // Qt includes #include #include #include using namespace Sigmod; using namespace Sigmodr::Widgets; StoreUI::StoreUI(Store* store, QWidget* parent) : ObjectUI(parent) { setObjects(store, new Store(*store)); } void StoreUI::initGui() { QFile file(":/gui/store.ui"); file.open(QFile::ReadOnly); QWidget *formWidget = QUiLoader().load(&file, this); file.close(); ui_name = formWidget->findChild("varName"); ui_items = formWidget->findChild("varItems"); connect(ui_name, SIGNAL(textChanged(QString)), this, SLOT(nameChanged(QString))); connect(ui_items, SIGNAL(added(QListWidgetItem*)), this, SLOT(itemAdded(QListWidgetItem*))); connect(ui_items, SIGNAL(removed(QListWidgetItem*)), this, SLOT(itemRemoved(QListWidgetItem*))); } void StoreUI::refreshGui() { const bool blockedItems = ui_items->blockSignals(true); ui_items->availableListWidget()->clear(); ui_items->selectedListWidget()->clear(); for (int i = 0; i < game()->itemCount(); ++i) { const Item* item = game()->item(i); QListWidgetItem* widgetItem = new QListWidgetItem(item->name(), ui_items->availableListWidget()); widgetItem->setData(Qt::UserRole, item->id()); } ui_items->blockSignals(blockedItems); ui_items->setButtonsEnabled(); } void StoreUI::setGui() { ui_name->setText(qobject_cast(modified())->name()); for (int i = 0; i < ui_items->availableListWidget()->count(); ++i) { QListWidgetItem* widgetItem = ui_items->availableListWidget()->item(i); if (qobject_cast(modified())->item(widgetItem->data(Qt::UserRole).toInt())) ui_items->selectedListWidget()->addItem(ui_items->availableListWidget()->takeItem(i--)); } for (int i = 0; i < ui_items->selectedListWidget()->count(); ++i) { QListWidgetItem* widgetItem = ui_items->selectedListWidget()->item(i); if (!qobject_cast(modified())->item(widgetItem->data(Qt::UserRole).toInt())) ui_items->availableListWidget()->addItem(ui_items->selectedListWidget()->takeItem(i--)); } ui_items->setButtonsEnabled(); } void StoreUI::apply() { *qobject_cast(original()) = *qobject_cast(modified()); emit(changed(false)); } void StoreUI::discard() { *qobject_cast(modified()) = *qobject_cast(original()); setGui(); emit(changed(false)); } void StoreUI::nameChanged(const QString& name) { const int cursor = ui_name->cursorPosition(); qobject_cast(modified())->setName(name); ui_name->setCursorPosition(cursor); } void StoreUI::itemAdded(QListWidgetItem* item) { qobject_cast(modified())->setItem(item->data(Qt::UserRole).toInt(), true); setGui(); } void StoreUI::itemRemoved(QListWidgetItem* item) { qobject_cast(modified())->setItem(item->data(Qt::UserRole).toInt(), false); setGui(); }