diff options
Diffstat (limited to 'sigmodr/widgets/MapScene.cpp')
| -rw-r--r-- | sigmodr/widgets/MapScene.cpp | 47 |
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() |
