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.cpp47
1 files changed, 45 insertions, 2 deletions
diff --git a/sigmodr/widgets/MapScene.cpp b/sigmodr/widgets/MapScene.cpp
index 220106c7..719a70e9 100644
--- a/sigmodr/widgets/MapScene.cpp
+++ b/sigmodr/widgets/MapScene.cpp
@@ -25,16 +25,19 @@
#include "WarpItem.h"
// Sigmod includes
+#include <sigmod/Game.h>
#include <sigmod/Map.h>
#include <sigmod/MapEffect.h>
#include <sigmod/MapTile.h>
#include <sigmod/MapTrainer.h>
#include <sigmod/MapWarp.h>
+#include <sigmod/Sprite.h>
#include <sigmod/Tile.h>
// KDE includes
#include <KComboBox>
#include <KDialog>
+#include <KMessageBox>
// Qt includes
#include <QtGui/QGraphicsView>
@@ -44,7 +47,8 @@ using namespace Sigmodr::Widgets;
MapScene::MapScene(Map* map, QObject* parent) :
QGraphicsScene(parent),
- m_map(map)
+ m_map(map),
+ m_tileBox(new KComboBox)
{
connect(this, SIGNAL(changed(QList<QRectF>)), this, SIGNAL(changed()));
for (int i = 0; i < m_map->effectCount(); ++i)
@@ -75,15 +79,54 @@ MapScene::MapScene(Map* map, QObject* parent) :
m_warps[warp] = item;
addItem(item);
}
+ int maxWidth = 0;
+ int maxHeight = 0;
+ for (int i = 0; i < m_map->game()->tileCount(); ++i)
+ {
+ const Tile* tile = m_map->game()->tile(i);
+ const Sprite* sprite = m_map->game()->spriteById(tile->preview());
+ QPixmap pixmap;
+ if (sprite)
+ pixmap.loadFromData(sprite->sprite());
+ m_tileBox->addItem(pixmap, tile->name(), tile->id());
+ maxWidth = qMax(maxWidth, pixmap.width());
+ maxHeight = qMax(maxHeight, pixmap.height());
+ }
+ m_tileBox->setIconSize(QSize(maxWidth, maxHeight));
+}
+
+MapScene::~MapScene()
+{
+ delete m_tileBox;
}
void MapScene::addTile()
{
+ if (!m_tileBox->count())
+ {
+ KMessageBox::error(NULL, "There are no tiles defined!", "No tiles");
+ return;
+ }
+ int tileId = -1;
+ KDialog* dialog = new KDialog;
+ dialog->setButtons(KDialog::Ok | KDialog::Cancel);
+ dialog->setCaption("New Tile");
+ dialog->setMainWidget(m_tileBox);
+ if (dialog->exec() == QDialog::Accepted)
+ tileId = m_tileBox->itemData(m_tileBox->currentIndex()).toInt();
+ m_tileBox->setParent(NULL);
+ delete dialog;
+ if (tileId < 0)
+ return;
MapTile* tile = m_map->newTile();
+ tile->setTile(tileId);
QList<QGraphicsView*> viewList = views();
if (viewList.size())
tile->setPosition(viewList[0]->mapToScene(QPoint(0, 0)).toPoint());
- m_tiles[tile] = new TileItem(tile, this);
+ TileItem* item = new TileItem(tile, this);
+ m_tiles[tile] = item;
+ addItem(item);
+ emit(changed());
}
void MapScene::removeSelected()