Skip to content

Commit ec6b9e2

Browse files
committed
Share the selection between Tilesets view and Tileset Editor
Now TilesetDocument owns a single TilesetModel and associated QItemSelectionModel, which are used by the TilesetView instances in the TilesetDock as well as in the TilesetEditor.
1 parent bd891d6 commit ec6b9e2

File tree

5 files changed

+38
-11
lines changed

5 files changed

+38
-11
lines changed

src/tiled/tilesetdock.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1062,12 +1062,14 @@ TilesetView *TilesetDock::tilesetViewAt(int index) const
10621062

10631063
void TilesetDock::setupTilesetModel(TilesetView *view, TilesetDocument *tilesetDocument)
10641064
{
1065-
view->setModel(new TilesetModel(tilesetDocument, view));
1065+
QItemSelectionModel *selectionModel = tilesetDocument->tilesetSelectionModel();
10661066

1067-
QItemSelectionModel *s = view->selectionModel();
1068-
connect(s, &QItemSelectionModel::selectionChanged,
1067+
view->setModel(tilesetDocument->tilesetModel());
1068+
view->setSelectionModel(selectionModel);
1069+
1070+
connect(selectionModel, &QItemSelectionModel::selectionChanged,
10691071
this, &TilesetDock::selectionChanged);
1070-
connect(s, &QItemSelectionModel::currentChanged,
1072+
connect(selectionModel, &QItemSelectionModel::currentChanged,
10711073
this, &TilesetDock::currentChanged);
10721074
connect(view, &TilesetView::pressed,
10731075
this, &TilesetDock::indexPressed);

src/tiled/tilesetdocument.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,14 @@
2727
#include "mapdocument.h"
2828
#include "tile.h"
2929
#include "tilesetformat.h"
30+
#include "tilesetmodel.h"
3031
#include "tilesetwangsetmodel.h"
3132
#include "wangcolormodel.h"
3233
#include "wangset.h"
3334

3435
#include <QCoreApplication>
3536
#include <QFileInfo>
37+
#include <QItemSelectionModel>
3638
#include <QQmlEngine>
3739
#include <QUndoStack>
3840

@@ -386,6 +388,22 @@ QList<Object *> TilesetDocument::currentObjects() const
386388
return Document::currentObjects();
387389
}
388390

391+
TilesetModel *TilesetDocument::tilesetModel()
392+
{
393+
if (!mTilesetModel)
394+
mTilesetModel = new TilesetModel(this, this);
395+
396+
return mTilesetModel;
397+
}
398+
399+
QItemSelectionModel *TilesetDocument::tilesetSelectionModel()
400+
{
401+
if (!mTilesetSelectionModel)
402+
mTilesetSelectionModel = new QItemSelectionModel(tilesetModel(), this);
403+
404+
return mTilesetSelectionModel;
405+
}
406+
389407
/**
390408
* Returns the WangColorModel instance for the given \a wangSet.
391409
* The model instances are created on-demand and owned by the document.

src/tiled/tilesetdocument.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,16 @@
3131
#include <memory>
3232
#include <unordered_map>
3333

34+
class QItemSelectionModel;
35+
3436
namespace Tiled {
3537

3638
class ObjectGroup;
3739
class WangColor;
3840

3941
class MapDocument;
4042
class TilesetDocument;
43+
class TilesetModel;
4144
class TilesetWangSetModel;
4245
class WangColorModel;
4346

@@ -109,6 +112,8 @@ class TilesetDocument final : public Document
109112

110113
TilesetWangSetModel *wangSetModel() const { return mWangSetModel; }
111114

115+
TilesetModel *tilesetModel();
116+
QItemSelectionModel *tilesetSelectionModel();
112117
WangColorModel *wangColorModel(WangSet *wangSet);
113118

114119
void setTileImage(Tile *tile, const QPixmap &image, const QUrl &source);
@@ -178,6 +183,8 @@ class TilesetDocument final : public Document
178183
SharedTileset mTileset;
179184
QList<MapDocument*> mMapDocuments;
180185

186+
TilesetModel *mTilesetModel = nullptr;
187+
QItemSelectionModel *mTilesetSelectionModel = nullptr;
181188
TilesetWangSetModel *mWangSetModel;
182189
std::unordered_map<WangSet*, std::unique_ptr<WangColorModel>> mWangColorModels;
183190

src/tiled/tileseteditor.cpp

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -282,10 +282,10 @@ void TilesetEditor::addDocument(Document *document)
282282
view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
283283

284284
auto *tilesetModel = new TilesetModel(tilesetDocument, view);
285-
view->setModel(tilesetModel);
285+
auto *selectionModel = tilesetDocument->tilesetSelectionModel();
286286

287-
connect(tilesetDocument, &TilesetDocument::tileWangSetChanged,
288-
tilesetModel, &TilesetModel::tilesChanged);
287+
view->setModel(tilesetModel);
288+
view->setSelectionModel(selectionModel);
289289

290290
connect(tilesetDocument, &TilesetDocument::tilesetChanged,
291291
this, &TilesetEditor::tilesetChanged);
@@ -297,9 +297,8 @@ void TilesetEditor::addDocument(Document *document)
297297
connect(view, &TilesetView::wangIdUsedChanged, mWangDock, &WangDock::onWangIdUsedChanged);
298298
connect(view, &TilesetView::currentWangIdChanged, mWangDock, &WangDock::onCurrentWangIdChanged);
299299

300-
QItemSelectionModel *s = view->selectionModel();
301-
connect(s, &QItemSelectionModel::selectionChanged, this, &TilesetEditor::selectionChanged);
302-
connect(s, &QItemSelectionModel::currentChanged, this, &TilesetEditor::currentChanged);
300+
connect(selectionModel, &QItemSelectionModel::selectionChanged, this, &TilesetEditor::selectionChanged);
301+
connect(selectionModel, &QItemSelectionModel::currentChanged, this, &TilesetEditor::currentChanged);
303302
connect(view, &TilesetView::pressed, this, &TilesetEditor::indexPressed);
304303

305304
mViewForTileset.insert(tilesetDocument, view);

src/tiled/tilesetmodel.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121

2222
#include "tilesetmodel.h"
2323

24-
#include "map.h"
2524
#include "relocatetiles.h"
2625
#include "tile.h"
2726
#include "tiled.h"
@@ -40,6 +39,8 @@ TilesetModel::TilesetModel(TilesetDocument *tilesetDocument, QObject *parent)
4039

4140
connect(tilesetDocument, &TilesetDocument::tileImageSourceChanged,
4241
this, &TilesetModel::tileChanged);
42+
connect(tilesetDocument, &TilesetDocument::tileWangSetChanged,
43+
this, &TilesetModel::tilesChanged);
4344
connect(tilesetDocument, &TilesetDocument::tileAnimationChanged,
4445
this, &TilesetModel::tileChanged);
4546
}

0 commit comments

Comments
 (0)