diff --git a/ArchitectureColoredPainting/EditorWidgetItem.ui b/ArchitectureColoredPainting/EditorWidgetItem.ui index e269e9d..b8eb51c 100644 --- a/ArchitectureColoredPainting/EditorWidgetItem.ui +++ b/ArchitectureColoredPainting/EditorWidgetItem.ui @@ -180,6 +180,12 @@ + + + 10 + 10 + + 图层名 @@ -190,6 +196,11 @@ 关联图元 + + + 可见 + + diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp index b9930ab..2693b45 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp +++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp @@ -74,9 +74,10 @@ EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(p this->projectName = source.value("project-name").toString(); qDebug() << this->backgroundColor; qDebug() << this->projectName; - QTimer::singleShot(300, this, [this]() { + QTimer::singleShot(300, this, [this, centralRefresh]() { handleBackgroundColorChange(this->backgroundColor); handleProjectNameChange(this->projectName); + centralRefresh(); }); } diff --git a/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp b/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp index 4cc2ef3..01f6df5 100644 --- a/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp +++ b/ArchitectureColoredPainting/src/Editor/GraphicElement.cpp @@ -127,7 +127,7 @@ bool SimpleElement::isClosed() const void GroupElement::paint(QPainter* painter, QTransform transform, const LayerStyleContainer& styles) { - sourceLayer->paint(painter, transform); + sourceLayer->paint(painter, transform, true); } bool GroupElement::isClosed() const diff --git a/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp b/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp index bf0222b..1240eb2 100644 --- a/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp +++ b/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp @@ -47,6 +47,7 @@ LayerWrapper::LayerWrapper(QJsonObject json, FolderLayerWrapper*parent, ElementM transformJson.value("scale").toObject().value("y").toDouble()}; property.rotation = {transformJson.value("rotation").toDouble()}; selected = false; + hidden = false; } FolderLayerWrapper::FolderLayerWrapper(QJsonObject json, ElementManager *elementManager, FolderLayerWrapper*parent) @@ -199,6 +200,7 @@ void FolderLayerWrapper::delSelf() { QTreeWidgetItem* LayerWrapper::getQTreeItem() { this->qTreeWidgetItem->setData(0, Qt::UserRole, QVariant::fromValue(this)); + this->qTreeWidgetItem->setCheckState(0, Qt::Checked); return this->qTreeWidgetItem; } @@ -280,31 +282,27 @@ int FolderLayerWrapper::getReferencedBy()const return -1; } -void LayerWrapper::paint(QPainter* painter, QTransform transform, bool ignoreSelected) +void LayerWrapper::paint(QPainter* painter, QTransform transform, bool force) { - if (!ignoreSelected && this->selected) - { - painter->save(); - painter->setTransform(transform, ignoreSelected); - painter->setPen(QPen(Qt::gray, 2)); - painter->setPen(Qt::DashLine); - painter->drawRect(cache.getBoundingRect()); - painter->restore(); - } + } -void FolderLayerWrapper::paint(QPainter* painter, QTransform transform, bool ignoreSelected) +void FolderLayerWrapper::paint(QPainter* painter, QTransform transform, bool force) { - LayerWrapper::paint(painter, transform, ignoreSelected); + if (hidden && !force) + return; + LayerWrapper::paint(painter, transform, force); transform = property.transform * transform; //qDebug() << transform; for (auto& child : children) - child->paint(painter, transform, ignoreSelected); + child->paint(painter, transform, force); } -void LeafLayerWrapper::paint(QPainter* painter, QTransform transform, bool ignoreSelected) +void LeafLayerWrapper::paint(QPainter* painter, QTransform transform, bool force) { - LayerWrapper::paint(painter, transform, ignoreSelected); + if (hidden && !force) + return; + LayerWrapper::paint(painter, transform, force); transform = property.transform * transform; //qDebug() << transform; if (wrappedElement != nullptr) @@ -347,11 +345,12 @@ void FolderLayerWrapper::collectDownReachable(std::set& reachable void LayerWrapper::refreshTreeItem() { - + hidden = qTreeWidgetItem->checkState(0) == Qt::Unchecked; } void LeafLayerWrapper::refreshTreeItem() { + LayerWrapper::refreshTreeItem(); if (typeid(*wrappedElement) == typeid(GroupElement)) { this->qTreeWidgetItem->setText(0, "@ " + this->property.name); @@ -366,6 +365,7 @@ void LeafLayerWrapper::refreshTreeItem() void FolderLayerWrapper::refreshTreeItem() { + LayerWrapper::refreshTreeItem(); for (auto& child : this->children) { child->refreshTreeItem(); } diff --git a/ArchitectureColoredPainting/src/Editor/LayerWrapper.h b/ArchitectureColoredPainting/src/Editor/LayerWrapper.h index 947d90c..6312f12 100644 --- a/ArchitectureColoredPainting/src/Editor/LayerWrapper.h +++ b/ArchitectureColoredPainting/src/Editor/LayerWrapper.h @@ -37,6 +37,7 @@ class LayerWrapper public: QTreeWidgetItem* qTreeWidgetItem; bool selected; + bool hidden; struct SimpleProperty { QString name = ""; @@ -58,7 +59,7 @@ class LayerWrapper FolderLayerWrapper*getParent() const; // invoke by manager, then invoke parent's applyStyles LayerWrapper(QJsonObject json, FolderLayerWrapper*parent, ElementManager* elementManager=nullptr); LayerWrapper() = default; - virtual void paint(QPainter* painter, QTransform transform=QTransform(), bool ignoreSelected = false); + virtual void paint(QPainter* painter, QTransform transform=QTransform(), bool force = false); // TODO : export Function // virtual LayerWrapper *addChild() = 0; // Leaf Child Only // virtual LayerWrapper *addParent() = 0; // Folder Parent Only @@ -97,7 +98,7 @@ class FolderLayerWrapper : public LayerWrapper QTreeWidgetItem* getQTreeItem() override; QJsonObject toJson() const override; int getReferencedBy()const; - void paint(QPainter* painter, QTransform transform = QTransform(), bool ignoreSelected = false) override; + void paint(QPainter* painter, QTransform transform = QTransform(), bool force = false) override; void collectDownReachable(std::set& reachable) override; void refreshTreeItem() override; size_t referencedCount(bool excludeSelf = false) const override; @@ -115,7 +116,7 @@ class LeafLayerWrapper : public LayerWrapper void refresh(LayerWrapper* layer = nullptr) override; LeafLayerWrapper(QJsonObject json, ElementManager *elementManager, FolderLayerWrapper*parent); QJsonObject toJson() const override; - void paint(QPainter* painter, QTransform transform = QTransform(), bool ignoreSelected = false) override; + void paint(QPainter* painter, QTransform transform = QTransform(), bool force = false) override; void collectDownReachable(std::set& reachable) override; QTreeWidgetItem* getQTreeItem() override; void refreshTreeItem() override; diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp index a8ba44e..5090342 100644 --- a/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp @@ -2,6 +2,7 @@ #include #include #include "./EditorWidgetComponent/LayerCreateWidget.h" +#include LayerTreeWidget::LayerTreeWidget(QWidget *parent) { @@ -26,6 +27,10 @@ LayerTreeWidget::LayerTreeWidget(QWidget *parent) } emit triggerCentralRefresh(); }); + connect(this, &QTreeWidget::itemChanged, this, [=]() { + emit triggerCentralRefresh(); + }); + // connect(this, &QTreeWidget::itemDoubleClicked, this, &LayerTreeWidget::onItemDoubleClicked); }