diff options
author | Miodrag Milanovic <mmicko@gmail.com> | 2018-08-08 21:15:54 +0200 |
---|---|---|
committer | Miodrag Milanovic <mmicko@gmail.com> | 2018-08-08 21:15:54 +0200 |
commit | 5dd7a74b874cae0bb8b22ef8a385e2546d3bd531 (patch) | |
tree | 3c9425eccdf9696f94ed8b0690cfb0110978103a /gui | |
parent | bc378fc3e4bbb16251f4076384eb6aaf25ef79e3 (diff) | |
download | nextpnr-5dd7a74b874cae0bb8b22ef8a385e2546d3bd531.tar.gz nextpnr-5dd7a74b874cae0bb8b22ef8a385e2546d3bd531.tar.bz2 nextpnr-5dd7a74b874cae0bb8b22ef8a385e2546d3bd531.zip |
Make loading works nice and use settings
Diffstat (limited to 'gui')
-rw-r--r-- | gui/basewindow.cc | 34 | ||||
-rw-r--r-- | gui/basewindow.h | 5 | ||||
-rw-r--r-- | gui/ecp5/mainwindow.cc | 2 | ||||
-rw-r--r-- | gui/generic/mainwindow.cc | 1 | ||||
-rw-r--r-- | gui/ice40/mainwindow.cc | 12 | ||||
-rw-r--r-- | gui/ice40/mainwindow.h | 2 |
6 files changed, 29 insertions, 27 deletions
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> 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<Context> 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> 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<Context>(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> 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> 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<Context>(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
|