4949namespace Tiled {
5050
5151EditableMap::EditableMap (QObject *parent)
52- : EditableAsset( nullptr , new Map(), parent)
52+ : EditableMap(std::make_unique< Map> (), parent)
5353{
54- mDetachedMap .reset (map ());
5554}
5655
5756EditableMap::EditableMap (MapDocument *mapDocument, QObject *parent)
58- : EditableAsset(mapDocument, mapDocument->map (), parent)
59- , mSelectedArea(new EditableSelectedArea(mapDocument, this ))
57+ : EditableAsset(mapDocument->map (), parent)
6058{
61- connect (mapDocument, &Document::fileNameChanged, this , &EditableAsset::fileNameChanged);
62- connect (mapDocument, &Document::changed, this , &EditableMap::documentChanged);
63- connect (mapDocument, &MapDocument::layerAdded, this , &EditableMap::attachLayer);
64- connect (mapDocument, &MapDocument::layerRemoved, this , &EditableMap::detachLayer);
65-
66- connect (mapDocument, &MapDocument::currentLayerChanged, this , &EditableMap::currentLayerChanged);
67- connect (mapDocument, &MapDocument::selectedLayersChanged, this , &EditableMap::selectedLayersChanged);
68- connect (mapDocument, &MapDocument::selectedObjectsChanged, this , &EditableMap::selectedObjectsChanged);
69-
70- connect (mapDocument, &MapDocument::regionEdited, this , &EditableMap::onRegionEdited);
59+ setDocument (mapDocument);
7160}
7261
7362/* *
@@ -76,14 +65,13 @@ EditableMap::EditableMap(MapDocument *mapDocument, QObject *parent)
7665 * The map's lifetime must exceed that of the EditableMap instance.
7766 */
7867EditableMap::EditableMap (const Map *map, QObject *parent)
79- : EditableAsset(nullptr , const_cast <Map*>(map), parent)
68+ : EditableAsset(const_cast <Map*>(map), parent)
8069 , mReadOnly(true )
81- , mSelectedArea(nullptr )
8270{
8371}
8472
8573EditableMap::EditableMap (std::unique_ptr<Map> map, QObject *parent)
86- : EditableAsset(nullptr , map.get(), parent)
74+ : EditableAsset(map.get(), parent)
8775 , mDetachedMap(std::move(map))
8876{
8977}
@@ -671,15 +659,26 @@ void EditableMap::setSelectedObjects(const QList<QObject *> &objects)
671659QSharedPointer<Document> EditableMap::createDocument ()
672660{
673661 Q_ASSERT (mDetachedMap );
662+ Q_ASSERT (!document ());
674663
675664 auto document = MapDocumentPtr::create (std::move (mDetachedMap ));
676- document->setEditable (std::unique_ptr<EditableAsset>(this ));
665+ setDocument (document.data ());
666+
667+ return document;
668+ }
677669
678- mSelectedArea = new EditableSelectedArea (document.data (), this );
670+ EditableMap *EditableMap::get (MapDocument *mapDocument)
671+ {
672+ if (!mapDocument)
673+ return nullptr ;
679674
680- QQmlEngine::setObjectOwnership (this , QQmlEngine::CppOwnership);
675+ auto editable = EditableMap::find (mapDocument->map ());
676+ if (editable)
677+ return editable;
681678
682- return document;
679+ editable = new EditableMap (mapDocument);
680+ // editable->moveOwnershipToCpp();
681+ return editable;
683682}
684683
685684void EditableMap::documentChanged (const ChangeEvent &change)
@@ -759,6 +758,24 @@ MapRenderer *EditableMap::renderer() const
759758 return mRenderer .get ();
760759}
761760
761+ void EditableMap::setDocument (MapDocument *mapDocument)
762+ {
763+ EditableAsset::setDocument (mapDocument);
764+
765+ mSelectedArea = new EditableSelectedArea (mapDocument, this );
766+
767+ connect (mapDocument, &Document::fileNameChanged, this , &EditableAsset::fileNameChanged);
768+ connect (mapDocument, &Document::changed, this , &EditableMap::documentChanged);
769+ connect (mapDocument, &MapDocument::layerAdded, this , &EditableMap::attachLayer);
770+ connect (mapDocument, &MapDocument::layerRemoved, this , &EditableMap::detachLayer);
771+
772+ connect (mapDocument, &MapDocument::currentLayerChanged, this , &EditableMap::currentLayerChanged);
773+ connect (mapDocument, &MapDocument::selectedLayersChanged, this , &EditableMap::selectedLayersChanged);
774+ connect (mapDocument, &MapDocument::selectedObjectsChanged, this , &EditableMap::selectedObjectsChanged);
775+
776+ connect (mapDocument, &MapDocument::regionEdited, this , &EditableMap::onRegionEdited);
777+ }
778+
762779} // namespace Tiled
763780
764781#include " moc_editablemap.cpp"
0 commit comments