summaryrefslogtreecommitdiffstats
path: root/sigmodr
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2009-03-20 01:41:08 -0400
committerBen Boeckel <MathStuf@gmail.com>2009-03-20 01:41:08 -0400
commit42f4df80fc0a4b1188377c8b776e2938de692b84 (patch)
treefb6f500b3c92338e14b3397a25712707847bdc8e /sigmodr
parente5985d56f8ff4ed33a3c282661cc9bf084c76e96 (diff)
downloadsigen-42f4df80fc0a4b1188377c8b776e2938de692b84.tar.gz
sigen-42f4df80fc0a4b1188377c8b776e2938de692b84.tar.xz
sigen-42f4df80fc0a4b1188377c8b776e2938de692b84.zip
Fix up TileItem
Diffstat (limited to 'sigmodr')
-rw-r--r--sigmodr/widgets/MapScene.cpp47
-rw-r--r--sigmodr/widgets/MapScene.h3
-rw-r--r--sigmodr/widgets/TileItem.cpp29
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());
}
}