From 5dd7a74b874cae0bb8b22ef8a385e2546d3bd531 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Wed, 8 Aug 2018 21:15:54 +0200 Subject: Make loading works nice and use settings --- gui/basewindow.cc | 34 ++++++++++++++++++++-------------- gui/basewindow.h | 5 +++-- gui/ecp5/mainwindow.cc | 2 -- gui/generic/mainwindow.cc | 1 - gui/ice40/mainwindow.cc | 12 ++++++------ gui/ice40/mainwindow.h | 2 -- 6 files changed, 29 insertions(+), 27 deletions(-) (limited to 'gui') diff --git a/gui/basewindow.cc b/gui/basewindow.cc index 857919ea..66df3ca4 100644 --- a/gui/basewindow.cc +++ b/gui/basewindow.cc @@ -298,12 +298,11 @@ void BaseMainWindow::createMenusAndBars() void BaseMainWindow::load_json(std::string filename) { disableActions(); - currentJson = filename; std::ifstream f(filename); if (parse_json_file(f, filename, ctx.get())) { log("Loading design successful.\n"); Q_EMIT updateTreeView(); - updateJsonLoaded(); + updateLoaded(); } else { actionLoadJSON->setEnabled(true); log("Loading design failed.\n"); @@ -420,35 +419,42 @@ void BaseMainWindow::disableActions() actionNew->setEnabled(true); actionOpen->setEnabled(true); - actionSave->setEnabled(!currentJson.empty()); + + if (ctx->settings.find(ctx->id("project/input/json")) != ctx->settings.end()) + actionSave->setEnabled(true); + else + actionSave->setEnabled(false); onDisableActions(); } -void BaseMainWindow::updateJsonLoaded() +void BaseMainWindow::updateLoaded() { disableActions(); actionPack->setEnabled(true); onJsonLoaded(); + onProjectLoaded(); +} + +void BaseMainWindow::projectLoad(std::string filename) +{ + ProjectHandler proj; + disableActions(); + ctx = proj.load(filename); + Q_EMIT contextChanged(ctx.get()); + log_info("Loaded project %s...\n", filename.c_str()); + updateLoaded(); } void BaseMainWindow::open_proj() { QString fileName = QFileDialog::getOpenFileName(this, QString("Open Project"), QString(), QString("*.proj")); if (!fileName.isEmpty()) { - try { - ProjectHandler proj; - disableActions(); - ctx = proj.load(fileName.toStdString()); - Q_EMIT contextChanged(ctx.get()); - log_info("Loaded project %s...\n", fileName.toStdString().c_str()); - updateJsonLoaded(); - onProjectLoaded(); - } catch (log_execution_error_exception) { - } + projectLoad(fileName.toStdString()); } } +void BaseMainWindow::notifyChangeContext() { Q_EMIT contextChanged(ctx.get()); } void BaseMainWindow::save_proj() { if (currentProj.empty()) { diff --git a/gui/basewindow.h b/gui/basewindow.h index 6e8f8587..eb32033a 100644 --- a/gui/basewindow.h +++ b/gui/basewindow.h @@ -48,7 +48,9 @@ class BaseMainWindow : public QMainWindow explicit BaseMainWindow(std::unique_ptr context, ArchArgs args, QWidget *parent = 0); virtual ~BaseMainWindow(); Context *getContext() { return ctx.get(); } - void updateJsonLoaded(); + void updateLoaded(); + void projectLoad(std::string filename); + void notifyChangeContext(); protected: void createMenusAndBars(); @@ -95,7 +97,6 @@ class BaseMainWindow : public QMainWindow std::unique_ptr ctx; TaskManager *task; bool timing_driven; - std::string currentJson; std::string currentProj; // main widgets diff --git a/gui/ecp5/mainwindow.cc b/gui/ecp5/mainwindow.cc index 4fc8be16..b3c53849 100644 --- a/gui/ecp5/mainwindow.cc +++ b/gui/ecp5/mainwindow.cc @@ -40,7 +40,6 @@ MainWindow::MainWindow(std::unique_ptr context, ArchArgs args, QWidget connect(this, &BaseMainWindow::contextChanged, this, &MainWindow::newContext); createMenu(); - Q_EMIT contextChanged(ctx.get()); } MainWindow::~MainWindow() {} @@ -115,7 +114,6 @@ void MainWindow::new_proj() if (ok && !item.isEmpty()) { currentProj = ""; - currentJson = ""; disableActions(); chipArgs.package = package.toStdString().c_str(); ctx = std::unique_ptr(new Context(chipArgs)); diff --git a/gui/generic/mainwindow.cc b/gui/generic/mainwindow.cc index 76837ed4..12912cc9 100644 --- a/gui/generic/mainwindow.cc +++ b/gui/generic/mainwindow.cc @@ -34,7 +34,6 @@ MainWindow::MainWindow(std::unique_ptr context, ArchArgs args, QWidget connect(this, &BaseMainWindow::contextChanged, this, &MainWindow::newContext); createMenu(); - Q_EMIT contextChanged(ctx.get()); } MainWindow::~MainWindow() {} diff --git a/gui/ice40/mainwindow.cc b/gui/ice40/mainwindow.cc index bf6e4b4c..9fe80717 100644 --- a/gui/ice40/mainwindow.cc +++ b/gui/ice40/mainwindow.cc @@ -46,8 +46,6 @@ MainWindow::MainWindow(std::unique_ptr context, ArchArgs args, QWidget connect(this, &BaseMainWindow::contextChanged, this, &MainWindow::newContext); createMenu(); - - Q_EMIT contextChanged(ctx.get()); } MainWindow::~MainWindow() {} @@ -133,8 +131,6 @@ void MainWindow::new_proj() if (ok && !item.isEmpty()) { currentProj = ""; - currentJson = ""; - currentPCF = ""; disableActions(); chipArgs.package = package.toStdString().c_str(); ctx = std::unique_ptr(new Context(chipArgs)); @@ -148,7 +144,6 @@ void MainWindow::new_proj() void MainWindow::load_pcf(std::string filename) { disableActions(); - currentPCF = filename; std::ifstream f(filename); if (apply_pcf(ctx.get(), filename, f)) { log("Loading PCF successful.\n"); @@ -193,6 +188,11 @@ void MainWindow::onDisableActions() void MainWindow::onJsonLoaded() { actionLoadPCF->setEnabled(true); } void MainWindow::onRouteFinished() { actionSaveAsc->setEnabled(true); } -void MainWindow::onProjectLoaded() { actionLoadPCF->setEnabled(false); } + +void MainWindow::onProjectLoaded() +{ + if (ctx->settings.find(ctx->id("project/input/pcf")) != ctx->settings.end()) + actionLoadPCF->setEnabled(false); +} NEXTPNR_NAMESPACE_END diff --git a/gui/ice40/mainwindow.h b/gui/ice40/mainwindow.h index 201bf1b1..bb8ed75f 100644 --- a/gui/ice40/mainwindow.h +++ b/gui/ice40/mainwindow.h @@ -54,8 +54,6 @@ class MainWindow : public BaseMainWindow private: QAction *actionLoadPCF; QAction *actionSaveAsc; - - std::string currentPCF; }; NEXTPNR_NAMESPACE_END -- cgit v1.2.3