diff --git a/3rdparty/QtPropertyBrowser/src/qtpropertybrowser.cpp b/3rdparty/QtPropertyBrowser/src/qtpropertybrowser.cpp index 63260fe4..9533fb5b 100644 --- a/3rdparty/QtPropertyBrowser/src/qtpropertybrowser.cpp +++ b/3rdparty/QtPropertyBrowser/src/qtpropertybrowser.cpp @@ -54,7 +54,7 @@ QT_BEGIN_NAMESPACE class QtPropertyPrivate { public: - QtPropertyPrivate(QtAbstractPropertyManager *manager) : m_enabled(true), m_modified(false), m_manager(manager) {} + QtPropertyPrivate(QtAbstractPropertyManager *manager) : m_enabled(true), m_selectable(true), m_modified(false), m_manager(manager) {} QtProperty *q_ptr; QSet m_parentItems; @@ -66,6 +66,7 @@ public: QString m_name; QString m_id; bool m_enabled; + bool m_selectable; bool m_modified; QtAbstractPropertyManager * const m_manager; @@ -260,6 +261,11 @@ bool QtProperty::isEnabled() const return d_ptr->m_enabled; } +bool QtProperty::isSelectable() const +{ + return d_ptr->m_selectable; +} + /*! Returns whether the property is modified. @@ -409,6 +415,15 @@ void QtProperty::setEnabled(bool enable) propertyChanged(); } +void QtProperty::setSelectable(bool selectable) +{ + if (d_ptr->m_selectable == selectable) + return; + + d_ptr->m_selectable = selectable; + propertyChanged(); +} + /*! Sets the property's modified state according to the passed \a modified value. diff --git a/3rdparty/QtPropertyBrowser/src/qtpropertybrowser.h b/3rdparty/QtPropertyBrowser/src/qtpropertybrowser.h index c4c6275b..1ca87830 100644 --- a/3rdparty/QtPropertyBrowser/src/qtpropertybrowser.h +++ b/3rdparty/QtPropertyBrowser/src/qtpropertybrowser.h @@ -83,6 +83,7 @@ public: QString propertyName() const; QString propertyId() const; bool isEnabled() const; + bool isSelectable() const; bool isModified() const; bool hasValue() const; @@ -97,6 +98,7 @@ public: void setPropertyName(const QString &text); void setPropertyId(const QString &text); void setEnabled(bool enable); + void setSelectable(bool selectable); void setModified(bool modified); bool isSubProperty()const; diff --git a/3rdparty/QtPropertyBrowser/src/qttreepropertybrowser.cpp b/3rdparty/QtPropertyBrowser/src/qttreepropertybrowser.cpp index 673252d2..523856eb 100644 --- a/3rdparty/QtPropertyBrowser/src/qttreepropertybrowser.cpp +++ b/3rdparty/QtPropertyBrowser/src/qttreepropertybrowser.cpp @@ -651,6 +651,11 @@ void QtTreePropertyBrowserPrivate::updateItem(QTreeWidgetItem *item) else disableItem(item); } + if (property->isSelectable()) { + item->setFlags(item->flags() | Qt::ItemIsSelectable); + } else { + item->setFlags(item->flags() & ~Qt::ItemIsSelectable); + } m_treeWidget->viewport()->update(); } diff --git a/3rdparty/QtPropertyBrowser/src/qtvariantproperty.cpp b/3rdparty/QtPropertyBrowser/src/qtvariantproperty.cpp index c41730c8..03f9688c 100644 --- a/3rdparty/QtPropertyBrowser/src/qtvariantproperty.cpp +++ b/3rdparty/QtPropertyBrowser/src/qtvariantproperty.cpp @@ -1339,6 +1339,7 @@ void addPropertyRecusively(QtVariantPropertyManager * manager, newProp->setWhatsThis(prop->whatsThis()); newProp->setModified(prop->isModified()); newProp->setEnabled(prop->isEnabled()); + newProp->setSelectable(prop->isSelectable()); newProp->setValue(prop->value()); foreach(QtProperty * subProp, prop->subProperties()) diff --git a/gui/designwidget.cc b/gui/designwidget.cc index 7e8e2840..33a8ed93 100644 --- a/gui/designwidget.cc +++ b/gui/designwidget.cc @@ -35,6 +35,7 @@ class ElementTreeItem : public QTreeWidgetItem ElementTreeItem(ElementType t, QString str, QTreeWidgetItem *parent) : QTreeWidgetItem(parent, QStringList(str)), type(t) { + this->setFlags(this->flags() & ~Qt::ItemIsSelectable); } virtual ~ElementTreeItem(){}; @@ -49,6 +50,7 @@ class IdStringTreeItem : public ElementTreeItem public: IdStringTreeItem(IdString d, ElementType t, QString str, QTreeWidgetItem *parent) : ElementTreeItem(t, str, parent) { + this->setFlags(this->flags() | Qt::ItemIsSelectable); this->data = d; } virtual ~IdStringTreeItem(){}; @@ -68,6 +70,7 @@ DesignWidget::DesignWidget(QWidget *parent) : QWidget(parent), ctx(nullptr), net treeWidget->setColumnCount(1); treeWidget->setHeaderLabel("Items"); treeWidget->setContextMenuPolicy(Qt::CustomContextMenu); + treeWidget->setSelectionMode(QAbstractItemView::ExtendedSelection); // Add property view variantManager = new QtVariantPropertyManager(this); @@ -79,6 +82,7 @@ DesignWidget::DesignWidget(QWidget *parent) : QWidget(parent), ctx(nullptr), net propertyEditor->setPropertiesWithoutValueMarked(true); propertyEditor->show(); propertyEditor->treeWidget()->setContextMenuPolicy(Qt::CustomContextMenu); + propertyEditor->treeWidget()->setSelectionMode(QAbstractItemView::ExtendedSelection); QLineEdit *lineEdit = new QLineEdit(); lineEdit->setClearButtonEnabled(true); @@ -248,6 +252,7 @@ void DesignWidget::newContext(Context *ctx) QTreeWidgetItem *bel_root = new QTreeWidgetItem(treeWidget); QMap bel_items; bel_root->setText(0, "Bels"); + bel_root->setFlags(bel_root->flags() & ~Qt::ItemIsSelectable); treeWidget->insertTopLevelItem(0, bel_root); if (ctx) { for (auto bel : ctx->getBels()) { @@ -280,6 +285,7 @@ void DesignWidget::newContext(Context *ctx) QTreeWidgetItem *wire_root = new QTreeWidgetItem(treeWidget); QMap wire_items; wire_root->setText(0, "Wires"); + wire_root->setFlags(wire_root->flags() & ~Qt::ItemIsSelectable); treeWidget->insertTopLevelItem(0, wire_root); if (ctx) { for (auto wire : ctx->getWires()) { @@ -311,6 +317,7 @@ void DesignWidget::newContext(Context *ctx) QTreeWidgetItem *pip_root = new QTreeWidgetItem(treeWidget); QMap pip_items; pip_root->setText(0, "Pips"); + pip_root->setFlags(pip_root->flags() & ~Qt::ItemIsSelectable); treeWidget->insertTopLevelItem(0, pip_root); #ifndef ARCH_ECP5 if (ctx) { @@ -343,10 +350,12 @@ void DesignWidget::newContext(Context *ctx) nets_root = new QTreeWidgetItem(treeWidget); nets_root->setText(0, "Nets"); + nets_root->setFlags(nets_root->flags() & ~Qt::ItemIsSelectable); treeWidget->insertTopLevelItem(0, nets_root); cells_root = new QTreeWidgetItem(treeWidget); cells_root->setText(0, "Cells"); + cells_root->setFlags(cells_root->flags() & ~Qt::ItemIsSelectable); treeWidget->insertTopLevelItem(0, cells_root); updateTree(); @@ -418,6 +427,7 @@ QtProperty *DesignWidget::addTopLevelProperty(const QString &id) QtProperty *topItem = groupManager->addProperty(id); propertyToId[topItem] = id; idToProperty[id] = topItem; + topItem->setSelectable(false); propertyEditor->addProperty(topItem); return topItem; } @@ -485,12 +495,14 @@ void DesignWidget::addProperty(QtProperty *topItem, int propertyType, const QStr QtVariantProperty *item = readOnlyManager->addProperty(propertyType, name); item->setValue(value); item->setPropertyId(getElementTypeName(type)); + item->setSelectable(type != ElementType::NONE); topItem->addSubProperty(item); } QtProperty *DesignWidget::addSubGroup(QtProperty *topItem, const QString &name) { QtProperty *item = groupManager->addProperty(name); + item->setSelectable(false); topItem->addSubProperty(item); return item; }