|
23 | 23 | #include "actionmanager.h" |
24 | 24 | #include "addremovetileset.h" |
25 | 25 | #include "documentmanager.h" |
| 26 | +#include "layer.h" |
| 27 | +#include "mapdocument.h" |
26 | 28 | #include "mapdocumentactionhandler.h" |
27 | 29 | #include "mapeditor.h" |
| 30 | +#include "mapobject.h" |
| 31 | +#include "objectgroup.h" |
28 | 32 | #include "objecttemplate.h" |
29 | 33 | #include "preferences.h" |
30 | 34 | #include "projectmanager.h" |
|
36 | 40 | #include "utils.h" |
37 | 41 |
|
38 | 42 | #include <QBoxLayout> |
| 43 | +#include <QFile> |
39 | 44 | #include <QFileDialog> |
40 | 45 | #include <QFileInfo> |
41 | 46 | #include <QMenu> |
| 47 | +#include <QMessageBox> |
42 | 48 | #include <QMouseEvent> |
43 | 49 | #include <QScrollBar> |
44 | 50 | #include <QSet> |
@@ -80,6 +86,7 @@ class ProjectView final : public QTreeView |
80 | 86 | void onRowsInserted(const QModelIndex &parent); |
81 | 87 |
|
82 | 88 | void restoreExpanded(const QModelIndex &parent); |
| 89 | + void deleteTemplate(const QString &templatePath); |
83 | 90 |
|
84 | 91 | ProjectModel *mProjectModel; |
85 | 92 | ProjectProxyModel *mProxyModel; |
@@ -276,6 +283,9 @@ void ProjectView::contextMenuEvent(QContextMenuEvent *event) |
276 | 283 | menu.addAction(tr("Select Template Instances"), [=] { |
277 | 284 | mapDocumentActionHandler->selectAllInstances(objectTemplate); |
278 | 285 | })->setEnabled(mapDocument != nullptr); |
| 286 | + menu.addAction(tr("Delete"), [=] { |
| 287 | + deleteTemplate(path); |
| 288 | + }); |
279 | 289 | } |
280 | 290 | // Add tileset-specific actions |
281 | 291 | else if (auto tileset = TilesetManager::instance()->loadTileset(path)) { |
@@ -345,6 +355,35 @@ void ProjectView::restoreExpanded(const QModelIndex &parent) |
345 | 355 | } |
346 | 356 | } |
347 | 357 |
|
| 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 | + |
348 | 387 | } // namespace Tiled |
349 | 388 |
|
350 | 389 | #include "projectdock.moc" |
|
0 commit comments