diff options
Diffstat (limited to 'sigmodr/widgets/TileItem.cpp')
| -rw-r--r-- | sigmodr/widgets/TileItem.cpp | 108 |
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()); +} |
