Skip to content

Commit 9297068

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 7861a53 commit 9297068

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
@@ -1075,12 +1075,14 @@ TilesetView *TilesetDock::tilesetViewAt(int index) const
10751075

10761076
void TilesetDock::setupTilesetModel(TilesetView *view, TilesetDocument *tilesetDocument)
10771077
{
1078-
view->setModel(new TilesetModel(tilesetDocument, view));
1078+
QItemSelectionModel *selectionModel = tilesetDocument->tilesetSelectionModel();
10791079

1080-
QItemSelectionModel *s = view->selectionModel();
1081-
connect(s, &QItemSelectionModel::selectionChanged,
1080+
view->setModel(tilesetDocument->tilesetModel());
1081+
view->setSelectionModel(selectionModel);
1082+
1083+
connect(selectionModel, &QItemSelectionModel::selectionChanged,
10821084
this, &TilesetDock::selectionChanged);
1083-
connect(s, &QItemSelectionModel::currentChanged,
1085+
connect(selectionModel, &QItemSelectionModel::currentChanged,
10841086
this, &TilesetDock::currentChanged);
10851087
connect(view, &TilesetView::pressed,
10861088
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

@@ -389,6 +391,22 @@ QList<Object *> TilesetDocument::currentObjects() const
389391
return Document::currentObjects();
390392
}
391393

394+
TilesetModel *TilesetDocument::tilesetModel()
395+
{
396+
if (!mTilesetModel)
397+
mTilesetModel = new TilesetModel(this, this);
398+
399+
return mTilesetModel;
400+
}
401+
402+
QItemSelectionModel *TilesetDocument::tilesetSelectionModel()
403+
{
404+
if (!mTilesetSelectionModel)
405+
mTilesetSelectionModel = new QItemSelectionModel(tilesetModel(), this);
406+
407+
return mTilesetSelectionModel;
408+
}
409+
392410
/**
393411
* Returns the WangColorModel instance for the given \a wangSet.
394412
* 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
@@ -290,10 +290,10 @@ void TilesetEditor::addDocument(Document *document)
290290
view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
291291

292292
auto *tilesetModel = new TilesetModel(tilesetDocument, view);
293-
view->setModel(tilesetModel);
293+
auto *selectionModel = tilesetDocument->tilesetSelectionModel();
294294

295-
connect(tilesetDocument, &TilesetDocument::tileWangSetChanged,
296-
tilesetModel, &TilesetModel::tilesChanged);
295+
view->setModel(tilesetModel);
296+
view->setSelectionModel(selectionModel);
297297

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

308-
QItemSelectionModel *s = view->selectionModel();
309-
connect(s, &QItemSelectionModel::selectionChanged, this, &TilesetEditor::selectionChanged);
310-
connect(s, &QItemSelectionModel::currentChanged, this, &TilesetEditor::currentChanged);
308+
connect(selectionModel, &QItemSelectionModel::selectionChanged, this, &TilesetEditor::selectionChanged);
309+
connect(selectionModel, &QItemSelectionModel::currentChanged, this, &TilesetEditor::currentChanged);
311310
connect(view, &TilesetView::pressed, this, &TilesetEditor::indexPressed);
312311

313312
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)