Skip to content

Commit 9fd7669

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 cab3ea3 commit 9fd7669

File tree

5 files changed

+39
-12
lines changed

5 files changed

+39
-12
lines changed

src/tiled/tilesetdock.cpp

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

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

1070-
QItemSelectionModel *s = view->selectionModel();
1071-
connect(s, &QItemSelectionModel::selectionChanged,
1070+
view->setModel(tilesetDocument->tilesetModel());
1071+
view->setSelectionModel(selectionModel);
1072+
1073+
connect(selectionModel, &QItemSelectionModel::selectionChanged,
10721074
this, &TilesetDock::selectionChanged);
1073-
connect(s, &QItemSelectionModel::currentChanged,
1075+
connect(selectionModel, &QItemSelectionModel::currentChanged,
10741076
this, &TilesetDock::currentChanged);
10751077
connect(view, &TilesetView::pressed,
10761078
this, &TilesetDock::indexPressed);

src/tiled/tilesetdocument.cpp

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

3536
#include <QCoreApplication>
3637
#include <QFileInfo>
38+
#include <QItemSelectionModel>
3739
#include <QQmlEngine>
3840
#include <QUndoStack>
3941

@@ -384,6 +386,22 @@ QList<Object *> TilesetDocument::currentObjects() const
384386
return Document::currentObjects();
385387
}
386388

389+
TilesetModel *TilesetDocument::tilesetModel()
390+
{
391+
if (!mTilesetModel)
392+
mTilesetModel = new TilesetModel(this, this);
393+
394+
return mTilesetModel;
395+
}
396+
397+
QItemSelectionModel *TilesetDocument::tilesetSelectionModel()
398+
{
399+
if (!mTilesetSelectionModel)
400+
mTilesetSelectionModel = new QItemSelectionModel(tilesetModel(), this);
401+
402+
return mTilesetSelectionModel;
403+
}
404+
387405
/**
388406
* Returns the WangColorModel instance for the given \a wangSet.
389407
* 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 : 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 : 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: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -280,11 +280,11 @@ void TilesetEditor::addDocument(Document *document)
280280
view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
281281
view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
282282

283-
TilesetModel *tilesetModel = new TilesetModel(tilesetDocument, view);
284-
view->setModel(tilesetModel);
283+
TilesetModel *tilesetModel = tilesetDocument->tilesetModel();
284+
QItemSelectionModel *selectionModel = tilesetDocument->tilesetSelectionModel();
285285

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

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

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

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