diff --git a/ArchitectureColoredPainting/EditorWidgetItem.ui b/ArchitectureColoredPainting/EditorWidgetItem.ui index 63fbd7d..e269e9d 100644 --- a/ArchitectureColoredPainting/EditorWidgetItem.ui +++ b/ArchitectureColoredPainting/EditorWidgetItem.ui @@ -182,7 +182,12 @@ - 图层树 + 图层名 + + + + + 关联图元 diff --git a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp index 8f6afc9..bef3c7c 100644 --- a/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp +++ b/ArchitectureColoredPainting/src/Editor/EditorWidgetItem.cpp @@ -32,6 +32,7 @@ EditorWidgetItem::EditorWidgetItem(QString filePath,QWidget *parent) : QWidget(p connect(treeWidget, &LayerTreeWidget::requireRefreshPreview, this, &EditorWidgetItem::triggerRefreshPreview); connect(layerInfoDisplayWidget, &InfoDisplayWidget::requireSelfRefresh, layerInfoDisplayWidget, &InfoDisplayWidget::triggerSelfRefresh); + connect(elementInfoDisplayWidget, &ElementPoolWidget::refreshLayerTree, treeWidget, &LayerTreeWidget::refresh); // &EditorWidget::triggerRefreshPreview); // test QFile settingFile; diff --git a/ArchitectureColoredPainting/src/Editor/ElementPoolWidget.cpp b/ArchitectureColoredPainting/src/Editor/ElementPoolWidget.cpp index e1a4f76..17ec55a 100644 --- a/ArchitectureColoredPainting/src/Editor/ElementPoolWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/ElementPoolWidget.cpp @@ -67,6 +67,7 @@ void ElementPoolWidget::setElementManager(ElementManager* element) void ElementPoolWidget::refresh() { this->setElementList(this->elementManager->elements); + emit refreshLayerTree(); // update(); } diff --git a/ArchitectureColoredPainting/src/Editor/ElementPoolWidget.h b/ArchitectureColoredPainting/src/Editor/ElementPoolWidget.h index 66129b9..82ee0ff 100644 --- a/ArchitectureColoredPainting/src/Editor/ElementPoolWidget.h +++ b/ArchitectureColoredPainting/src/Editor/ElementPoolWidget.h @@ -25,6 +25,7 @@ public: signals: void elementSelected(GraphicElement* element); + void refreshLayerTree(); public slots: int pictureItemClicked(QListWidgetItem* item); diff --git a/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp b/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp index e30b068..e83ae7e 100644 --- a/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp +++ b/ArchitectureColoredPainting/src/Editor/LayerWrapper.cpp @@ -192,19 +192,39 @@ void FolderLayerWrapper::delSelf() { QTreeWidgetItem* LayerWrapper::getQTreeItem() { - this->qTreeWidgetItem->setText(0, this->property.name); this->qTreeWidgetItem->setData(0, Qt::UserRole, QVariant::fromValue(this)); return this->qTreeWidgetItem; } +QTreeWidgetItem* LeafLayerWrapper::getQTreeItem() +{ + if (this->qTreeWidgetItem == nullptr) + this->qTreeWidgetItem = new QTreeWidgetItem(); + if (typeid(*wrappedElement) == typeid(GroupElement)) + { + this->qTreeWidgetItem->setText(0, "@ "+this->property.name); + } + else + { + this->qTreeWidgetItem->setText(0, this->property.name); + } + this->qTreeWidgetItem->setText(1,">> "+this->wrappedElement->name); + this->qTreeWidgetItem->setTextColor(1, Qt::blue); + return LayerWrapper::getQTreeItem(); +} + QTreeWidgetItem* FolderLayerWrapper::getQTreeItem() { - while (this->qTreeWidgetItem->childCount() > 0) { - this->qTreeWidgetItem->removeChild(this->qTreeWidgetItem->child(0)); - } - for (auto& child : this->children) { + for (auto& child : this->children) { this->qTreeWidgetItem->addChild(child->getQTreeItem()); } + this->qTreeWidgetItem->setText(0, this->property.name); + auto ele = this->elementManager->getElementById(this->getReferencedBy()); + if (ele != nullptr) + { + this->qTreeWidgetItem->setText(1, "<< " + ele->name); + this->qTreeWidgetItem->setTextColor(1, Qt::darkGreen); + } return LayerWrapper::getQTreeItem(); } @@ -317,4 +337,37 @@ void FolderLayerWrapper::collectDownReachable(std::set& reachable LayerWrapper::collectDownReachable(reachable); for (auto& child : children) child->collectDownReachable(reachable); -} \ No newline at end of file +} + +void LayerWrapper::refreshTreeItem() +{ + +} + +void LeafLayerWrapper::refreshTreeItem() +{ + if (typeid(*wrappedElement) == typeid(GroupElement)) + { + this->qTreeWidgetItem->setText(0, "@ " + this->property.name); + } + else + { + this->qTreeWidgetItem->setText(0, this->property.name); + } + this->qTreeWidgetItem->setText(1, ">> " + this->wrappedElement->name); + this->qTreeWidgetItem->setTextColor(1, Qt::blue); +} + +void FolderLayerWrapper::refreshTreeItem() +{ + for (auto& child : this->children) { + child->refreshTreeItem(); + } + this->qTreeWidgetItem->setText(0, this->property.name); + auto ele = this->elementManager->getElementById(this->getReferencedBy()); + if (ele != nullptr) + { + this->qTreeWidgetItem->setText(1, "<< " + ele->name); + this->qTreeWidgetItem->setTextColor(1, Qt::darkGreen); + } +} diff --git a/ArchitectureColoredPainting/src/Editor/LayerWrapper.h b/ArchitectureColoredPainting/src/Editor/LayerWrapper.h index 92d82d1..b767d35 100644 --- a/ArchitectureColoredPainting/src/Editor/LayerWrapper.h +++ b/ArchitectureColoredPainting/src/Editor/LayerWrapper.h @@ -70,6 +70,7 @@ class LayerWrapper ~LayerWrapper() = default; virtual void collectUpReachable(std::set& reachable); virtual void collectDownReachable(std::set& reachable); + virtual void refreshTreeItem(); }; class FolderLayerWrapper : public LayerWrapper @@ -94,6 +95,7 @@ class FolderLayerWrapper : public LayerWrapper int getReferencedBy()const; void paint(QPainter* painter, QTransform transform = QTransform(), bool ignoreSelected = false) override; void collectDownReachable(std::set& reachable) override; + void refreshTreeItem() override; }; class LeafLayerWrapper : public LayerWrapper @@ -110,6 +112,8 @@ class LeafLayerWrapper : public LayerWrapper QJsonObject toJson() const override; void paint(QPainter* painter, QTransform transform = QTransform(), bool ignoreSelected = false) override; void collectDownReachable(std::set& reachable) override; + QTreeWidgetItem* getQTreeItem() override; + void refreshTreeItem() override; }; Q_DECLARE_METATYPE(LayerWrapper *) diff --git a/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp index 8b85c1a..69a67b9 100644 --- a/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp +++ b/ArchitectureColoredPainting/src/Editor/RightBar/LayerTreeWidget.cpp @@ -9,7 +9,7 @@ LayerTreeWidget::LayerTreeWidget(QWidget *parent) this->selectedItem = nullptr; this->copiedItem = nullptr; this->setContextMenuPolicy(Qt::CustomContextMenu); - this->setHeaderLabel("Layer Content"); + this->setColumnWidth(0, 240); connect(this, &QTreeWidget::customContextMenuRequested, this, &LayerTreeWidget::popMenu); connect(this, &QTreeWidget::currentItemChanged, [=](QTreeWidgetItem *currentItem) { if (this->selectedItem != nullptr) { @@ -126,9 +126,5 @@ void LayerTreeWidget::onRenameEvent() } void LayerTreeWidget::refresh() { - // if(this->root!=nullptr) - //{ - // this->clear(); - // this->addTopLevelItem(this->root->getQTreeItem()); - //} + this->root->refreshTreeItem(); } \ No newline at end of file