diff options
author | gatecat <gatecat@ds0.me> | 2021-06-07 21:02:43 +0100 |
---|---|---|
committer | gatecat <gatecat@ds0.me> | 2021-06-07 21:07:17 +0100 |
commit | 875004d300eb4b85e13c026378e39b31b6922f93 (patch) | |
tree | dcaa0f2265d32916578191b5c1ad9f5df104d59c | |
parent | d946cfd265fd137f71ffe40e540ec1d8e5451bd8 (diff) | |
download | nextpnr-875004d300eb4b85e13c026378e39b31b6922f93.tar.gz nextpnr-875004d300eb4b85e13c026378e39b31b6922f93.tar.bz2 nextpnr-875004d300eb4b85e13c026378e39b31b6922f93.zip |
gui: Don't destroy context when loading JSON
Signed-off-by: gatecat <gatecat@ds0.me>
-rw-r--r-- | common/command.cc | 21 | ||||
-rw-r--r-- | common/command.h | 2 | ||||
-rw-r--r-- | gui/basewindow.cc | 4 |
3 files changed, 16 insertions, 11 deletions
diff --git a/common/command.cc b/common/command.cc index 27e59260..3341b521 100644 --- a/common/command.cc +++ b/common/command.cc @@ -473,19 +473,24 @@ int CommandHandler::exec() } } -std::unique_ptr<Context> CommandHandler::load_json(std::string filename) +void CommandHandler::load_json(Context *ctx, std::string filename) { - dict<std::string, Property> values; - std::unique_ptr<Context> ctx = createContext(values); - setupContext(ctx.get()); - setupArchContext(ctx.get()); + 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); { std::ifstream f(filename); - if (!parse_json(f, filename, ctx.get())) + if (!parse_json(f, filename, ctx)) log_error("Loading design failed.\n"); } - customAfterLoad(ctx.get()); - return ctx; } void CommandHandler::clear() { vm.clear(); } diff --git a/common/command.h b/common/command.h index ba606ea2..c82bcd3a 100644 --- a/common/command.h +++ b/common/command.h @@ -37,7 +37,7 @@ class CommandHandler virtual ~CommandHandler(){}; int exec(); - std::unique_ptr<Context> load_json(std::string filename); + void load_json(Context *ctx, std::string filename); void clear(); protected: diff --git a/gui/basewindow.cc b/gui/basewindow.cc index 08cbafe4..50eb2e52 100644 --- a/gui/basewindow.cc +++ b/gui/basewindow.cc @@ -30,6 +30,7 @@ #include <fstream>
#include "designwidget.h"
#include "fpgaviewwidget.h"
+#include "json_frontend.h"
#include "jsonwrite.h"
#include "log.h"
#include "mainwindow.h"
@@ -364,8 +365,7 @@ void BaseMainWindow::open_json() QString fileName = QFileDialog::getOpenFileName(this, QString("Open JSON"), QString(), QString("*.json"));
if (!fileName.isEmpty()) {
disableActions();
- ctx = handler->load_json(fileName.toStdString());
- Q_EMIT contextChanged(ctx.get());
+ handler->load_json(ctx.get(), fileName.toStdString());
Q_EMIT updateTreeView();
log("Loading design successful.\n");
updateActions();
|