diff options
author | Ben Boeckel <MathStuf@gmail.com> | 2009-03-20 01:41:08 -0400 |
---|---|---|
committer | Ben Boeckel <MathStuf@gmail.com> | 2009-03-20 01:41:08 -0400 |
commit | 42f4df80fc0a4b1188377c8b776e2938de692b84 (patch) | |
tree | fb6f500b3c92338e14b3397a25712707847bdc8e /sigmodr | |
parent | e5985d56f8ff4ed33a3c282661cc9bf084c76e96 (diff) | |
download | sigen-42f4df80fc0a4b1188377c8b776e2938de692b84.tar.gz sigen-42f4df80fc0a4b1188377c8b776e2938de692b84.tar.xz sigen-42f4df80fc0a4b1188377c8b776e2938de692b84.zip |
Fix up TileItem
Diffstat (limited to 'sigmodr')
-rw-r--r-- | sigmodr/widgets/MapScene.cpp | 47 | ||||
-rw-r--r-- | sigmodr/widgets/MapScene.h | 3 | ||||
-rw-r--r-- | sigmodr/widgets/TileItem.cpp | 29 |
3 files changed, 72 insertions, 7 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() diff --git a/sigmodr/widgets/MapScene.h b/sigmodr/widgets/MapScene.h index 078b1f6c..256bac8d 100644 --- a/sigmodr/widgets/MapScene.h +++ b/sigmodr/widgets/MapScene.h @@ -26,6 +26,7 @@ #include <QtGui/QGraphicsScene> // Forward declarations +class KComboBox; namespace Sigmod { class Map; @@ -50,6 +51,7 @@ class SIGMODRWIDGETS_NO_EXPORT MapScene : public QGraphicsScene public: MapScene(Sigmod::Map* map, QObject* parent); + ~MapScene(); public slots: void addTile(); void removeSelected(); @@ -73,6 +75,7 @@ class SIGMODRWIDGETS_NO_EXPORT MapScene : public QGraphicsScene QMap<Sigmod::MapTile*, TileItem*> m_tiles; QMap<Sigmod::MapTrainer*, TrainerItem*> m_trainers; QMap<Sigmod::MapWarp*, WarpItem*> m_warps; + KComboBox* m_tileBox; }; } } diff --git a/sigmodr/widgets/TileItem.cpp b/sigmodr/widgets/TileItem.cpp index f1911d2d..4c7b3b74 100644 --- a/sigmodr/widgets/TileItem.cpp +++ b/sigmodr/widgets/TileItem.cpp @@ -24,6 +24,9 @@ #include <sigmod/Sprite.h> #include <sigmod/Tile.h> +// KDE includes +#include <KColorScheme> + // Qt includes #include <QtGui/QPainter> #include <QtGui/QStyle> @@ -35,7 +38,7 @@ using namespace Sigmodr::Widgets; TileItem::TileItem(MapTile* tile, QGraphicsScene* parent) : MapItem(parent), m_tile(tile), - m_tileIndex(-1) + m_tileIndex(INT_MIN) { connect(m_tile, SIGNAL(changed()), this, SLOT(tileChanged())); connect(m_tile, SIGNAL(error(QString)), this, SLOT(tileChanged())); @@ -46,12 +49,26 @@ TileItem::TileItem(MapTile* tile, QGraphicsScene* parent) : QRectF TileItem::boundingRect() const { - return QRect(m_tile->position(), m_pixmap.size()); + return QRect(m_tile->position(), m_pixmap.isNull() ? QSize(32, 32) : m_pixmap.size()); } void TileItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { - painter->drawPixmap(0, 0, m_pixmap); + if (m_pixmap.isNull()) + { + QPainterPath path; + path.moveTo(8, 24); + path.lineTo(24, 8); + path.moveTo(8, 8); + path.lineTo(24, 24); + painter->setPen(QPen(Qt::red, 5)); + painter->setBrush(Qt::NoBrush); + painter->drawPath(path); + } + else + painter->drawPixmap(0, 0, m_pixmap); + painter->setBrush(KStatefulBrush(KColorScheme::Selection, KColorScheme::HoverColor).brush(QPalette::Active)); + painter->setOpacity(.25); MapItem::paint(painter, option, widget); } @@ -65,7 +82,9 @@ void TileItem::setSprite(const int spriteId) if (spriteId == m_tileIndex) return; const Sprite* sprite = m_tile->game()->spriteById(spriteId); - m_pixmap.loadFromData(sprite->sprite()); + if (!sprite || !m_pixmap.loadFromData(sprite->sprite())) + m_pixmap = QPixmap(); + prepareGeometryChange(); m_tileIndex = spriteId; } @@ -91,7 +110,7 @@ void TileItem::resetLabel() if (tile) { m_label->setText(tile->name()); - QSizeF size = m_label->boundingRect().size() / 2 - m_pixmap.size() / 2; + QSizeF size = m_label->boundingRect().size() / 2 - (m_pixmap.isNull() ? QSize(32, 32) : m_pixmap.size()) / 2; m_label->setPos(-size.width(), -size.height()); } } |