Skip to content

Commit 0c4d7fe

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 0c4d7fe

File tree

5 files changed

+50
-23
lines changed

5 files changed

+50
-23
lines changed

src/tiled/tilesetdock.cpp

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,10 @@ class NoTilesetWidget : public QWidget
8484
explicit NoTilesetWidget(QWidget *parent = nullptr)
8585
: QWidget(parent)
8686
{
87-
QPushButton *newTilesetButton = new QPushButton(this);
87+
auto newTilesetButton = new QPushButton(this);
8888
newTilesetButton->setText(tr("New Tileset..."));
8989

90-
QGridLayout *gridLayout = new QGridLayout(this);
90+
auto gridLayout = new QGridLayout(this);
9191
gridLayout->addWidget(newTilesetButton, 0, 0, Qt::AlignCenter);
9292

9393
connect(newTilesetButton, &QPushButton::clicked, [] {
@@ -201,14 +201,14 @@ TilesetDock::TilesetDock(QWidget *parent)
201201
connect(mTabBar, &QWidget::customContextMenuRequested,
202202
this, &TilesetDock::tabContextMenuRequested);
203203

204-
QWidget *w = new QWidget(this);
204+
auto w = new QWidget(this);
205205

206-
QHBoxLayout *horizontal = new QHBoxLayout;
206+
auto horizontal = new QHBoxLayout;
207207
horizontal->setSpacing(0);
208208
horizontal->addWidget(mTabBar);
209209
horizontal->addWidget(mTilesetMenuButton);
210210

211-
QVBoxLayout *vertical = new QVBoxLayout(w);
211+
auto vertical = new QVBoxLayout(w);
212212
vertical->setSpacing(0);
213213
vertical->setContentsMargins(0, 0, 0, 0);
214214
vertical->addLayout(horizontal);
@@ -481,7 +481,7 @@ void TilesetDock::currentChanged(const QModelIndex &index)
481481
if (!index.isValid())
482482
return;
483483

484-
const TilesetModel *model = static_cast<const TilesetModel*>(index.model());
484+
auto model = static_cast<const TilesetModel*>(index.model());
485485
setCurrentTile(model->tileAt(index));
486486
}
487487

@@ -583,7 +583,7 @@ void TilesetDock::createTilesetView(int index, TilesetDocument *tilesetDocument)
583583

584584
mTilesetDocuments.insert(index, tilesetDocument);
585585

586-
TilesetView *view = new TilesetView;
586+
auto view = new TilesetView;
587587

588588
// Hides the "New Tileset..." special view if it is shown.
589589
mSuperViewStack->setCurrentIndex(1);
@@ -909,7 +909,7 @@ void TilesetDock::onTilesetLayoutChanged(const QList<QPersistentModelIndex> &par
909909
for (int i = 0, rows = mTilesetDocumentsFilterModel->rowCount(); i < rows; ++i) {
910910
const QModelIndex index = mTilesetDocumentsFilterModel->index(i, 0);
911911
const QVariant var = mTilesetDocumentsFilterModel->data(index, TilesetDocumentsModel::TilesetDocumentRole);
912-
TilesetDocument *tilesetDocument = var.value<TilesetDocument*>();
912+
auto tilesetDocument = var.value<TilesetDocument*>();
913913
int currentIndex = mTilesetDocuments.indexOf(tilesetDocument);
914914
if (currentIndex != i) {
915915
Q_ASSERT(currentIndex > i);
@@ -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);
@@ -1195,7 +1197,7 @@ void TilesetDock::embedTileset()
11951197

11961198
void TilesetDock::tilesetFileNameChanged(const QString &fileName)
11971199
{
1198-
TilesetDocument *tilesetDocument = static_cast<TilesetDocument*>(sender());
1200+
auto tilesetDocument = static_cast<TilesetDocument*>(sender());
11991201

12001202
const int index = mTilesetDocuments.indexOf(tilesetDocument);
12011203
Q_ASSERT(index != -1);

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: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -289,11 +289,11 @@ void TilesetEditor::addDocument(Document *document)
289289
view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
290290
view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
291291

292-
auto *tilesetModel = new TilesetModel(tilesetDocument, view);
293-
view->setModel(tilesetModel);
292+
auto *tilesetModel = tilesetDocument->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);
@@ -318,7 +317,7 @@ void TilesetEditor::addDocument(Document *document)
318317

319318
void TilesetEditor::removeDocument(Document *document)
320319
{
321-
TilesetDocument *tilesetDocument = qobject_cast<TilesetDocument*>(document);
320+
auto tilesetDocument = qobject_cast<TilesetDocument*>(document);
322321
Q_ASSERT(tilesetDocument);
323322
Q_ASSERT(mViewForTileset.contains(tilesetDocument));
324323

src/tiled/tilesetmodel.cpp

Lines changed: 3 additions & 2 deletions
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
}
@@ -135,7 +136,7 @@ QMimeData *TilesetModel::mimeData(const QModelIndexList &indexes) const
135136
if (encodedData.isEmpty())
136137
return nullptr;
137138

138-
QMimeData *mimeData = new QMimeData;
139+
auto mimeData = new QMimeData;
139140
mimeData->setData(QLatin1String(TILES_MIMETYPE), encodedData);
140141
return mimeData;
141142
}

0 commit comments

Comments
 (0)