From 42f4df80fc0a4b1188377c8b776e2938de692b84 Mon Sep 17 00:00:00 2001 From: Ben Boeckel Date: Fri, 20 Mar 2009 01:41:08 -0400 Subject: Fix up TileItem --- sigmodr/widgets/MapScene.cpp | 47 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) (limited to 'sigmodr/widgets/MapScene.cpp') 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 #include #include #include #include #include +#include #include // KDE includes #include #include +#include // Qt includes #include @@ -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)), 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 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() -- cgit