summaryrefslogtreecommitdiffstats
path: root/sigmodr/widgets/MapEffectUI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sigmodr/widgets/MapEffectUI.cpp')
-rw-r--r--sigmodr/widgets/MapEffectUI.cpp96
1 files changed, 52 insertions, 44 deletions
diff --git a/sigmodr/widgets/MapEffectUI.cpp b/sigmodr/widgets/MapEffectUI.cpp
index 075bc96f..f2565a7e 100644
--- a/sigmodr/widgets/MapEffectUI.cpp
+++ b/sigmodr/widgets/MapEffectUI.cpp
@@ -17,6 +17,7 @@
// Header include
#include "MapEffectUI.h"
+#include "MapEffectUI_p.h"
// Sigmodr core widget includes
#include <sigmodr/corewidgets/ScriptWidget.h>
@@ -32,10 +33,7 @@
#include <KLineEdit>
// Qt includes
-#include <QtCore/QFile>
#include <QtGui/QCheckBox>
-#include <QtGui/QVBoxLayout>
-#include <QtUiTools/QUiLoader>
using namespace Sigcore;
using namespace Sigmod;
@@ -43,76 +41,86 @@ using namespace Sigmodr::CoreWidgets;
using namespace Sigmodr::Widgets;
MapEffectUI::MapEffectUI(MapEffect* effect, QWidget* parent) :
- ObjectUI(parent)
+ ObjectUI(effect, parent),
+ d(new Private(new MapEffect(*effect)))
{
- setObjects(effect, new MapEffect(*effect));
+ setWidget(d->makeWidgets(this));
}
-void Sigmodr::Widgets::MapEffectUI::initGui()
+void MapEffectUI::apply()
{
- QFile file(":/gui/mapeffect.ui");
- file.open(QFile::ReadOnly);
- QWidget *formWidget = QUiLoader().load(&file, this);
- file.close();
- ui_name = formWidget->findChild<KLineEdit*>("varName");
- ui_skin = formWidget->findChild<KComboBox*>("varSkin");
- ui_script = formWidget->findChild<ScriptWidget*>("varScript");
- ui_isGhost = formWidget->findChild<QCheckBox*>("varIsGhost");
- connect(ui_name, SIGNAL(textChanged(QString)), this, SLOT(nameChanged(QString)));
- connect(ui_skin, SIGNAL(currentIndexChanged(int)), this, SLOT(skinChanged(int)));
- connect(ui_script, SIGNAL(valueChanged(Sigcore::Script)), this, SLOT(scriptChanged(Sigcore::Script)));
- connect(ui_isGhost, SIGNAL(toggled(bool)), this, SLOT(isGhostChanged(bool)));
- QVBoxLayout* layout = new QVBoxLayout;
- layout->addWidget(formWidget);
- setLayout(layout);
+ *qobject_cast<MapEffect*>(m_object) = *d->m_effect;
+ ObjectUI::apply();
}
-void MapEffectUI::refreshGui()
+void MapEffectUI::discard()
{
- for (int i = 0; i < game()->skinCount(); ++i)
- ui_skin->addItem(game()->skin(i)->name());
+ *d->m_effect = *qobject_cast<MapEffect*>(m_object);
+ d->resetGui();
+ ObjectUI::discard();
}
-void MapEffectUI::setGui()
+MapEffectUI::Private::Private(MapEffect* effect) :
+ ObjectUIPrivate(effect),
+ m_effect(effect)
{
- ui_name->setText(qobject_cast<MapEffect*>(modified())->name());
- ui_skin->setCurrentIndex(game()->skinIndex(qobject_cast<MapEffect*>(modified())->skin()));
- ui_script->setValue(qobject_cast<MapEffect*>(modified())->script());
- ui_isGhost->setCheckState(qobject_cast<MapEffect*>(modified())->isGhost() ? Qt::Checked : Qt::Unchecked);
}
-void MapEffectUI::apply()
+MapEffectUI::Private::~Private()
{
- *qobject_cast<MapEffect*>(original()) = *qobject_cast<MapEffect*>(modified());
- emit(changed(false));
+ delete m_effect;
}
-void MapEffectUI::discard()
+QWidget* MapEffectUI::Private::makeWidgets(ObjectUI* widget)
+{
+ QWidget *form = openUiFile(":/gui/mapeffect.ui", widget);
+ ui_name = form->findChild<KLineEdit*>("varName");
+ ui_skin = form->findChild<KComboBox*>("varSkin");
+ ui_script = form->findChild<ScriptWidget*>("varScript");
+ ui_isGhost = form->findChild<QCheckBox*>("varIsGhost");
+ connect(ui_name, SIGNAL(textChanged(QString)), this, SLOT(nameChanged(QString)));
+ connect(ui_skin, SIGNAL(currentIndexChanged(int)), this, SLOT(skinChanged(int)));
+ connect(ui_script, SIGNAL(valueChanged(Sigcore::Script)), this, SLOT(scriptChanged(Sigcore::Script)));
+ connect(ui_isGhost, SIGNAL(toggled(bool)), this, SLOT(isGhostChanged(bool)));
+ return form;
+}
+
+void MapEffectUI::Private::refreshGui()
+{
+ const bool blocked = ui_skin->blockSignals(true);
+ ui_skin->clear();
+ for (int i = 0; i < m_effect->game()->skinCount(); ++i)
+ ui_skin->addItem(m_effect->game()->skin(i)->name());
+ ui_skin->blockSignals(blocked);
+}
+
+void MapEffectUI::Private::resetGui()
{
- *qobject_cast<MapEffect*>(modified()) = *qobject_cast<MapEffect*>(original());
- setGui();
- emit(changed(false));
+ ui_name->setText(m_effect->name());
+ ui_skin->setCurrentIndex(m_effect->game()->skinIndex(m_effect->skin()));
+ ui_script->setValue(m_effect->script());
+ ui_isGhost->setCheckState(m_effect->isGhost() ? Qt::Checked : Qt::Unchecked);
}
-void MapEffectUI::nameChanged(const QString& name)
+void MapEffectUI::Private::nameChanged(const QString& name)
{
const int cursor = ui_name->cursorPosition();
- qobject_cast<MapEffect*>(modified())->setName(name);
+ m_effect->setName(name);
ui_name->setCursorPosition(cursor);
}
-void MapEffectUI::skinChanged(const int skin)
+void MapEffectUI::Private::skinChanged(const int skin)
{
if (0 <= skin)
- qobject_cast<MapEffect*>(modified())->setSkin(game()->skin(skin)->id());
+ m_effect->setSkin(m_effect->game()->skin(skin)->id());
}
-void MapEffectUI::scriptChanged(const Script& script)
+void MapEffectUI::Private::scriptChanged(const Script& script)
{
- qobject_cast<MapEffect*>(modified())->setScript(script);
+ m_effect->setScript(script);
}
-void MapEffectUI::isGhostChanged(const bool isGhost)
+void MapEffectUI::Private::isGhostChanged(const bool isGhost)
{
- qobject_cast<MapEffect*>(modified())->setIsGhost(isGhost);
+ m_effect->setIsGhost(isGhost);
}