From 4f838b979cf6b81a6d622fe1867b8bd52f27459e Mon Sep 17 00:00:00 2001 From: Marcus Huderle Date: Sun, 4 Mar 2018 10:19:03 -0800 Subject: [PATCH] Display hovered block selection in status bar --- editor.cpp | 20 ++++++++++++++++++++ editor.h | 5 +++++ map.cpp | 9 +++++++++ map.h | 2 ++ 4 files changed, 36 insertions(+) diff --git a/editor.cpp b/editor.cpp index 93f2657e..33da798c 100755 --- a/editor.cpp +++ b/editor.cpp @@ -257,6 +257,25 @@ void MetatilesPixmapItem::pick(uint tile) { emit map->paintTileChanged(map); } +void MetatilesPixmapItem::updateCurHoveredMetatile(QPointF pos) { + int x = ((int)pos.x()) / 16; + int y = ((int)pos.y()) / 16; + int width = pixmap().width() / 16; + int height = pixmap().height() / 16; + if (x < 0 || x >= width || y < 0 || y >= height) { + map->clearHoveredMetatile(); + } else { + int block = y * width + x; + map->hoveredMetatileChanged(block); + } +} + +void MetatilesPixmapItem::hoverMoveEvent(QGraphicsSceneHoverEvent *event) { + updateCurHoveredMetatile(event->pos()); +} +void MetatilesPixmapItem::hoverLeaveEvent(QGraphicsSceneHoverEvent *event) { + map->clearHoveredMetatile(); +} void MetatilesPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { QPointF pos = event->pos(); int x = ((int)pos.x()) / 16; @@ -269,6 +288,7 @@ void MetatilesPixmapItem::mousePressEvent(QGraphicsSceneMouseEvent *event) { } } void MetatilesPixmapItem::mouseMoveEvent(QGraphicsSceneMouseEvent *event) { + updateCurHoveredMetatile(event->pos()); mousePressEvent(event); } void MetatilesPixmapItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event) { diff --git a/editor.h b/editor.h index 15101e49..004084db 100755 --- a/editor.h +++ b/editor.h @@ -241,14 +241,19 @@ public: } MetatilesPixmapItem(Map *map_) { map = map_; + setAcceptHoverEvents(true); connect(map, SIGNAL(paintTileChanged(Map*)), this, SLOT(paintTileChanged(Map *))); } Map* map = NULL; virtual void pick(uint); virtual void draw(); +private: + void updateCurHoveredMetatile(QPointF pos); private slots: void paintTileChanged(Map *map); protected: + void hoverMoveEvent(QGraphicsSceneHoverEvent*); + void hoverLeaveEvent(QGraphicsSceneHoverEvent*); void mousePressEvent(QGraphicsSceneMouseEvent*); void mouseMoveEvent(QGraphicsSceneMouseEvent*); void mouseReleaseEvent(QGraphicsSceneMouseEvent*); diff --git a/map.cpp b/map.cpp index 4b33c182..48ab7653 100755 --- a/map.cpp +++ b/map.cpp @@ -745,3 +745,12 @@ void Map::hoveredTileChanged(int x, int y, int block) { void Map::clearHoveredTile() { emit statusBarMessage(QString("")); } + +void Map::hoveredMetatileChanged(int block) { + emit statusBarMessage(QString("Block: 0x%1") + .arg(QString("%1").arg(block, 3, 16, QChar('0')).toUpper())); +} + +void Map::clearHoveredMetatile() { + emit statusBarMessage(QString("")); +} diff --git a/map.h b/map.h index 01af4910..c0336a24 100755 --- a/map.h +++ b/map.h @@ -184,6 +184,8 @@ public: bool hasUnsavedChanges(); void hoveredTileChanged(int x, int y, int block); void clearHoveredTile(); + void hoveredMetatileChanged(int block); + void clearHoveredMetatile(); QList > getBlockPalettes(int metatile_index);