From 03d5bc2472ac641d7660d921b5beb27d2c728e74 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Thu, 5 Jul 2018 19:31:01 +0200 Subject: Proper tree in tree view for bels, wires and pips --- gui/designwidget.cc | 92 +++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 72 insertions(+), 20 deletions(-) diff --git a/gui/designwidget.cc b/gui/designwidget.cc index 2168a673..4656be02 100644 --- a/gui/designwidget.cc +++ b/gui/designwidget.cc @@ -29,6 +29,7 @@ NEXTPNR_NAMESPACE_BEGIN enum class ElementType { + NONE, BEL, WIRE, PIP @@ -37,7 +38,7 @@ enum class ElementType class ElementTreeItem : public QTreeWidgetItem { public: - ElementTreeItem(ElementType t, QString str) : QTreeWidgetItem((QTreeWidget *)nullptr, QStringList(str)), type(t) {} + ElementTreeItem(ElementType t, QString str, QTreeWidgetItem *parent) : QTreeWidgetItem(parent, QStringList(str)), type(t) {} virtual ~ElementTreeItem(){}; ElementType getType() { return type; }; @@ -49,7 +50,7 @@ class ElementTreeItem : public QTreeWidgetItem class BelTreeItem : public ElementTreeItem { public: - BelTreeItem(IdString d, ElementType type, QString str) : ElementTreeItem(type, str) { this->data = d; } + BelTreeItem(IdString d, QString str, QTreeWidgetItem *parent) : ElementTreeItem(ElementType::BEL, str, parent) { this->data = d; } virtual ~BelTreeItem(){}; IdString getData() { return this->data; }; @@ -61,7 +62,7 @@ class BelTreeItem : public ElementTreeItem class WireTreeItem : public ElementTreeItem { public: - WireTreeItem(IdString d, ElementType type, QString str) : ElementTreeItem(type, str) { this->data = d; } + WireTreeItem(IdString d, QString str, QTreeWidgetItem *parent) : ElementTreeItem(ElementType::WIRE, str, parent) { this->data = d; } virtual ~WireTreeItem(){}; IdString getData() { return this->data; }; @@ -73,7 +74,7 @@ class WireTreeItem : public ElementTreeItem class PipTreeItem : public ElementTreeItem { public: - PipTreeItem(IdString d, ElementType type, QString str) : ElementTreeItem(type, str) { this->data = d; } + PipTreeItem(IdString d, QString str, QTreeWidgetItem *parent) : ElementTreeItem(ElementType::PIP, str, parent) { this->data = d; } virtual ~PipTreeItem(){}; IdString getData() { return this->data; }; @@ -132,42 +133,90 @@ void DesignWidget::newContext(Context *ctx) // Add bels to tree QTreeWidgetItem *bel_root = new QTreeWidgetItem(treeWidget); + QMap bel_items; bel_root->setText(0, QString("Bels")); - treeWidget->insertTopLevelItem(0, bel_root); - QList bel_items; + treeWidget->insertTopLevelItem(0, bel_root); if (ctx) { for (auto bel : ctx->getBels()) { - auto name = ctx->getBelName(bel); - bel_items.append(new BelTreeItem(name, ElementType::BEL, QString(name.c_str(ctx)))); + auto id = ctx->getBelName(bel); + QStringList items = QString(id.c_str(ctx)).split("/"); + QString name; + QTreeWidgetItem *parent = nullptr; + for(int i=0;iaddChildren(bel_items); + for (auto bel : bel_items.toStdMap()) { + bel_root->addChild(bel.second); + } // Add wires to tree QTreeWidgetItem *wire_root = new QTreeWidgetItem(treeWidget); - QList wire_items; + QMap wire_items; wire_root->setText(0, QString("Wires")); - treeWidget->insertTopLevelItem(0, wire_root); + treeWidget->insertTopLevelItem(0, wire_root); if (ctx) { for (auto wire : ctx->getWires()) { - auto name = ctx->getWireName(wire); - wire_items.append(new WireTreeItem(name, ElementType::WIRE, QString(name.c_str(ctx)))); + auto id = ctx->getWireName(wire); + QStringList items = QString(id.c_str(ctx)).split("/"); + QString name; + QTreeWidgetItem *parent = nullptr; + for(int i=0;iaddChildren(wire_items); + for (auto wire : wire_items.toStdMap()) { + wire_root->addChild(wire.second); + } // Add pips to tree QTreeWidgetItem *pip_root = new QTreeWidgetItem(treeWidget); - QList pip_items; + QMap pip_items; pip_root->setText(0, QString("Pips")); treeWidget->insertTopLevelItem(0, pip_root); if (ctx) { for (auto pip : ctx->getPips()) { - auto name = ctx->getPipName(pip); - pip_items.append(new PipTreeItem(name, ElementType::PIP, QString(name.c_str(ctx)))); + auto id = ctx->getPipName(pip); + QStringList items = QString(id.c_str(ctx)).split("/"); + QString name; + QTreeWidgetItem *parent = nullptr; + for(int i=0;iaddChildren(pip_items); + for (auto pip : pip_items.toStdMap()) { + pip_root->addChild(pip.second); + } } void DesignWidget::addProperty(QtVariantProperty *property, const QString &id) @@ -193,10 +242,13 @@ void DesignWidget::onItemClicked(QTreeWidgetItem *item, int pos) if (!item->parent()) return; - clearProperties(); ElementType type = static_cast(item)->getType(); - + if (type == ElementType::NONE) { + return; + } + + clearProperties(); if (type == ElementType::BEL) { IdString c = static_cast(item)->getData(); -- cgit v1.2.3