make update of tree for nets and cells partial

This commit is contained in:
Miodrag Milanovic 2018-07-23 19:53:56 +02:00
parent 730e56e3dd
commit 139f7e0903
2 changed files with 57 additions and 27 deletions

View File

@ -338,48 +338,78 @@ void DesignWidget::newContext(Context *ctx)
for (auto pip : nameToItem[2].toStdMap()) { for (auto pip : nameToItem[2].toStdMap()) {
pip_root->addChild(pip.second); pip_root->addChild(pip.second);
} }
nets_root = new QTreeWidgetItem(treeWidget);
nets_root->setText(0, "Nets");
treeWidget->insertTopLevelItem(0, nets_root);
cells_root = new QTreeWidgetItem(treeWidget);
cells_root->setText(0, "Cells");
treeWidget->insertTopLevelItem(0, cells_root);
updateTree(); updateTree();
} }
void DesignWidget::updateTree() void DesignWidget::updateTree()
{ {
clearProperties(); if (!ctx)
delete nets_root; return;
delete cells_root;
nameToItem[3].clear();
nameToItem[4].clear();
clearProperties();
// treeWidget->setSortingEnabled(false);
// Remove nets not existing any more
QMap<QString, QTreeWidgetItem *>::iterator i = nameToItem[3].begin();
while (i != nameToItem[3].end()) {
QMap<QString, QTreeWidgetItem *>::iterator prev = i;
++i;
if (ctx->nets.find(ctx->id(prev.key().toStdString())) == ctx->nets.end()) {
if (treeWidget->currentItem() == prev.value())
treeWidget->setCurrentItem(nets_root);
if (highlightSelected.contains(prev.value()))
highlightSelected.remove(prev.value());
delete prev.value();
nameToItem[3].erase(prev);
}
}
// Add nets to tree // Add nets to tree
nets_root = new QTreeWidgetItem(treeWidget);
nets_root->setText(0, "Nets");
treeWidget->insertTopLevelItem(0, nets_root);
if (ctx) {
for (auto &item : ctx->nets) { for (auto &item : ctx->nets) {
auto id = item.first; auto id = item.first;
QString name = QString(id.c_str(ctx)); QString name = QString(id.c_str(ctx));
if (!nameToItem[3].contains(name)) {
IdStringTreeItem *newItem = new IdStringTreeItem(id, ElementType::NET, name, nullptr); IdStringTreeItem *newItem = new IdStringTreeItem(id, ElementType::NET, name, nullptr);
nets_root->addChild(newItem);
nameToItem[3].insert(name, newItem); nameToItem[3].insert(name, newItem);
} }
} }
for (auto item : nameToItem[3].toStdMap()) {
nets_root->addChild(item.second);
}
// Remove cells not existing any more
i = nameToItem[4].begin();
while (i != nameToItem[4].end()) {
QMap<QString, QTreeWidgetItem *>::iterator prev = i;
++i;
if (ctx->cells.find(ctx->id(prev.key().toStdString())) == ctx->cells.end()) {
if (treeWidget->currentItem() == prev.value())
treeWidget->setCurrentItem(cells_root);
if (highlightSelected.contains(prev.value()))
highlightSelected.remove(prev.value());
delete prev.value();
nameToItem[4].erase(prev);
}
}
// Add cells to tree // Add cells to tree
cells_root = new QTreeWidgetItem(treeWidget);
cells_root->setText(0, "Cells");
treeWidget->insertTopLevelItem(0, cells_root);
if (ctx) {
for (auto &item : ctx->cells) { for (auto &item : ctx->cells) {
auto id = item.first; auto id = item.first;
QString name = QString(id.c_str(ctx)); QString name = QString(id.c_str(ctx));
if (!nameToItem[4].contains(name)) {
IdStringTreeItem *newItem = new IdStringTreeItem(id, ElementType::CELL, name, nullptr); IdStringTreeItem *newItem = new IdStringTreeItem(id, ElementType::CELL, name, nullptr);
cells_root->addChild(newItem);
nameToItem[4].insert(name, newItem); nameToItem[4].insert(name, newItem);
} }
} }
for (auto item : nameToItem[4].toStdMap()) { // treeWidget->sortByColumn(0, Qt::AscendingOrder);
cells_root->addChild(item.second); // treeWidget->setSortingEnabled(true);
}
} }
QtProperty *DesignWidget::addTopLevelProperty(const QString &id) QtProperty *DesignWidget::addTopLevelProperty(const QString &id)
{ {

View File

@ -120,7 +120,7 @@ void Worker::place(bool timing_driven)
Q_EMIT taskStarted(); Q_EMIT taskStarted();
try { try {
ctx->timing_driven = timing_driven; ctx->timing_driven = timing_driven;
log_info("Assigned budget %0.2f MHz",ctx->target_freq / 1e6); log_info("Assigned budget %0.2f MHz", ctx->target_freq / 1e6);
assign_budget(ctx); assign_budget(ctx);
Q_EMIT place_finished(ctx->place()); Q_EMIT place_finished(ctx->place());
} catch (WorkerInterruptionRequested) { } catch (WorkerInterruptionRequested) {