Skip to content

Commit

Permalink
Qt 6: Types now need to be fully defined for use by meta-object system
Browse files Browse the repository at this point in the history
It appears types used in properties, signals, Q_INVOKABLE functions,
etc. now need to be fully defined even when only referenced by pointer.
This created many circular dependency issues, which is why I've opted to
change many of such occurrences to QObject* and adding qobject_cast or
static_cast where necessary.
  • Loading branch information
bjorn committed Oct 13, 2020
1 parent 272936f commit 1d6df01
Show file tree
Hide file tree
Showing 27 changed files with 114 additions and 81 deletions.
5 changes: 5 additions & 0 deletions src/tiled/editablelayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,11 @@ EditableLayer::~EditableLayer()
EditableManager::instance().mEditableLayers.remove(layer());
}

QObject *EditableLayer::mapAsObject() const
{
return map();
}

EditableMap *EditableLayer::map() const
{
return asset()->isMap() ? static_cast<EditableMap*>(asset()) : nullptr;
Expand Down
3 changes: 2 additions & 1 deletion src/tiled/editablelayer.h
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class EditableLayer : public EditableObject
Q_PROPERTY(bool visible READ isVisible WRITE setVisible)
Q_PROPERTY(bool locked READ isLocked WRITE setLocked)
Q_PROPERTY(QPointF offset READ offset WRITE setOffset)
Q_PROPERTY(Tiled::EditableMap *map READ map)
Q_PROPERTY(QObject *map READ mapAsObject)
Q_PROPERTY(bool selected READ isSelected WRITE setSelected)
Q_PROPERTY(bool isTileLayer READ isTileLayer CONSTANT)
Q_PROPERTY(bool isObjectLayer READ isObjectLayer CONSTANT)
Expand All @@ -60,6 +60,7 @@ class EditableLayer : public EditableObject
bool isVisible() const;
bool isLocked() const;
QPointF offset() const;
QObject *mapAsObject() const;
EditableMap *map() const;
bool isSelected() const;
bool isTileLayer() const;
Expand Down
4 changes: 2 additions & 2 deletions src/tiled/editablemap.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@
#pragma once

#include "editableasset.h"
#include "editablelayer.h"
#include "editableselectedarea.h"
#include "mapdocument.h"
#include "regionvaluetype.h"

Expand All @@ -29,9 +31,7 @@ namespace Tiled {
class MapObject;

class AutomappingManager;
class EditableLayer;
class EditableMapObject;
class EditableSelectedArea;
class EditableTileset;

class EditableMap : public EditableAsset
Expand Down
13 changes: 10 additions & 3 deletions src/tiled/editablemapobject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ QJSValue EditableMapObject::polygon() const
return array;
}

EditableTile *EditableMapObject::tile() const
QObject *EditableMapObject::tile() const
{
Tile *tile = mapObject()->cell().tile();
if (!tile)
Expand All @@ -104,11 +104,16 @@ bool EditableMapObject::isSelected() const
return false;
}

EditableObjectGroup *EditableMapObject::layer() const
QObject *EditableMapObject::layer() const
{
return EditableManager::instance().editableObjectGroup(asset(), mapObject()->objectGroup());
}

QObject *EditableMapObject::mapAsObject() const
{
return map();
}

EditableMap *EditableMapObject::map() const
{
return asset()->isMap() ? static_cast<EditableMap*>(asset()) : nullptr;
Expand Down Expand Up @@ -249,8 +254,10 @@ void EditableMapObject::setTextColor(const QColor &textColor)
setMapObjectProperty(MapObject::TextColorProperty, textColor);
}

void EditableMapObject::setTile(EditableTile *tile)
void EditableMapObject::setTile(QObject *tileAsObject)
{
EditableTile *tile = qobject_cast<EditableTile*>(tileAsObject);

if (Document *doc = document()) {
QList<MapObject *> mapObjects { mapObject() };
asset()->push(new ChangeMapObjectsTile(doc,
Expand Down
13 changes: 7 additions & 6 deletions src/tiled/editablemapobject.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,13 +70,13 @@ class EditableMapObject : public EditableObject
Q_PROPERTY(Qt::Alignment textAlignment READ textAlignment WRITE setTextAlignment)
Q_PROPERTY(bool wordWrap READ wordWrap WRITE setWordWrap)
Q_PROPERTY(QColor textColor READ textColor WRITE setTextColor)
Q_PROPERTY(Tiled::EditableTile *tile READ tile WRITE setTile)
Q_PROPERTY(QObject *tile READ tile WRITE setTile)
Q_PROPERTY(bool tileFlippedHorizontally READ tileFlippedHorizontally WRITE setTileFlippedHorizontally)
Q_PROPERTY(bool tileFlippedVertically READ tileFlippedVertically WRITE setTileFlippedVertically)
// Q_PROPERTY(const ObjectTemplate *mObjectTemplate)
Q_PROPERTY(bool selected READ isSelected WRITE setSelected)
Q_PROPERTY(Tiled::EditableObjectGroup *layer READ layer)
Q_PROPERTY(Tiled::EditableMap *map READ map)
Q_PROPERTY(QObject *layer READ layer)
Q_PROPERTY(QObject *map READ mapAsObject)
// Q_PROPERTY(ChangedProperties mChangedProperties)

public:
Expand Down Expand Up @@ -122,11 +122,12 @@ class EditableMapObject : public EditableObject
Qt::Alignment textAlignment() const;
bool wordWrap() const;
QColor textColor() const;
EditableTile *tile() const;
QObject *tile() const;
bool tileFlippedHorizontally() const;
bool tileFlippedVertically() const;
bool isSelected() const;
EditableObjectGroup *layer() const;
QObject *layer() const;
QObject *mapAsObject() const;
EditableMap *map() const;

MapObject *mapObject() const;
Expand Down Expand Up @@ -154,7 +155,7 @@ public slots:
void setTextAlignment(Qt::Alignment textAlignment);
void setWordWrap(bool wordWrap);
void setTextColor(const QColor &textColor);
void setTile(EditableTile *tile);
void setTile(QObject *tile);
void setTileFlippedHorizontally(bool tileFlippedHorizontally);
void setTileFlippedVertically(bool tileFlippedVertically);
void setSelected(bool selected);
Expand Down
5 changes: 5 additions & 0 deletions src/tiled/editableobject.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@ EditableObject::EditableObject(EditableAsset *asset,
{
}

QObject *EditableObject::assetAsObject() const
{
return asset();
}

bool EditableObject::isReadOnly() const
{
return asset() && asset()->isReadOnly();
Expand Down
3 changes: 2 additions & 1 deletion src/tiled/editableobject.h
Original file line number Diff line number Diff line change
Expand Up @@ -41,14 +41,15 @@ class EditableObject : public QObject
{
Q_OBJECT

Q_PROPERTY(Tiled::EditableAsset *asset READ asset)
Q_PROPERTY(QObject *asset READ assetAsObject)
Q_PROPERTY(bool readOnly READ isReadOnly)

public:
EditableObject(EditableAsset *asset,
Object *object,
QObject *parent = nullptr);

QObject *assetAsObject() const;
EditableAsset *asset() const;
virtual bool isReadOnly() const;

Expand Down
6 changes: 4 additions & 2 deletions src/tiled/editabletile.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ EditableTile::~EditableTile()
EditableManager::instance().mEditableTiles.remove(tile());
}

EditableObjectGroup *EditableTile::objectGroup() const
QObject *EditableTile::objectGroup() const
{
if (!mAttachedObjectGroup) {
mAttachedObjectGroup = tile()->objectGroup();
Expand Down Expand Up @@ -152,8 +152,10 @@ void EditableTile::setProbability(qreal probability)
tile()->setProbability(probability);
}

void EditableTile::setObjectGroup(EditableObjectGroup *editableObjectGroup)
void EditableTile::setObjectGroup(QObject *object)
{
EditableObjectGroup *editableObjectGroup = qobject_cast<EditableObjectGroup*>(object);

if (!editableObjectGroup) {
ScriptManager::instance().throwNullArgError(0);
return;
Expand Down
8 changes: 4 additions & 4 deletions src/tiled/editabletile.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,10 @@ class EditableTile : public EditableObject
Q_PROPERTY(QString type READ type WRITE setType)
Q_PROPERTY(QString imageFileName READ imageFileName WRITE setImageFileName)
Q_PROPERTY(qreal probability READ probability WRITE setProbability)
Q_PROPERTY(Tiled::EditableObjectGroup *objectGroup READ objectGroup WRITE setObjectGroup)
Q_PROPERTY(QObject *objectGroup READ objectGroup WRITE setObjectGroup)
Q_PROPERTY(QJSValue frames READ frames WRITE setFrames)
Q_PROPERTY(bool animated READ isAnimated)
Q_PROPERTY(Tiled::EditableTileset *tileset READ tileset)
Q_PROPERTY(QObject *tileset READ assetAsObject)

public:
enum Flags {
Expand Down Expand Up @@ -76,7 +76,7 @@ class EditableTile : public EditableObject
const QString &type() const;
QString imageFileName() const;
qreal probability() const;
EditableObjectGroup *objectGroup() const;
QObject *objectGroup() const;
QJSValue frames() const;
bool isAnimated() const;
EditableTileset *tileset() const;
Expand All @@ -93,7 +93,7 @@ public slots:
void setType(const QString &type);
void setImageFileName(const QString &fileName);
void setProbability(qreal probability);
void setObjectGroup(EditableObjectGroup *editableObjectGroup);
void setObjectGroup(QObject *editableObjectGroup);
void setFrames(QJSValue value);

private:
Expand Down
6 changes: 2 additions & 4 deletions src/tiled/editablewangset.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,13 @@

#pragma once

#include "editableobject.h"
#include "editabletile.h"
#include "wangset.h"

#include <QJSValue>

namespace Tiled {

class EditableTile;
class EditableTileset;
class TilesetDocument;

class EditableWangSet : public EditableObject
Expand All @@ -39,7 +37,7 @@ class EditableWangSet : public EditableObject
Q_PROPERTY(Type type READ type WRITE setType)
Q_PROPERTY(Tiled::EditableTile *imageTile READ imageTile WRITE setImageTile)
Q_PROPERTY(int colorCount READ colorCount WRITE setColorCount)
Q_PROPERTY(Tiled::EditableTileset *tileset READ tileset)
Q_PROPERTY(QObject *tileset READ assetAsObject)

public:
enum Type {
Expand Down
4 changes: 1 addition & 3 deletions src/tiled/mapdocument.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include "layer.h"
#include "map.h"
#include "mapformat.h"
#include "mapobject.h"
#include "tiled.h"
#include "tileset.h"

Expand All @@ -43,12 +44,9 @@ class QUndoStack;

namespace Tiled {

class Map;
class MapObject;
class MapRenderer;
class ObjectTemplate;
class Terrain;
class Tile;
class WangSet;

class LayerModel;
Expand Down
16 changes: 14 additions & 2 deletions src/tiled/mapeditor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -310,6 +310,11 @@ MapEditor::~MapEditor()
{
}

QObject *MapEditor::tilesetDock() const
{
return mTilesetDock;
}

void MapEditor::saveState()
{
preferences::mapEditorSize = mMainWindow->size();
Expand Down Expand Up @@ -581,6 +586,11 @@ void MapEditor::resetLayout()
mTileStampsDock->setVisible(false);
}

QObject *MapEditor::currentMapViewAsObject() const
{
return currentMapView();
}

Zoomable *MapEditor::zoomable() const
{
if (auto view = currentMapView())
Expand Down Expand Up @@ -1011,7 +1021,7 @@ SharedTileset MapEditor::currentTileset() const
return mTilesetDock->currentTileset();
}

EditableMap *MapEditor::currentBrush() const
QObject *MapEditor::currentBrush() const
{
const TileStamp &stamp = mStampBrush->stamp();
if (stamp.isEmpty())
Expand All @@ -1023,8 +1033,10 @@ EditableMap *MapEditor::currentBrush() const
return editableMap;
}

void MapEditor::setCurrentBrush(EditableMap *editableMap)
void MapEditor::setCurrentBrush(QObject *object)
{
EditableMap *editableMap = qobject_cast<EditableMap*>(object);

if (!editableMap) {
ScriptManager::instance().throwNullArgError(0);
return;
Expand Down
13 changes: 7 additions & 6 deletions src/tiled/mapeditor.h
Original file line number Diff line number Diff line change
Expand Up @@ -71,15 +71,15 @@ class MapEditor : public Editor
{
Q_OBJECT

Q_PROPERTY(Tiled::TilesetDock *tilesetsView READ tilesetDock)
Q_PROPERTY(Tiled::EditableMap *currentBrush READ currentBrush WRITE setCurrentBrush)
Q_PROPERTY(Tiled::MapView *currentMapView READ currentMapView)
Q_PROPERTY(QObject *tilesetsView READ tilesetDock)
Q_PROPERTY(QObject *currentBrush READ currentBrush WRITE setCurrentBrush)
Q_PROPERTY(QObject *currentMapView READ currentMapViewAsObject)

public:
explicit MapEditor(QObject *parent = nullptr);
~MapEditor() override;

TilesetDock *tilesetDock() const { return mTilesetDock; }
QObject *tilesetDock() const;
TemplatesDock *templatesDock() const { return mTemplatesDock; }

void saveState() override;
Expand All @@ -105,6 +105,7 @@ class MapEditor : public Editor

MapView *viewForDocument(MapDocument *mapDocument) const;
MapView *currentMapView() const;
QObject *currentMapViewAsObject() const;
Zoomable *zoomable() const override;

void saveDocumentState(MapDocument *mapDocument) const;
Expand All @@ -113,8 +114,8 @@ class MapEditor : public Editor
void setCurrentTileset(const SharedTileset &tileset);
SharedTileset currentTileset() const;

EditableMap *currentBrush() const;
void setCurrentBrush(EditableMap *editableMap);
QObject *currentBrush() const;
void setCurrentBrush(QObject *editableMap);

void addExternalTilesets(const QStringList &fileNames);

Expand Down
10 changes: 6 additions & 4 deletions src/tiled/scriptedtool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@

#include "brushitem.h"
#include "editablemap.h"
#include "editabletile.h"
#include "mapdocument.h"
#include "pluginmanager.h"
#include "scriptmanager.h"
Expand Down Expand Up @@ -60,13 +61,13 @@ ScriptedTool::~ScriptedTool()
PluginManager::removeObject(this);
}

EditableMap *ScriptedTool::editableMap() const
QObject *ScriptedTool::editableMap() const
{
return mapDocument() ? static_cast<EditableMap*>(mapDocument()->editable())
: nullptr;
}

EditableTile *ScriptedTool::editableTile() const
QObject *ScriptedTool::editableTile() const
{
if (Tile *t = tile()) {
auto tileset = t->tileset()->sharedPointer();
Expand All @@ -80,7 +81,7 @@ EditableTile *ScriptedTool::editableTile() const
return nullptr;
}

EditableMap *ScriptedTool::preview() const
QObject *ScriptedTool::preview() const
{
const auto &map = brushItem()->map();
if (!map)
Expand All @@ -91,8 +92,9 @@ EditableMap *ScriptedTool::preview() const
return editableMap;
}

void ScriptedTool::setPreview(EditableMap *editableMap)
void ScriptedTool::setPreview(QObject *object)
{
EditableMap *editableMap = qobject_cast<EditableMap*>(object);
if (!editableMap) {
ScriptManager::instance().throwNullArgError(0);
return;
Expand Down
Loading

0 comments on commit 1d6df01

Please sign in to comment.