Merge pull request #719 from GriffinRichards/local-id

Support local ID strings, misc event fixes
This commit is contained in:
GriffinR
2025-04-24 16:16:31 -04:00
committed by GitHub
26 changed files with 627 additions and 461 deletions

View File

@@ -1,70 +0,0 @@
#ifndef DRAGGABLEPIXMAPITEM_H
#define DRAGGABLEPIXMAPITEM_H
#include <QString>
#include <QGraphicsItemGroup>
#include <QGraphicsPixmapItem>
#include <QGraphicsItemAnimation>
#include <QtWidgets>
#include "events.h"
class Editor;
class DraggablePixmapItem : public QObject, public QGraphicsPixmapItem {
Q_OBJECT
public:
DraggablePixmapItem(QPixmap pixmap): QGraphicsPixmapItem(pixmap) {}
DraggablePixmapItem(Event *event, Editor *editor) : QGraphicsPixmapItem(event->getPixmap()) {
this->event = event;
event->setPixmapItem(this);
this->editor = editor;
updatePosition();
}
Event *event = nullptr;
void updatePosition();
void move(int dx, int dy);
void moveTo(const QPoint &pos);
void emitPositionChanged();
void updatePixmap();
private:
Editor *editor = nullptr;
QPoint lastPos;
bool active = false;
bool releaseSelectionQueued = false;
signals:
void positionChanged(Event *event);
void xChanged(int);
void yChanged(int);
void elevationChanged(int);
void spriteChanged(QPixmap pixmap);
void onPropertyChanged(QString key, QString value);
public slots:
void set_x(int x) {
event->setX(x);
updatePosition();
}
void set_y(int y) {
event->setY(y);
updatePosition();
}
void set_elevation(int z) {
event->setElevation(z);
updatePosition();
}
protected:
void mousePressEvent(QGraphicsSceneMouseEvent*);
void mouseMoveEvent(QGraphicsSceneMouseEvent*);
void mouseReleaseEvent(QGraphicsSceneMouseEvent*);
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent*);
};
#endif // DRAGGABLEPIXMAPITEM_H

View File

@@ -57,7 +57,9 @@ protected:
bool initialized = false;
bool connected = false;
void populateDropdown(NoScrollComboBox * combo, const QStringList &items);
void populateScriptDropdown(NoScrollComboBox * combo, Project * project);
void populateIdNameDropdown(NoScrollComboBox * combo, Project * project, const QString &mapName, Event::Group group);
private:
Event *event;
@@ -78,6 +80,7 @@ public:
virtual void populate(Project *project) override;
public:
QLineEdit *line_edit_local_id;
NoScrollComboBox *combo_sprite;
NoScrollComboBox *combo_movement;
NoScrollSpinBox *spinner_radius_x;
@@ -108,12 +111,15 @@ public:
virtual void populate(Project *project) override;
public:
QLineEdit *line_edit_local_id;
NoScrollComboBox *combo_sprite;
NoScrollSpinBox *spinner_target_id;
NoScrollComboBox *combo_target_id;
NoScrollComboBox *combo_target_map;
private:
CloneObjectEvent *clone;
void tryInvalidateIdDropdown(Map *map);
};
@@ -131,12 +137,15 @@ public:
virtual void populate(Project *project) override;
public:
QLineEdit *line_edit_id;
NoScrollComboBox *combo_dest_map;
NoScrollComboBox *combo_dest_warp;
QPushButton *warning;
private:
WarpEvent *warp;
void tryInvalidateIdDropdown(Map *map);
};
@@ -275,6 +284,8 @@ public:
private:
HealLocationEvent *healLocation;
void tryInvalidateIdDropdown(Map *map);
};
#endif // EVENTRAMES_H

View File

@@ -0,0 +1,58 @@
#ifndef EVENTPIXMAPITEM_H
#define EVENTPIXMAPITEM_H
#include <QString>
#include <QGraphicsItemGroup>
#include <QGraphicsPixmapItem>
#include <QGraphicsItemAnimation>
#include <QtWidgets>
#include "events.h"
class Project;
class EventPixmapItem : public QObject, public QGraphicsPixmapItem {
Q_OBJECT
public:
explicit EventPixmapItem(Event *event);
void render(Project *project);
bool isSelected() const { return m_selected; }
void setSelected(bool selected) { m_selected = selected; }
Event * getEvent() const { return m_event; }
void move(int dx, int dy);
void moveTo(int x, int y);
void moveTo(const QPoint &pos);
private:
QPixmap m_basePixmap;
Event *const m_event = nullptr;
QPoint m_lastPos;
bool m_active = false;
bool m_selected = false;
bool m_releaseSelectionQueued = false;
void updatePixelPosition();
signals:
void xChanged(int x);
void yChanged(int y);
void posChanged(int x, int y);
void rendered(const QPixmap &pixmap);
void selected(Event *event, bool toggle);
void dragged(Event *event, const QPoint &oldPosition, const QPoint &newPosition);
void released(Event *event, const QPoint &position);
void doubleClicked(Event *event);
protected:
virtual void mousePressEvent(QGraphicsSceneMouseEvent*) override;
virtual void mouseMoveEvent(QGraphicsSceneMouseEvent*) override;
virtual void mouseReleaseEvent(QGraphicsSceneMouseEvent*) override;
virtual void mouseDoubleClickEvent(QGraphicsSceneMouseEvent*) override { emit doubleClicked(m_event); }
};
#endif // EVENTPIXMAPITEM_H

View File

@@ -45,25 +45,4 @@ protected:
virtual void keyPressEvent(QKeyEvent *event) override;
};
class Editor;
// TODO: This should just be MapView. It makes map-based assumptions, and no other class inherits GraphicsView.
class GraphicsView : public QGraphicsView
{
public:
GraphicsView() : QGraphicsView() {}
GraphicsView(QWidget *parent) : QGraphicsView(parent) {}
public:
// GraphicsView_Object object;
Editor *editor;
protected:
virtual void mousePressEvent(QMouseEvent *event) override;
virtual void mouseMoveEvent(QMouseEvent *event) override;
virtual void mouseReleaseEvent(QMouseEvent *event) override;
virtual void moveEvent(QMoveEvent *event) override;
};
//Q_DECLARE_METATYPE(GraphicsView)
#endif // GRAPHICSVIEW_H

View File

@@ -5,13 +5,17 @@
#include "graphicsview.h"
#include "overlay.h"
class MapView : public GraphicsView
class Editor;
class MapView : public QGraphicsView
{
Q_OBJECT
public:
MapView() : GraphicsView() {}
MapView(QWidget *parent) : GraphicsView(parent) {}
MapView() : QGraphicsView() {}
MapView(QWidget *parent) : QGraphicsView(parent) {}
Editor *editor;
Overlay * getOverlay(int layer);
void clearOverlayMap();
@@ -73,6 +77,7 @@ public:
protected:
virtual void drawForeground(QPainter *painter, const QRectF &rect) override;
virtual void keyPressEvent(QKeyEvent*) override;
virtual void moveEvent(QMoveEvent *event) override;
private:
QMap<int, Overlay*> overlayMap;