fix select multiple, and reinit model

This commit is contained in:
Miodrag Milanovic 2018-07-28 17:13:13 +02:00
parent 0d3d149c4f
commit 9a30b6330b

View File

@ -30,7 +30,7 @@
NEXTPNR_NAMESPACE_BEGIN NEXTPNR_NAMESPACE_BEGIN
DesignWidget::DesignWidget(QWidget *parent) : QWidget(parent), ctx(nullptr) DesignWidget::DesignWidget(QWidget *parent) : QWidget(parent), ctx(nullptr), selectionModel(nullptr)
{ {
// Add tree view // Add tree view
treeView = new QTreeView(); treeView = new QTreeView();
@ -158,9 +158,6 @@ DesignWidget::DesignWidget(QWidget *parent) : QWidget(parent), ctx(nullptr)
&DesignWidget::prepareMenuProperty); &DesignWidget::prepareMenuProperty);
connect(propertyEditor->treeWidget(), &QTreeWidget::itemDoubleClicked, this, &DesignWidget::onItemDoubleClicked); connect(propertyEditor->treeWidget(), &QTreeWidget::itemDoubleClicked, this, &DesignWidget::onItemDoubleClicked);
selectionModel = treeView->selectionModel();
connect(selectionModel, SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
SLOT(onSelectionChanged(const QItemSelection &, const QItemSelection &)));
connect(treeView, &QTreeWidget::customContextMenuRequested, this, &DesignWidget::prepareMenuTree); connect(treeView, &QTreeWidget::customContextMenuRequested, this, &DesignWidget::prepareMenuTree);
history_index = -1; history_index = -1;
@ -202,6 +199,8 @@ void DesignWidget::addToHistory(QModelIndex item)
void DesignWidget::newContext(Context *ctx) void DesignWidget::newContext(Context *ctx)
{ {
if (!ctx)
return;
highlightSelected.clear(); highlightSelected.clear();
history_ignore = false; history_ignore = false;
@ -211,16 +210,13 @@ void DesignWidget::newContext(Context *ctx)
highlightSelected.clear(); highlightSelected.clear();
this->ctx = ctx; this->ctx = ctx;
treeView->setModel(nullptr);
treeModel->loadData(ctx); treeModel->loadData(ctx);
updateTree(); updateTree();
} }
void DesignWidget::updateTree() void DesignWidget::updateTree()
{ {
if (!ctx)
return;
clearProperties(); clearProperties();
QMap<ContextTreeItem *, int>::iterator i = highlightSelected.begin(); QMap<ContextTreeItem *, int>::iterator i = highlightSelected.begin();
@ -236,6 +232,10 @@ void DesignWidget::updateTree()
} }
treeModel->updateData(ctx); treeModel->updateData(ctx);
treeView->setModel(treeModel);
selectionModel = treeView->selectionModel();
connect(selectionModel, SIGNAL(selectionChanged(const QItemSelection &, const QItemSelection &)),
SLOT(onSelectionChanged(const QItemSelection &, const QItemSelection &)));
} }
QtProperty *DesignWidget::addTopLevelProperty(const QString &id) QtProperty *DesignWidget::addTopLevelProperty(const QString &id)
{ {
@ -310,21 +310,21 @@ QtProperty *DesignWidget::addSubGroup(QtProperty *topItem, const QString &name)
void DesignWidget::onClickedBel(BelId bel, bool keep) void DesignWidget::onClickedBel(BelId bel, bool keep)
{ {
ContextTreeItem *item = treeModel->nodeForIdType(ElementType::BEL, ctx->getBelName(bel).c_str(ctx)); ContextTreeItem *item = treeModel->nodeForIdType(ElementType::BEL, ctx->getBelName(bel).c_str(ctx));
selectionModel->setCurrentIndex(treeModel->indexFromNode(item), QItemSelectionModel::ClearAndSelect); selectionModel->setCurrentIndex(treeModel->indexFromNode(item), keep ? QItemSelectionModel::Select : QItemSelectionModel::ClearAndSelect);
Q_EMIT selected(getDecals(ElementType::BEL, ctx->getBelName(bel)), keep); Q_EMIT selected(getDecals(ElementType::BEL, ctx->getBelName(bel)), keep);
} }
void DesignWidget::onClickedWire(WireId wire, bool keep) void DesignWidget::onClickedWire(WireId wire, bool keep)
{ {
ContextTreeItem *item = treeModel->nodeForIdType(ElementType::WIRE, ctx->getWireName(wire).c_str(ctx)); ContextTreeItem *item = treeModel->nodeForIdType(ElementType::WIRE, ctx->getWireName(wire).c_str(ctx));
selectionModel->setCurrentIndex(treeModel->indexFromNode(item), QItemSelectionModel::ClearAndSelect); selectionModel->setCurrentIndex(treeModel->indexFromNode(item), keep ? QItemSelectionModel::Select : QItemSelectionModel::ClearAndSelect);
Q_EMIT selected(getDecals(ElementType::WIRE, ctx->getWireName(wire)), keep); Q_EMIT selected(getDecals(ElementType::WIRE, ctx->getWireName(wire)), keep);
} }
void DesignWidget::onClickedPip(PipId pip, bool keep) void DesignWidget::onClickedPip(PipId pip, bool keep)
{ {
ContextTreeItem *item = treeModel->nodeForIdType(ElementType::PIP, ctx->getPipName(pip).c_str(ctx)); ContextTreeItem *item = treeModel->nodeForIdType(ElementType::PIP, ctx->getPipName(pip).c_str(ctx));
selectionModel->setCurrentIndex(treeModel->indexFromNode(item), QItemSelectionModel::ClearAndSelect); selectionModel->setCurrentIndex(treeModel->indexFromNode(item), keep ? QItemSelectionModel::Select : QItemSelectionModel::ClearAndSelect);
Q_EMIT selected(getDecals(ElementType::PIP, ctx->getPipName(pip)), keep); Q_EMIT selected(getDecals(ElementType::PIP, ctx->getPipName(pip)), keep);
} }