summaryrefslogtreecommitdiffstats
path: root/sigmodr/widgets/MapScene.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sigmodr/widgets/MapScene.cpp')
-rw-r--r--sigmodr/widgets/MapScene.cpp132
1 files changed, 132 insertions, 0 deletions
diff --git a/sigmodr/widgets/MapScene.cpp b/sigmodr/widgets/MapScene.cpp
new file mode 100644
index 00000000..c250deae
--- /dev/null
+++ b/sigmodr/widgets/MapScene.cpp
@@ -0,0 +1,132 @@
+/*
+ * Copyright 2008 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 "MapScene.h"
+
+// Sigmodr includes
+#include "EffectItem.h"
+#include "TileItem.h"
+#include "TrainerItem.h"
+#include "WarpItem.h"
+
+// Sigmod includes
+#include "../sigmod/Map.h"
+#include "../sigmod/MapEffect.h"
+#include "../sigmod/MapTile.h"
+#include "../sigmod/MapTrainer.h"
+#include "../sigmod/MapWarp.h"
+#include "../sigmod/Tile.h"
+
+// KDE includes
+#include <KComboBox>
+#include <KDialog>
+
+Sigmodr::MapScene::MapScene(Sigmod::Map* map, QObject* parent) :
+ QGraphicsScene(parent),
+ m_map(map)
+{
+ connect(this, SIGNAL(changed(QList<QRectF>)), this, SIGNAL(changed()));
+ for (int i = 0; i < m_map->effectCount(); ++i)
+ addItem(new EffectItem(m_map->effect(i), this));
+ for (int i = 0; i < m_map->tileCount(); ++i)
+ addItem(new TileItem(m_map->tile(i), this));
+ for (int i = 0; i < m_map->trainerCount(); ++i)
+ addItem(new TrainerItem(m_map->trainer(i), this));
+ for (int i = 0; i < m_map->warpCount(); ++i)
+ addItem(new WarpItem(m_map->warp(i), this));
+ typeChanged("Warps");
+}
+
+void Sigmodr::MapScene::addTile()
+{
+ KDialog* dialog = new KDialog;
+ dialog->setCaption("New Tile");
+ KComboBox* combo = new KComboBox;
+ for (int i = 0; i < m_map->sigmod()->tileCount(); ++i)
+ combo->addItem(m_map->sigmod()->tile(i)->name());
+ dialog->setMainWidget(combo);
+ if (dialog->exec() == KDialog::Ok)
+ {
+ Sigmod::MapTile* tile = m_map->newTile();
+ tile->setTile(m_map->sigmod()->tile(combo->currentIndex())->id());
+ TileItem* item = new TileItem(tile, this);
+ addItem(item);
+ m_tiles[tile] = item;
+ }
+ delete dialog;
+}
+
+void Sigmodr::MapScene::removeTiles()
+{
+ QList<QGraphicsItem*> items = selectedItems();
+ foreach (QGraphicsItem* item, items)
+ {
+ if (m_effects.key(static_cast<EffectItem*>(item)))
+ {
+ Sigmod::MapEffect* effect = m_effects.key(static_cast<EffectItem*>(item));
+ m_map->deleteEffectById(effect->id());
+ delete m_effects[effect];
+ m_effects.remove(effect);
+ }
+ else if (m_tiles.key(static_cast<TileItem*>(item)))
+ {
+ Sigmod::MapTile* tile = m_tiles.key(static_cast<TileItem*>(item));
+ m_map->deleteTileById(tile->id());
+ delete m_tiles[tile];
+ m_tiles.remove(tile);
+ }
+ else if (m_trainers.key(static_cast<TrainerItem*>(item)))
+ {
+ Sigmod::MapTrainer* trainer = m_trainers.key(static_cast<TrainerItem*>(item));
+ m_map->deleteTrainerById(trainer->id());
+ delete m_trainers[trainer];
+ m_trainers.remove(trainer);
+ }
+ else if (m_warps.key(static_cast<WarpItem*>(item)))
+ {
+ Sigmod::MapWarp* warp = m_warps.key(static_cast<WarpItem*>(item));
+ m_map->deleteWarpById(warp->id());
+ delete m_warps[warp];
+ m_warps.remove(warp);
+ }
+ }
+}
+
+void Sigmodr::MapScene::typeChanged(const QString& type)
+{
+ QGraphicsItem::GraphicsItemFlags effectFlags = 0;
+ QGraphicsItem::GraphicsItemFlags tileFlags = 0;
+ QGraphicsItem::GraphicsItemFlags trainerFlags = 0;
+ QGraphicsItem::GraphicsItemFlags warpFlags = 0;
+ if (type == "Effects")
+ effectFlags = QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable;
+ else if (type == "Tiles")
+ tileFlags = QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable;
+ else if (type == "Trainers")
+ trainerFlags = QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable;
+ else if (type == "Warps")
+ warpFlags = QGraphicsItem::ItemIsMovable | QGraphicsItem::ItemIsSelectable | QGraphicsItem::ItemIsFocusable;
+ foreach (EffectItem* effect, m_effects)
+ effect->setFlags(effectFlags);
+ foreach (TileItem* tile, m_tiles)
+ tile->setFlags(tileFlags);
+ foreach (TrainerItem* trainer, m_trainers)
+ trainer->setFlags(trainerFlags);
+ foreach (WarpItem* warp, m_warps)
+ warp->setFlags(warpFlags);
+}