From 6b8b067b1a7f0ae165c79e64558f5e0646574457 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Wed, 25 Jul 2018 09:37:22 +0200 Subject: Fix for zero length case --- gui/fpgaviewwidget.cc | 2 ++ 1 file changed, 2 insertions(+) (limited to 'gui') diff --git a/gui/fpgaviewwidget.cc b/gui/fpgaviewwidget.cc index 7ccb3445..15f37ce0 100644 --- a/gui/fpgaviewwidget.cc +++ b/gui/fpgaviewwidget.cc @@ -198,6 +198,8 @@ bool LineShader::compile(void) void LineShader::draw(const LineShaderData &line, const QColor &color, float thickness, const QMatrix4x4 &projection) { auto gl = QOpenGLContext::currentContext()->functions(); + if (line.vertices.size() == 0) + return; vao_.bind(); program_->bind(); -- cgit v1.2.3 From 2596b9fe17fbf0a08ff234c7798a32429d27640b Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Wed, 25 Jul 2018 19:10:45 +0200 Subject: Add ability for multiple selection, enable for select only items that make sense --- gui/designwidget.cc | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'gui') 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; } -- cgit v1.2.3 From 9a4bdbe4b6481e6548ec8391dabb512ccc674b6e Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Wed, 25 Jul 2018 19:21:46 +0200 Subject: made select multiple to work --- gui/designwidget.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'gui') diff --git a/gui/designwidget.cc b/gui/designwidget.cc index 33a8ed93..93b53926 100644 --- a/gui/designwidget.cc +++ b/gui/designwidget.cc @@ -512,6 +512,19 @@ void DesignWidget::onItemSelectionChanged() if (treeWidget->selectedItems().size() == 0) return; + if (treeWidget->selectedItems().size() > 1) + { + std::vector decals; + for (auto clickItem : treeWidget->selectedItems()) { + IdString value = static_cast(clickItem)->getData(); + ElementType type = static_cast(clickItem)->getType(); + std::vector d = getDecals(type, value); + std::move(d.begin(), d.end(), std::back_inserter(decals)); + } + Q_EMIT selected(decals); + return; + } + QTreeWidgetItem *clickItem = treeWidget->selectedItems().at(0); if (!clickItem->parent()) -- cgit v1.2.3