Skip to content

Commit f25d933

Browse files
committed
Add functionality for Delete Template
1 parent 76f5d0d commit f25d933

File tree

3 files changed

+48
-0
lines changed

3 files changed

+48
-0
lines changed

src/libtiled/templatemanager.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,14 @@ ObjectTemplate *TemplateManager::loadObjectTemplate(const QString &fileName, QSt
8383
return objectTemplate;
8484
}
8585

86+
void TemplateManager::removeTemplate(const QString &fileName)
87+
{
88+
if (auto templ = mObjectTemplates.take(fileName)) {
89+
mWatcher->removePath(fileName);
90+
delete templ;
91+
}
92+
}
93+
8694
void TemplateManager::pathsChanged(const QStringList &paths)
8795
{
8896
for (const QString &fileName : paths) {

src/libtiled/templatemanager.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ class TILEDSHARED_EXPORT TemplateManager : public QObject
4242
ObjectTemplate *findObjectTemplate(const QString &fileName);
4343
ObjectTemplate *loadObjectTemplate(const QString &fileName,
4444
QString *error = nullptr);
45+
void removeTemplate(const QString &fileName);
4546

4647
signals:
4748
/**

src/tiled/projectdock.cpp

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,12 @@
2323
#include "actionmanager.h"
2424
#include "addremovetileset.h"
2525
#include "documentmanager.h"
26+
#include "layer.h"
27+
#include "mapdocument.h"
2628
#include "mapdocumentactionhandler.h"
2729
#include "mapeditor.h"
30+
#include "mapobject.h"
31+
#include "objectgroup.h"
2832
#include "objecttemplate.h"
2933
#include "preferences.h"
3034
#include "projectmanager.h"
@@ -36,9 +40,11 @@
3640
#include "utils.h"
3741

3842
#include <QBoxLayout>
43+
#include <QFile>
3944
#include <QFileDialog>
4045
#include <QFileInfo>
4146
#include <QMenu>
47+
#include <QMessageBox>
4248
#include <QMouseEvent>
4349
#include <QScrollBar>
4450
#include <QSet>
@@ -80,6 +86,7 @@ class ProjectView final : public QTreeView
8086
void onRowsInserted(const QModelIndex &parent);
8187

8288
void restoreExpanded(const QModelIndex &parent);
89+
void deleteTemplate(const QString &templatePath);
8390

8491
ProjectModel *mProjectModel;
8592
ProjectProxyModel *mProxyModel;
@@ -276,6 +283,9 @@ void ProjectView::contextMenuEvent(QContextMenuEvent *event)
276283
menu.addAction(tr("Select Template Instances"), [=] {
277284
mapDocumentActionHandler->selectAllInstances(objectTemplate);
278285
})->setEnabled(mapDocument != nullptr);
286+
menu.addAction(tr("Delete"), [=] {
287+
deleteTemplate(path);
288+
});
279289
}
280290
// Add tileset-specific actions
281291
else if (auto tileset = TilesetManager::instance()->loadTileset(path)) {
@@ -345,6 +355,35 @@ void ProjectView::restoreExpanded(const QModelIndex &parent)
345355
}
346356
}
347357

358+
void ProjectView::deleteTemplate(const QString &templatePath)
359+
{
360+
ObjectTemplate *objectTemplate = TemplateManager::instance()->loadObjectTemplate(templatePath);
361+
bool inUse = false;
362+
for (const auto &doc : DocumentManager::instance()->documents()) {
363+
if (auto mapDoc = qobject_cast<MapDocument*>(doc.data())) {
364+
for (Layer *layer : mapDoc->map()->objectGroups()) {
365+
for (MapObject *obj : static_cast<ObjectGroup*>(layer)->objects()) {
366+
if (obj->objectTemplate() == objectTemplate) {
367+
inUse = true;
368+
break;
369+
}
370+
}
371+
if (inUse) break;
372+
}
373+
if (inUse) break;
374+
}
375+
if (inUse) break;
376+
}
377+
378+
if (inUse) {
379+
if (QMessageBox::warning(window(), tr("Delete Template"), tr("This template is in use. Delete anyway?"),
380+
QMessageBox::Yes | QMessageBox::Cancel) != QMessageBox::Yes)
381+
return;
382+
}
383+
QFile::remove(templatePath);
384+
TemplateManager::instance()->removeTemplate(templatePath);
385+
}
386+
348387
} // namespace Tiled
349388

350389
#include "projectdock.moc"

0 commit comments

Comments
 (0)