From 5c6b8a5f0473c6ec04dd045029eb0d87353558ab Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Wed, 30 Jun 2021 10:10:18 +0200 Subject: [PATCH] Preserve ArchArgs and reinit Context when applicable in GUI --- common/command.cc | 9 --------- common/context.h | 6 +++++- gui/basewindow.cc | 7 ++++++- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/common/command.cc b/common/command.cc index 89bbf90c..7f276193 100644 --- a/common/command.cc +++ b/common/command.cc @@ -475,15 +475,6 @@ int CommandHandler::exec() void CommandHandler::load_json(Context *ctx, std::string filename) { - ctx->cells.clear(); - ctx->nets.clear(); - ctx->net_aliases.clear(); - ctx->ports.clear(); - ctx->hierarchy.clear(); - ctx->settings.erase(ctx->id("pack")); - ctx->settings.erase(ctx->id("place")); - ctx->settings.erase(ctx->id("route")); - setupContext(ctx); setupArchContext(ctx); { diff --git a/common/context.h b/common/context.h index ee7ef0ce..f2b66600 100644 --- a/common/context.h +++ b/common/context.h @@ -37,7 +37,11 @@ struct Context : Arch, DeterministicRNG // Should we disable printing of the location of nets in the critical path? bool disable_critical_path_source_print = false; - Context(ArchArgs args) : Arch(args) { BaseCtx::as_ctx = this; } + ArchArgs arch_args; + + Context(ArchArgs args) : Arch(args) { BaseCtx::as_ctx = this; arch_args = args; } + + ArchArgs getArchArgs() { return arch_args; } // -------------------------------------------------------------- diff --git a/gui/basewindow.cc b/gui/basewindow.cc index 80785199..e93428cf 100644 --- a/gui/basewindow.cc +++ b/gui/basewindow.cc @@ -365,6 +365,11 @@ void BaseMainWindow::open_json() QString fileName = QFileDialog::getOpenFileName(this, QString("Open JSON"), QString(), QString("*.json")); if (!fileName.isEmpty()) { disableActions(); + if (ctx->settings.find(ctx->id("synth")) == ctx->settings.end()) { + ArchArgs chipArgs = ctx->getArchArgs(); + ctx = std::unique_ptr(new Context(chipArgs)); + Q_EMIT contextChanged(ctx.get()); + } handler->load_json(ctx.get(), fileName.toStdString()); Q_EMIT updateTreeView(); log("Loading design successful.\n"); @@ -523,7 +528,7 @@ void BaseMainWindow::place() { Q_EMIT task->place(timing_driven); } void BaseMainWindow::disableActions() { - actionLoadJSON->setEnabled(false); + actionLoadJSON->setEnabled(true); actionPack->setEnabled(false); actionAssignBudget->setEnabled(false); actionPlace->setEnabled(false);