summaryrefslogtreecommitdiffstats
path: root/sigmodr/widgets/TileUI.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sigmodr/widgets/TileUI.cpp')
-rw-r--r--sigmodr/widgets/TileUI.cpp77
1 files changed, 41 insertions, 36 deletions
diff --git a/sigmodr/widgets/TileUI.cpp b/sigmodr/widgets/TileUI.cpp
index ce393e14..476ee52c 100644
--- a/sigmodr/widgets/TileUI.cpp
+++ b/sigmodr/widgets/TileUI.cpp
@@ -17,6 +17,7 @@
// Header include
#include "TileUI.h"
+#include "TileUI_p.h"
// Sigmodr core widget includes
#include <sigmodr/corewidgets/ScriptWidget.h>
@@ -30,10 +31,7 @@
#include <KLineEdit>
// Qt includes
-#include <QtCore/QFile>
#include <QtGui/QCheckBox>
-#include <QtGui/QVBoxLayout>
-#include <QtUiTools/QUiLoader>
using namespace Sigcore;
using namespace Sigmod;
@@ -41,61 +39,68 @@ using namespace Sigmodr::CoreWidgets;
using namespace Sigmodr::Widgets;
TileUI::TileUI(Tile* tile, QWidget* parent) :
- ObjectUI(parent)
+ ObjectUI(tile, parent),
+ d(new Private(new Tile(*tile)))
{
- setObjects(tile, new Tile(*tile));
+ setWidget(d->makeWidgets(this));
}
-void TileUI::initGui()
+void TileUI::apply()
{
- QFile file(":/gui/tile.ui");
- file.open(QFile::ReadOnly);
- QWidget *formWidget = QUiLoader().load(&file, this);
- file.close();
- ui_name = formWidget->findChild<KLineEdit*>("varName");
- ui_walkable = formWidget->findChild<QCheckBox*>("varWalkable");
- ui_script = formWidget->findChild<ScriptWidget*>("varScript");
- connect(ui_name, SIGNAL(textChanged(QString)), this, SLOT(nameChanged(QString)));
- connect(ui_walkable, SIGNAL(toggled(bool)), this, SLOT(walkableChanged(bool)));
- connect(ui_script, SIGNAL(valueChanged(Sigcore::Script)), this, SLOT(scriptChanged(Sigcore::Script)));
- QVBoxLayout* layout = new QVBoxLayout;
- layout->addWidget(formWidget);
- setLayout(layout);
+ *qobject_cast<Tile*>(m_object) = *d->m_tile;
+ ObjectUI::apply();
}
-void TileUI::setGui()
+void TileUI::discard()
{
- ui_name->setText(qobject_cast<Tile*>(modified())->name());
- ui_walkable->setChecked(qobject_cast<Tile*>(modified())->walkable());
- ui_script->setValue(qobject_cast<Tile*>(modified())->script());
+ *d->m_tile = *qobject_cast<Tile*>(m_object);
+ d->resetGui();
+ ObjectUI::discard();
}
-void TileUI::apply()
+TileUI::Private::Private(Tile* tile) :
+ ObjectUIPrivate(tile),
+ m_tile(tile)
{
- *qobject_cast<Tile*>(original()) = *qobject_cast<Tile*>(modified());
- emit(changed(false));
}
-void TileUI::discard()
+TileUI::Private::~Private()
+{
+ delete m_tile;
+}
+
+QWidget* TileUI::Private::makeWidgets(ObjectUI* widget)
+{
+ QWidget *form = openUiFile(":/gui/tile.ui", widget);
+ ui_name = form->findChild<KLineEdit*>("varName");
+ ui_walkable = form->findChild<QCheckBox*>("varWalkable");
+ ui_script = form->findChild<ScriptWidget*>("varScript");
+ connect(ui_name, SIGNAL(textChanged(QString)), this, SLOT(nameChanged(QString)));
+ connect(ui_walkable, SIGNAL(toggled(bool)), this, SLOT(walkableChanged(bool)));
+ connect(ui_script, SIGNAL(valueChanged(Sigcore::Script)), this, SLOT(scriptChanged(Sigcore::Script)));
+ return form;
+}
+
+void TileUI::Private::resetGui()
{
- *qobject_cast<Tile*>(modified()) = *qobject_cast<Tile*>(original());
- setGui();
- emit(changed(false));
+ ui_name->setText(m_tile->name());
+ ui_walkable->setChecked(m_tile->walkable());
+ ui_script->setValue(m_tile->script());
}
-void TileUI::nameChanged(const QString& name)
+void TileUI::Private::nameChanged(const QString& name)
{
const int cursor = ui_name->cursorPosition();
- qobject_cast<Tile*>(modified())->setName(name);
+ m_tile->setName(name);
ui_name->setCursorPosition(cursor);
}
-void TileUI::walkableChanged(const bool walkable)
+void TileUI::Private::walkableChanged(const bool walkable)
{
- qobject_cast<Tile*>(modified())->setWalkable(walkable);
+ m_tile->setWalkable(walkable);
}
-void TileUI::scriptChanged(const Script& script)
+void TileUI::Private::scriptChanged(const Script& script)
{
- qobject_cast<Tile*>(modified())->setScript(script);
+ m_tile->setScript(script);
}