diff --git a/src/tiled/tilesetdock.cpp b/src/tiled/tilesetdock.cpp index c13608796d..113c925e76 100644 --- a/src/tiled/tilesetdock.cpp +++ b/src/tiled/tilesetdock.cpp @@ -84,10 +84,10 @@ class NoTilesetWidget : public QWidget explicit NoTilesetWidget(QWidget *parent = nullptr) : QWidget(parent) { - QPushButton *newTilesetButton = new QPushButton(this); + auto newTilesetButton = new QPushButton(this); newTilesetButton->setText(tr("New Tileset...")); - QGridLayout *gridLayout = new QGridLayout(this); + auto gridLayout = new QGridLayout(this); gridLayout->addWidget(newTilesetButton, 0, 0, Qt::AlignCenter); connect(newTilesetButton, &QPushButton::clicked, [] { @@ -201,14 +201,14 @@ TilesetDock::TilesetDock(QWidget *parent) connect(mTabBar, &QWidget::customContextMenuRequested, this, &TilesetDock::tabContextMenuRequested); - QWidget *w = new QWidget(this); + auto w = new QWidget(this); - QHBoxLayout *horizontal = new QHBoxLayout; + auto horizontal = new QHBoxLayout; horizontal->setSpacing(0); horizontal->addWidget(mTabBar); horizontal->addWidget(mTilesetMenuButton); - QVBoxLayout *vertical = new QVBoxLayout(w); + auto vertical = new QVBoxLayout(w); vertical->setSpacing(0); vertical->setContentsMargins(0, 0, 0, 0); vertical->addLayout(horizontal); @@ -481,7 +481,7 @@ void TilesetDock::currentChanged(const QModelIndex &index) if (!index.isValid()) return; - const TilesetModel *model = static_cast(index.model()); + auto model = static_cast(index.model()); setCurrentTile(model->tileAt(index)); } @@ -583,7 +583,7 @@ void TilesetDock::createTilesetView(int index, TilesetDocument *tilesetDocument) mTilesetDocuments.insert(index, tilesetDocument); - TilesetView *view = new TilesetView; + auto view = new TilesetView; // Hides the "New Tileset..." special view if it is shown. mSuperViewStack->setCurrentIndex(1); @@ -909,7 +909,7 @@ void TilesetDock::onTilesetLayoutChanged(const QList &par for (int i = 0, rows = mTilesetDocumentsFilterModel->rowCount(); i < rows; ++i) { const QModelIndex index = mTilesetDocumentsFilterModel->index(i, 0); const QVariant var = mTilesetDocumentsFilterModel->data(index, TilesetDocumentsModel::TilesetDocumentRole); - TilesetDocument *tilesetDocument = var.value(); + auto tilesetDocument = var.value(); int currentIndex = mTilesetDocuments.indexOf(tilesetDocument); if (currentIndex != i) { Q_ASSERT(currentIndex > i); @@ -1075,12 +1075,14 @@ TilesetView *TilesetDock::tilesetViewAt(int index) const void TilesetDock::setupTilesetModel(TilesetView *view, TilesetDocument *tilesetDocument) { - view->setModel(new TilesetModel(tilesetDocument, view)); + QItemSelectionModel *selectionModel = tilesetDocument->tilesetSelectionModel(); - QItemSelectionModel *s = view->selectionModel(); - connect(s, &QItemSelectionModel::selectionChanged, + view->setModel(tilesetDocument->tilesetModel()); + view->setSelectionModel(selectionModel); + + connect(selectionModel, &QItemSelectionModel::selectionChanged, this, &TilesetDock::selectionChanged); - connect(s, &QItemSelectionModel::currentChanged, + connect(selectionModel, &QItemSelectionModel::currentChanged, this, &TilesetDock::currentChanged); connect(view, &TilesetView::pressed, this, &TilesetDock::indexPressed); @@ -1195,7 +1197,7 @@ void TilesetDock::embedTileset() void TilesetDock::tilesetFileNameChanged(const QString &fileName) { - TilesetDocument *tilesetDocument = static_cast(sender()); + auto tilesetDocument = static_cast(sender()); const int index = mTilesetDocuments.indexOf(tilesetDocument); Q_ASSERT(index != -1); diff --git a/src/tiled/tilesetdocument.cpp b/src/tiled/tilesetdocument.cpp index 5f74d7bd77..93810d6624 100644 --- a/src/tiled/tilesetdocument.cpp +++ b/src/tiled/tilesetdocument.cpp @@ -27,12 +27,14 @@ #include "mapdocument.h" #include "tile.h" #include "tilesetformat.h" +#include "tilesetmodel.h" #include "tilesetwangsetmodel.h" #include "wangcolormodel.h" #include "wangset.h" #include #include +#include #include #include @@ -389,6 +391,22 @@ QList TilesetDocument::currentObjects() const return Document::currentObjects(); } +TilesetModel *TilesetDocument::tilesetModel() +{ + if (!mTilesetModel) + mTilesetModel = new TilesetModel(this, this); + + return mTilesetModel; +} + +QItemSelectionModel *TilesetDocument::tilesetSelectionModel() +{ + if (!mTilesetSelectionModel) + mTilesetSelectionModel = new QItemSelectionModel(tilesetModel(), this); + + return mTilesetSelectionModel; +} + /** * Returns the WangColorModel instance for the given \a wangSet. * The model instances are created on-demand and owned by the document. diff --git a/src/tiled/tilesetdocument.h b/src/tiled/tilesetdocument.h index 0d09bfb4e1..28a1cf2fd5 100644 --- a/src/tiled/tilesetdocument.h +++ b/src/tiled/tilesetdocument.h @@ -31,6 +31,8 @@ #include #include +class QItemSelectionModel; + namespace Tiled { class ObjectGroup; @@ -38,6 +40,7 @@ class WangColor; class MapDocument; class TilesetDocument; +class TilesetModel; class TilesetWangSetModel; class WangColorModel; @@ -109,6 +112,8 @@ class TilesetDocument final : public Document TilesetWangSetModel *wangSetModel() const { return mWangSetModel; } + TilesetModel *tilesetModel(); + QItemSelectionModel *tilesetSelectionModel(); WangColorModel *wangColorModel(WangSet *wangSet); void setTileImage(Tile *tile, const QPixmap &image, const QUrl &source); @@ -178,6 +183,8 @@ class TilesetDocument final : public Document SharedTileset mTileset; QList mMapDocuments; + TilesetModel *mTilesetModel = nullptr; + QItemSelectionModel *mTilesetSelectionModel = nullptr; TilesetWangSetModel *mWangSetModel; std::unordered_map> mWangColorModels; diff --git a/src/tiled/tileseteditor.cpp b/src/tiled/tileseteditor.cpp index 168b89f835..6a17a2027e 100644 --- a/src/tiled/tileseteditor.cpp +++ b/src/tiled/tileseteditor.cpp @@ -289,11 +289,11 @@ void TilesetEditor::addDocument(Document *document) view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); - auto *tilesetModel = new TilesetModel(tilesetDocument, view); - view->setModel(tilesetModel); + auto *tilesetModel = tilesetDocument->tilesetModel(); + auto *selectionModel = tilesetDocument->tilesetSelectionModel(); - connect(tilesetDocument, &TilesetDocument::tileWangSetChanged, - tilesetModel, &TilesetModel::tilesChanged); + view->setModel(tilesetModel); + view->setSelectionModel(selectionModel); connect(tilesetDocument, &TilesetDocument::tilesetChanged, this, &TilesetEditor::tilesetChanged); @@ -305,9 +305,8 @@ void TilesetEditor::addDocument(Document *document) connect(view, &TilesetView::wangIdUsedChanged, mWangDock, &WangDock::onWangIdUsedChanged); connect(view, &TilesetView::currentWangIdChanged, mWangDock, &WangDock::onCurrentWangIdChanged); - QItemSelectionModel *s = view->selectionModel(); - connect(s, &QItemSelectionModel::selectionChanged, this, &TilesetEditor::selectionChanged); - connect(s, &QItemSelectionModel::currentChanged, this, &TilesetEditor::currentChanged); + connect(selectionModel, &QItemSelectionModel::selectionChanged, this, &TilesetEditor::selectionChanged); + connect(selectionModel, &QItemSelectionModel::currentChanged, this, &TilesetEditor::currentChanged); connect(view, &TilesetView::pressed, this, &TilesetEditor::indexPressed); mViewForTileset.insert(tilesetDocument, view); @@ -318,7 +317,7 @@ void TilesetEditor::addDocument(Document *document) void TilesetEditor::removeDocument(Document *document) { - TilesetDocument *tilesetDocument = qobject_cast(document); + auto tilesetDocument = qobject_cast(document); Q_ASSERT(tilesetDocument); Q_ASSERT(mViewForTileset.contains(tilesetDocument)); diff --git a/src/tiled/tilesetmodel.cpp b/src/tiled/tilesetmodel.cpp index e214ef18d7..800830901a 100644 --- a/src/tiled/tilesetmodel.cpp +++ b/src/tiled/tilesetmodel.cpp @@ -21,7 +21,6 @@ #include "tilesetmodel.h" -#include "map.h" #include "relocatetiles.h" #include "tile.h" #include "tiled.h" @@ -40,6 +39,8 @@ TilesetModel::TilesetModel(TilesetDocument *tilesetDocument, QObject *parent) connect(tilesetDocument, &TilesetDocument::tileImageSourceChanged, this, &TilesetModel::tileChanged); + connect(tilesetDocument, &TilesetDocument::tileWangSetChanged, + this, &TilesetModel::tilesChanged); connect(tilesetDocument, &TilesetDocument::tileAnimationChanged, this, &TilesetModel::tileChanged); } @@ -135,7 +136,7 @@ QMimeData *TilesetModel::mimeData(const QModelIndexList &indexes) const if (encodedData.isEmpty()) return nullptr; - QMimeData *mimeData = new QMimeData; + auto mimeData = new QMimeData; mimeData->setData(QLatin1String(TILES_MIMETYPE), encodedData); return mimeData; }