summaryrefslogtreecommitdiffstats
path: root/sigmodr/widgets/TileItem.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sigmodr/widgets/TileItem.cpp')
-rw-r--r--sigmodr/widgets/TileItem.cpp108
1 files changed, 43 insertions, 65 deletions
diff --git a/sigmodr/widgets/TileItem.cpp b/sigmodr/widgets/TileItem.cpp
index 7ddaf885..f3defd0b 100644
--- a/sigmodr/widgets/TileItem.cpp
+++ b/sigmodr/widgets/TileItem.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright 2008 Ben Boeckel <MathStuf@gmail.com>
+ * Copyright 2008-2009 Ben Boeckel <MathStuf@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -19,112 +19,90 @@
#include "TileItem.h"
// Sigmod includes
-#include "../sigmod/MapTile.h"
-#include "../sigmod/Sigmod.h"
-#include "../sigmod/Sprite.h"
-#include "../sigmod/Tile.h"
-
-// Sigcore includes
-#include "../sigcore/Script.h"
-
-// KDE includes
-#include <KColorScheme>
-#include <kross/core/action.h>
+#include <sigmod/Game.h>
+#include <sigmod/MapTile.h>
+#include <sigmod/Sprite.h>
+#include <sigmod/Tile.h>
// Qt includes
#include <QtGui/QPainter>
#include <QtGui/QStyle>
#include <QtGui/QStyleOptionGraphicsItem>
-Sigmodr::TileItem::TileItem(Sigmod::MapTile* tile, QObject* parent) :
- QObject(parent),
+using namespace Sigmod;
+using namespace Sigmodr::Widgets;
+
+TileItem::TileItem(MapTile* tile, QGraphicsScene* parent) :
+ MapItem(false, parent),
m_tile(tile)
{
connect(m_tile, SIGNAL(changed()), this, SLOT(tileChanged()));
tileChanged();
- setAcceptHoverEvents(true);
- Sigcore::Script script = m_tile->sigmod()->tileById(m_tile->tile())->script();
- m_action = new Kross::Action(this, QString("tile-%1").arg(m_tile->id()));
- m_action->addObject(this, "object");
- m_action->setInterpreter(script.interpreter());
- m_action->setCode(script.script().toUtf8());
- m_action->trigger();
+ setZValue(m_tile->zIndex());
+ QGraphicsSimpleTextItem* item = new QGraphicsSimpleTextItem(QString::number(m_tile->id()), this);
+ QSizeF size = item->boundingRect().size() / 2;
+ item->setPos(-size.width(), -size.height());
+ m_label = new QGraphicsSimpleTextItem(this);
+ resetLabel();
}
-QRectF Sigmodr::TileItem::boundingRect() const
+QRectF TileItem::boundingRect() const
{
- return m_pixmap.rect();
+ return QRect(m_tile->position(), m_pixmap.size());
}
-void Sigmodr::TileItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
+void TileItem::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget)
{
+ Q_UNUSED(option)
Q_UNUSED(widget)
- if (m_pixmap.isNull())
- return;
- if (!(flags() & QGraphicsItem::ItemIsSelectable))
- {
- QPixmap temp(m_pixmap.size());
- temp.fill(Qt::transparent);
- QPainter p;
- p.begin(&temp);
- p.setCompositionMode(QPainter::CompositionMode_DestinationIn);
- p.fillRect(temp.rect(), QColor(0, 0, 0, 127));
- p.end();
- painter->drawPixmap(0, 0, temp);
- }
painter->drawPixmap(0, 0, m_pixmap);
- if (option->state & QStyle::State_HasFocus)
- {
- painter->setPen(QPen(KStatefulBrush(KColorScheme::Selection, KColorScheme::FocusColor).brush(QPalette::Active), 6));
- painter->drawRect(m_pixmap.rect());
- }
- else if (option->state & QStyle::State_Selected)
- {
- painter->setPen(QPen(KStatefulBrush(KColorScheme::Selection, KColorScheme::ActiveBackground).brush(QPalette::Active), 6));
- painter->drawRect(m_pixmap.rect());
- }
- else if ((option->state & QStyle::State_MouseOver) && (flags() & QGraphicsItem::ItemIsSelectable))
- {
- painter->setPen(QPen(KStatefulBrush(KColorScheme::Selection, KColorScheme::HoverColor).brush(QPalette::Active), 6));
- painter->drawRect(m_pixmap.rect());
- }
}
-void Sigmodr::TileItem::setZIndex(const int zIndex)
+void TileItem::setZIndex(const int zIndex)
{
- if (zIndex < INT_MAX)
- m_tile->setZIndex(zIndex);
+ m_tile->setZIndex(zIndex);
}
-void Sigmodr::TileItem::changeSprite(const int spriteId)
+void TileItem::setSprite(const int spriteId)
{
- const Sigmod::Sprite* sprite = m_tile->sigmod()->spriteById(spriteId);
- if (sprite)
- m_pixmap.loadFromData(sprite->sprite());
- update();
+ const Sprite* sprite = m_tile->game()->spriteById(spriteId);
+ m_pixmap.loadFromData(sprite->sprite());
}
-void Sigmodr::TileItem::mousePressEvent(QGraphicsSceneMouseEvent* event)
+void TileItem::mousePressEvent(QGraphicsSceneMouseEvent* event)
{
QGraphicsItem::mousePressEvent(event);
update();
}
-void Sigmodr::TileItem::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
+void TileItem::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
{
QGraphicsItem::mouseMoveEvent(event);
m_tile->setPosition(scenePos().toPoint());
}
-void Sigmodr::TileItem::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
+void TileItem::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
{
QGraphicsItem::mouseReleaseEvent(event);
update();
}
-void Sigmodr::TileItem::tileChanged()
+void TileItem::tileChanged()
{
+ const Tile* tile = m_tile->game()->tileById(m_tile->tile());
+ if (tile)
+ setSprite(tile->preview());
setPos(m_tile->position());
- setZValue(m_tile->zIndex());
+ setZIndex(m_tile->zIndex());
+ resetLabel();
update();
}
+
+void TileItem::resetLabel()
+{
+ const Tile* tile = m_tile->game()->tileById(m_tile->tile());
+ if (tile)
+ m_label->setText(tile->name());
+ QSizeF size = m_label->boundingRect().size() / 2 - m_pixmap.size() / 2;
+ m_label->setPos(-size.width(), -size.height());
+}