porymap/include/ui/metatileselector.h

67 lines
2.3 KiB
C
Raw Normal View History

#ifndef METATILESELECTOR_H
#define METATILESELECTOR_H
#include <QPair>
#include "selectablepixmapitem.h"
#include "map.h"
2018-09-25 01:12:29 +01:00
#include "tileset.h"
#include "maplayout.h"
2021-02-18 00:20:14 +00:00
class MetatileSelector : public SelectablePixmapItem {
Q_OBJECT
public:
2021-02-18 00:20:14 +00:00
MetatileSelector(int numMetatilesWide, Map* map) : SelectablePixmapItem(16, 16) {
this->externalSelection = false;
this->numMetatilesWide = numMetatilesWide;
this->map = map;
this->primaryTileset = map->layout->tileset_primary;
this->secondaryTileset = map->layout->tileset_secondary;
this->selectedMetatiles = new QList<uint16_t>();
this->selectedCollisions = new QList<QPair<uint16_t, uint16_t>>();
this->externalSelectedMetatiles = new QList<uint16_t>();
setAcceptHoverEvents(true);
}
QPoint getSelectionDimensions();
void draw();
bool select(uint16_t metatile);
bool selectFromMap(uint16_t metatileId, uint16_t collision, uint16_t elevation);
void setTilesets(Tileset*, Tileset*);
QList<uint16_t>* getSelectedMetatiles();
QList<QPair<uint16_t, uint16_t>>* getSelectedCollisions();
void setExternalSelection(int, int, QList<uint16_t>, QList<QPair<uint16_t, uint16_t>>);
2018-10-08 20:42:51 +01:00
QPoint getMetatileIdCoordsOnWidget(uint16_t);
2020-07-15 00:10:55 +01:00
void setMap(Map*);
2021-02-18 00:20:14 +00:00
protected:
void mousePressEvent(QGraphicsSceneMouseEvent*);
void mouseMoveEvent(QGraphicsSceneMouseEvent*);
void mouseReleaseEvent(QGraphicsSceneMouseEvent*);
void hoverMoveEvent(QGraphicsSceneHoverEvent*);
void hoverLeaveEvent(QGraphicsSceneHoverEvent*);
2021-02-18 00:20:14 +00:00
private:
bool externalSelection;
int numMetatilesWide;
2021-02-18 00:20:14 +00:00
Map* map;
Tileset* primaryTileset;
Tileset* secondaryTileset;
QList<uint16_t>* selectedMetatiles;
QList<QPair<uint16_t, uint16_t>>* selectedCollisions;
int externalSelectionWidth;
int externalSelectionHeight;
2021-02-18 00:20:14 +00:00
QList<uint16_t>* externalSelectedMetatiles;
void updateSelectedMetatiles();
uint16_t getMetatileId(int x, int y);
QPoint getMetatileIdCoords(uint16_t);
bool shouldAcceptEvent(QGraphicsSceneMouseEvent*);
bool selectionIsValid();
signals:
void hoveredMetatileSelectionChanged(uint16_t);
void hoveredMetatileSelectionCleared();
void selectedMetatilesChanged();
};
#endif // METATILESELECTOR_H