#ifndef TILESETEDITORMETATILESELECTOR_H #define TILESETEDITORMETATILESELECTOR_H #include "selectablepixmapitem.h" #include "tileset.h" class Layout; class TilesetEditorMetatileSelector: public SelectablePixmapItem { Q_OBJECT public: TilesetEditorMetatileSelector(Tileset *primaryTileset, Tileset *secondaryTileset, Layout *layout); Layout *layout = nullptr; void draw(); bool select(uint16_t metatileId); void setTilesets(Tileset*, Tileset*, bool draw = true); uint16_t getSelectedMetatileId(); void updateSelectedMetatile(); QPoint getMetatileIdCoordsOnWidget(uint16_t metatileId); QImage buildPrimaryMetatilesImage(); QImage buildSecondaryMetatilesImage(); QVector usedMetatiles; bool selectorShowUnused = false; bool selectorShowCounts = false; protected: void mousePressEvent(QGraphicsSceneMouseEvent*); void mouseMoveEvent(QGraphicsSceneMouseEvent*); void mouseReleaseEvent(QGraphicsSceneMouseEvent*); void hoverMoveEvent(QGraphicsSceneHoverEvent*); void hoverLeaveEvent(QGraphicsSceneHoverEvent*); private: Tileset *primaryTileset = nullptr; Tileset *secondaryTileset = nullptr; uint16_t selectedMetatile; int numMetatilesWide; uint16_t getMetatileId(int x, int y); QPoint getMetatileIdCoords(uint16_t); bool shouldAcceptEvent(QGraphicsSceneMouseEvent*); void drawFilters(); void drawUnused(); void drawCounts(); QImage buildAllMetatilesImage(); QImage buildImage(int metatileIdStart, int numMetatiles); signals: void hoveredMetatileChanged(uint16_t); void hoveredMetatileCleared(); void selectedMetatileChanged(uint16_t); }; #endif // TILESETEDITORMETATILESELECTOR_H