diff --git a/src/libtiled/grouplayer.h b/src/libtiled/grouplayer.h index 512db47f39..09110184a3 100644 --- a/src/libtiled/grouplayer.h +++ b/src/libtiled/grouplayer.h @@ -55,7 +55,6 @@ class TILEDSHARED_EXPORT GroupLayer : public Layer QList::iterator end() { return mLayers.end(); } QList::const_iterator begin() const { return mLayers.begin(); } QList::const_iterator end() const { return mLayers.end(); } - protected: void setMap(Map *map) override; GroupLayer *initializeClone(GroupLayer *clone) const; @@ -66,7 +65,6 @@ class TILEDSHARED_EXPORT GroupLayer : public Layer QList mLayers; }; - inline int GroupLayer::layerCount() const { return mLayers.size(); diff --git a/src/tiled/editablegrouplayer.cpp b/src/tiled/editablegrouplayer.cpp index 78164d71cc..d3c9ae625b 100644 --- a/src/tiled/editablegrouplayer.cpp +++ b/src/tiled/editablegrouplayer.cpp @@ -24,6 +24,9 @@ #include "addremovetileset.h" #include "editablemap.h" #include "scriptmanager.h" +#include "documentmanager.h" +#include "mapeditor.h" +#include "layerdock.h" #include @@ -136,6 +139,20 @@ void EditableGroupLayer::addLayer(EditableLayer *editableLayer) insertLayerAt(layerCount(), editableLayer); } +inline bool EditableGroupLayer::isExpanded() const +{ + auto documentManager = DocumentManager::instance(); + auto mapEditor = static_cast(documentManager->editor(Document::MapDocumentType)); + return mapEditor->layerDock()->isExpanded(groupLayer()); +} + +inline void EditableGroupLayer::setExpanded(bool expanded) +{ + auto documentManager = DocumentManager::instance(); + auto mapEditor = static_cast(documentManager->editor(Document::MapDocumentType)); + mapEditor->layerDock()->setExpanded(groupLayer(), expanded); +} + } // namespace Tiled #include "moc_editablegrouplayer.cpp" diff --git a/src/tiled/editablegrouplayer.h b/src/tiled/editablegrouplayer.h index 05ee340518..639cd8ccfc 100644 --- a/src/tiled/editablegrouplayer.h +++ b/src/tiled/editablegrouplayer.h @@ -31,6 +31,7 @@ class EditableGroupLayer : public EditableLayer Q_PROPERTY(int layerCount READ layerCount) Q_PROPERTY(QList layers READ layers) + Q_PROPERTY(bool expanded READ isExpanded WRITE setExpanded) public: Q_INVOKABLE explicit EditableGroupLayer(const QString &name = QString(), @@ -49,8 +50,10 @@ class EditableGroupLayer : public EditableLayer Q_INVOKABLE void insertLayerAt(int index, Tiled::EditableLayer *editableLayer); Q_INVOKABLE void addLayer(Tiled::EditableLayer *editableLayer); -private: + bool isExpanded() const; GroupLayer *groupLayer() const; +public slots: + void setExpanded(bool expanded); }; inline int EditableGroupLayer::layerCount() const diff --git a/src/tiled/editableobjectgroup.cpp b/src/tiled/editableobjectgroup.cpp index d808ebe6a1..9d98b0bcd4 100644 --- a/src/tiled/editableobjectgroup.cpp +++ b/src/tiled/editableobjectgroup.cpp @@ -25,6 +25,9 @@ #include "editableasset.h" #include "map.h" #include "scriptmanager.h" +#include "documentmanager.h" +#include "mapeditor.h" +#include "objectsdock.h" #include @@ -172,6 +175,20 @@ void EditableObjectGroup::setDrawOrder(DrawOrder drawOrder) } } +inline bool EditableObjectGroup::isExpanded() const +{ + auto documentManager = DocumentManager::instance(); + auto mapEditor = static_cast(documentManager->editor(Document::MapDocumentType)); + return mapEditor->objectsDock()->isExpanded(objectGroup()); +} + +inline void EditableObjectGroup::setExpanded(bool expanded) +{ + auto documentManager = DocumentManager::instance(); + auto mapEditor = static_cast(documentManager->editor(Document::MapDocumentType)); + mapEditor->objectsDock()->setExpanded(objectGroup(), expanded); +} + } // namespace Tiled #include "moc_editableobjectgroup.cpp" diff --git a/src/tiled/editableobjectgroup.h b/src/tiled/editableobjectgroup.h index c370807710..981cf26cef 100644 --- a/src/tiled/editableobjectgroup.h +++ b/src/tiled/editableobjectgroup.h @@ -34,6 +34,7 @@ class EditableObjectGroup : public EditableLayer Q_PROPERTY(int objectCount READ objectCount) Q_PROPERTY(QColor color READ color WRITE setColor) Q_PROPERTY(DrawOrder drawOrder READ drawOrder WRITE setDrawOrder) + Q_PROPERTY(bool expanded READ isExpanded WRITE setExpanded) public: // Synchronized with ObjectGroup::DrawOrder @@ -66,9 +67,11 @@ class EditableObjectGroup : public EditableLayer static EditableObjectGroup *get(EditableAsset *asset, ObjectGroup *objectGroup); + bool isExpanded() const; public slots: void setColor(const QColor &color); void setDrawOrder(DrawOrder drawOrder); + void setExpanded(bool expanded); }; diff --git a/src/tiled/layerdock.cpp b/src/tiled/layerdock.cpp index 4810d0367d..8272d4eac7 100644 --- a/src/tiled/layerdock.cpp +++ b/src/tiled/layerdock.cpp @@ -34,6 +34,7 @@ #include "utils.h" #include "iconcheckdelegate.h" #include "changeevents.h" +#include "grouplayer.h" #include #include @@ -149,6 +150,18 @@ void LayerDock::setMapDocument(MapDocument *mapDocument) updateOpacitySlider(); } +bool LayerDock::isExpanded(GroupLayer *layer) const { + auto sourceIndex = mMapDocument->layerModel()->index(layer); + auto index = mLayerView->proxyModel()->mapFromSource(sourceIndex); + return mLayerView->isExpanded(index); +} + +void LayerDock::setExpanded(GroupLayer *layer, bool expanded) { + auto sourceIndex = mMapDocument->layerModel()->index(layer); + auto index = mLayerView->proxyModel()->mapFromSource(sourceIndex); + mLayerView->setExpanded(index, expanded); +} + void LayerDock::changeEvent(QEvent *e) { QDockWidget::changeEvent(e); diff --git a/src/tiled/layerdock.h b/src/tiled/layerdock.h index 41e286c530..710d29edc1 100644 --- a/src/tiled/layerdock.h +++ b/src/tiled/layerdock.h @@ -22,6 +22,7 @@ #pragma once #include "mapdocument.h" +#include "editablegrouplayer.h" #include #include @@ -54,6 +55,11 @@ class LayerDock : public QDockWidget */ void setMapDocument(MapDocument *mapDocument); + Q_INVOKABLE bool isExpanded(EditableGroupLayer *layer) const { return isExpanded(layer->groupLayer()); }; + Q_INVOKABLE void setExpanded(EditableGroupLayer *layer, bool expanded) { setExpanded(layer->groupLayer(), expanded); }; + bool isExpanded(GroupLayer *layer) const; + void setExpanded(GroupLayer *layer, bool expanded); + protected: void changeEvent(QEvent *e) override; @@ -90,6 +96,8 @@ class LayerView : public QTreeView void editLayerModelIndex(const QModelIndex &layerModelIndex); + QAbstractProxyModel *proxyModel() { return mProxyModel; } + protected: bool event(QEvent *event) override; void contextMenuEvent(QContextMenuEvent *event) override; diff --git a/src/tiled/mapeditor.h b/src/tiled/mapeditor.h index 5246fde877..6cc23e020f 100644 --- a/src/tiled/mapeditor.h +++ b/src/tiled/mapeditor.h @@ -73,6 +73,8 @@ class MapEditor final : public Editor Q_OBJECT Q_PROPERTY(Tiled::TilesetDock *tilesetsView READ tilesetDock CONSTANT) + Q_PROPERTY(Tiled::LayerDock *layersView READ layerDock CONSTANT) + Q_PROPERTY(Tiled::ObjectsDock *objectsView READ objectsDock CONSTANT) Q_PROPERTY(Tiled::EditableMap *currentBrush READ currentBrush WRITE setCurrentBrush) Q_PROPERTY(Tiled::EditableWangSet *currentWangSet READ currentWangSet NOTIFY currentWangSetChanged) Q_PROPERTY(int currentWangColorIndex READ currentWangColorIndex NOTIFY currentWangColorIndexChanged) @@ -83,6 +85,8 @@ class MapEditor final : public Editor ~MapEditor() override; TilesetDock *tilesetDock() const { return mTilesetDock; } + LayerDock *layerDock() const { return mLayerDock; } + ObjectsDock *objectsDock() const { return mObjectsDock; } TemplatesDock *templatesDock() const { return mTemplatesDock; } void saveState() override; diff --git a/src/tiled/objectsdock.cpp b/src/tiled/objectsdock.cpp index b751a0db92..7b79ccfb46 100644 --- a/src/tiled/objectsdock.cpp +++ b/src/tiled/objectsdock.cpp @@ -151,6 +151,14 @@ void ObjectsDock::setMapDocument(MapDocument *mapDoc) updateActions(); } +bool ObjectsDock::isExpanded(ObjectGroup *layer) const { + return mObjectsView->isExpanded(mObjectsView->layerViewIndex(layer)); +} + +void ObjectsDock::setExpanded(ObjectGroup *layer, bool expanded) { + mObjectsView->setExpanded(mObjectsView->layerViewIndex(layer), expanded); +} + void ObjectsDock::changeEvent(QEvent *e) { QDockWidget::changeEvent(e); diff --git a/src/tiled/objectsdock.h b/src/tiled/objectsdock.h index 989118a130..bce23164bd 100644 --- a/src/tiled/objectsdock.h +++ b/src/tiled/objectsdock.h @@ -20,6 +20,8 @@ #pragma once +#include "editableobjectgroup.h" + #include #include @@ -41,6 +43,11 @@ class ObjectsDock : public QDockWidget void setMapDocument(MapDocument *mapDoc); + Q_INVOKABLE bool isExpanded(EditableObjectGroup *layer) const { return isExpanded(layer->objectGroup()); }; + Q_INVOKABLE void setExpanded(EditableObjectGroup *layer, bool expanded) { setExpanded(layer->objectGroup(), expanded); }; + bool isExpanded(ObjectGroup *layer) const; + void setExpanded(ObjectGroup *layer, bool expanded); + protected: void changeEvent(QEvent *e) override;