aboutsummaryrefslogtreecommitdiffstats
path: root/gui/ice40
diff options
context:
space:
mode:
authorMiodrag Milanovic <mmicko@gmail.com>2018-08-02 18:50:08 +0200
committerMiodrag Milanovic <mmicko@gmail.com>2018-08-02 18:50:08 +0200
commit4fa0c81ed7ea8a8ad1c636b3d9f45deb8c73a2c4 (patch)
treeea0d077d066efc74df5ce0868e7b91d8483ae4df /gui/ice40
parenta761b772c8294858590c4abced272d04bd58aad3 (diff)
downloadnextpnr-4fa0c81ed7ea8a8ad1c636b3d9f45deb8c73a2c4.tar.gz
nextpnr-4fa0c81ed7ea8a8ad1c636b3d9f45deb8c73a2c4.tar.bz2
nextpnr-4fa0c81ed7ea8a8ad1c636b3d9f45deb8c73a2c4.zip
Move common logic to basewindow
Diffstat (limited to 'gui/ice40')
-rw-r--r--gui/ice40/mainwindow.cc220
-rw-r--r--gui/ice40/mainwindow.h32
2 files changed, 18 insertions, 234 deletions
diff --git a/gui/ice40/mainwindow.cc b/gui/ice40/mainwindow.cc
index bc790296..8f880191 100644
--- a/gui/ice40/mainwindow.cc
+++ b/gui/ice40/mainwindow.cc
@@ -37,127 +37,45 @@ static void initMainResource() { Q_INIT_RESOURCE(nextpnr); }
NEXTPNR_NAMESPACE_BEGIN
MainWindow::MainWindow(std::unique_ptr<Context> context, ArchArgs args, QWidget *parent)
- : BaseMainWindow(std::move(context), parent), timing_driven(false), chipArgs(args)
+ : BaseMainWindow(std::move(context), parent), chipArgs(args)
{
initMainResource();
std::string title = "nextpnr-ice40 - [EMPTY]";
setWindowTitle(title.c_str());
- task = new TaskManager();
- connect(task, SIGNAL(log(std::string)), this, SLOT(writeInfo(std::string)));
-
- connect(task, SIGNAL(pack_finished(bool)), this, SLOT(pack_finished(bool)));
- connect(task, SIGNAL(budget_finish(bool)), this, SLOT(budget_finish(bool)));
- connect(task, SIGNAL(place_finished(bool)), this, SLOT(place_finished(bool)));
- connect(task, SIGNAL(route_finished(bool)), this, SLOT(route_finished(bool)));
-
- connect(task, SIGNAL(taskCanceled()), this, SLOT(taskCanceled()));
- connect(task, SIGNAL(taskStarted()), this, SLOT(taskStarted()));
- connect(task, SIGNAL(taskPaused()), this, SLOT(taskPaused()));
-
connect(this, SIGNAL(contextChanged(Context *)), this, SLOT(newContext(Context *)));
- connect(this, SIGNAL(contextChanged(Context *)), task, SIGNAL(contextChanged(Context *)));
createMenu();
Q_EMIT contextChanged(ctx.get());
}
-MainWindow::~MainWindow() { delete task; }
+MainWindow::~MainWindow() {}
void MainWindow::createMenu()
{
- QMenu *menu_Design = new QMenu("&Design", menuBar);
- menuBar->addAction(menu_Design->menuAction());
-
- actionLoadJSON = new QAction("Open JSON", this);
- actionLoadJSON->setIcon(QIcon(":/icons/resources/open_json.png"));
- actionLoadJSON->setStatusTip("Open an existing JSON file");
- actionLoadJSON->setEnabled(true);
- connect(actionLoadJSON, SIGNAL(triggered()), this, SLOT(open_json()));
-
+
actionLoadPCF = new QAction("Open PCF", this);
actionLoadPCF->setIcon(QIcon(":/icons/resources/open_pcf.png"));
actionLoadPCF->setStatusTip("Open PCF file");
actionLoadPCF->setEnabled(false);
connect(actionLoadPCF, SIGNAL(triggered()), this, SLOT(open_pcf()));
- actionPack = new QAction("Pack", this);
- actionPack->setIcon(QIcon(":/icons/resources/pack.png"));
- actionPack->setStatusTip("Pack current design");
- actionPack->setEnabled(false);
- connect(actionPack, SIGNAL(triggered()), task, SIGNAL(pack()));
-
- actionAssignBudget = new QAction("Assign Budget", this);
- actionAssignBudget->setIcon(QIcon(":/icons/resources/time_add.png"));
- actionAssignBudget->setStatusTip("Assign time budget for current design");
- actionAssignBudget->setEnabled(false);
- connect(actionAssignBudget, SIGNAL(triggered()), this, SLOT(budget()));
-
- actionPlace = new QAction("Place", this);
- actionPlace->setIcon(QIcon(":/icons/resources/place.png"));
- actionPlace->setStatusTip("Place current design");
- actionPlace->setEnabled(false);
- connect(actionPlace, SIGNAL(triggered()), this, SLOT(place()));
-
- actionRoute = new QAction("Route", this);
- actionRoute->setIcon(QIcon(":/icons/resources/route.png"));
- actionRoute->setStatusTip("Route current design");
- actionRoute->setEnabled(false);
- connect(actionRoute, SIGNAL(triggered()), task, SIGNAL(route()));
-
actionSaveAsc = new QAction("Save ASC", this);
actionSaveAsc->setIcon(QIcon(":/icons/resources/save_asc.png"));
actionSaveAsc->setStatusTip("Save ASC file");
actionSaveAsc->setEnabled(false);
connect(actionSaveAsc, SIGNAL(triggered()), this, SLOT(save_asc()));
- QToolBar *taskFPGABar = new QToolBar();
- addToolBar(Qt::TopToolBarArea, taskFPGABar);
-
- taskFPGABar->addAction(actionLoadJSON);
+ taskFPGABar->addSeparator();
taskFPGABar->addAction(actionLoadPCF);
- taskFPGABar->addAction(actionPack);
- taskFPGABar->addAction(actionAssignBudget);
- taskFPGABar->addAction(actionPlace);
- taskFPGABar->addAction(actionRoute);
taskFPGABar->addAction(actionSaveAsc);
+
+ menuDesign->addSeparator();
+ menuDesign->addAction(actionLoadPCF);
+ menuDesign->addAction(actionSaveAsc);
- menu_Design->addAction(actionLoadJSON);
- menu_Design->addAction(actionLoadPCF);
- menu_Design->addAction(actionPack);
- menu_Design->addAction(actionAssignBudget);
- menu_Design->addAction(actionPlace);
- menu_Design->addAction(actionRoute);
- menu_Design->addAction(actionSaveAsc);
-
- actionPlay = new QAction("Play", this);
- actionPlay->setIcon(QIcon(":/icons/resources/control_play.png"));
- actionPlay->setStatusTip("Continue running task");
- actionPlay->setEnabled(false);
- connect(actionPlay, SIGNAL(triggered()), task, SLOT(continue_thread()));
-
- actionPause = new QAction("Pause", this);
- actionPause->setIcon(QIcon(":/icons/resources/control_pause.png"));
- actionPause->setStatusTip("Pause running task");
- actionPause->setEnabled(false);
- connect(actionPause, SIGNAL(triggered()), task, SLOT(pause_thread()));
-
- actionStop = new QAction("Stop", this);
- actionStop->setIcon(QIcon(":/icons/resources/control_stop.png"));
- actionStop->setStatusTip("Stop running task");
- actionStop->setEnabled(false);
- connect(actionStop, SIGNAL(triggered()), task, SLOT(terminate_thread()));
-
- QToolBar *taskToolBar = new QToolBar();
- addToolBar(Qt::TopToolBarArea, taskToolBar);
-
- taskToolBar->addAction(actionPlay);
- taskToolBar->addAction(actionPause);
- taskToolBar->addAction(actionStop);
-
- createGraphicsBar();
}
#if defined(_MSC_VER)
@@ -235,22 +153,6 @@ void MainWindow::new_proj()
}
}
-void MainWindow::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");
- actionLoadPCF->setEnabled(true);
- actionPack->setEnabled(true);
- Q_EMIT updateTreeView();
- } else {
- actionLoadJSON->setEnabled(true);
- log("Loading design failed.\n");
- }
-}
-
void MainWindow::load_pcf(std::string filename)
{
disableActions();
@@ -351,14 +253,6 @@ void MainWindow::open_proj()
}
}
-void MainWindow::open_json()
-{
- QString fileName = QFileDialog::getOpenFileName(this, QString("Open JSON"), QString(), QString("*.json"));
- if (!fileName.isEmpty()) {
- load_json(fileName.toStdString());
- }
-}
-
void MainWindow::open_pcf()
{
QString fileName = QFileDialog::getOpenFileName(this, QString("Open PCF"), QString(), QString("*.pcf"));
@@ -409,108 +303,20 @@ void MainWindow::save_asc()
}
}
-void MainWindow::disableActions()
+void MainWindow::onDisableActions()
{
- actionLoadJSON->setEnabled(false);
actionLoadPCF->setEnabled(false);
- actionPack->setEnabled(false);
- actionAssignBudget->setEnabled(false);
- actionPlace->setEnabled(false);
- actionRoute->setEnabled(false);
actionSaveAsc->setEnabled(false);
-
- actionPlay->setEnabled(false);
- actionPause->setEnabled(false);
- actionStop->setEnabled(false);
-
- actionNew->setEnabled(true);
- actionOpen->setEnabled(true);
- actionSave->setEnabled(!currentJson.empty());
}
-void MainWindow::pack_finished(bool status)
+void MainWindow::onJsonLoaded()
{
- disableActions();
- if (status) {
- log("Packing design successful.\n");
- Q_EMIT updateTreeView();
- actionPlace->setEnabled(true);
- actionAssignBudget->setEnabled(true);
- } else {
- log("Packing design failed.\n");
- }
+ actionLoadPCF->setEnabled(true);
}
-
-void MainWindow::budget_finish(bool status)
+void MainWindow::onRouteFinished()
{
- disableActions();
- if (status) {
- log("Assigning timing budget successful.\n");
- actionPlace->setEnabled(true);
- } else {
- log("Assigning timing budget failed.\n");
- }
-}
-
-void MainWindow::place_finished(bool status)
-{
- disableActions();
- if (status) {
- log("Placing design successful.\n");
- Q_EMIT updateTreeView();
- actionRoute->setEnabled(true);
- } else {
- log("Placing design failed.\n");
- }
-}
-void MainWindow::route_finished(bool status)
-{
- disableActions();
- if (status) {
- log("Routing design successful.\n");
- Q_EMIT updateTreeView();
- actionSaveAsc->setEnabled(true);
- } else
- log("Routing design failed.\n");
-}
-
-void MainWindow::taskCanceled()
-{
- log("CANCELED\n");
- disableActions();
-}
-
-void MainWindow::taskStarted()
-{
- disableActions();
- actionPause->setEnabled(true);
- actionStop->setEnabled(true);
-
- actionNew->setEnabled(false);
- actionOpen->setEnabled(false);
-}
-
-void MainWindow::taskPaused()
-{
- disableActions();
- actionPlay->setEnabled(true);
- actionStop->setEnabled(true);
-
- actionNew->setEnabled(false);
- actionOpen->setEnabled(false);
-}
-
-void MainWindow::budget()
-{
- bool ok;
- double freq = QInputDialog::getDouble(this, "Assign timing budget", "Frequency [MHz]:", 50, 0, 250, 2, &ok);
- if (ok) {
- freq *= 1e6;
- timing_driven = true;
- Q_EMIT task->budget(freq);
- }
+ actionSaveAsc->setEnabled(true);
}
-void MainWindow::place() { Q_EMIT task->place(timing_driven); }
NEXTPNR_NAMESPACE_END
diff --git a/gui/ice40/mainwindow.h b/gui/ice40/mainwindow.h
index b71af162..e2e9a2e3 100644
--- a/gui/ice40/mainwindow.h
+++ b/gui/ice40/mainwindow.h
@@ -21,7 +21,6 @@
#define MAINWINDOW_H
#include "../basewindow.h"
-#include "worker.h"
NEXTPNR_NAMESPACE_BEGIN
@@ -35,50 +34,29 @@ class MainWindow : public BaseMainWindow
public:
void createMenu();
- void load_json(std::string filename);
void load_pcf(std::string filename);
+ protected:
+ void onDisableActions() override;
+ void onJsonLoaded() override;
+ void onRouteFinished() override;
+
protected Q_SLOTS:
virtual void new_proj();
virtual void open_proj();
virtual bool save_proj();
- void open_json();
void open_pcf();
- void budget();
- void place();
void save_asc();
- void pack_finished(bool status);
- void budget_finish(bool status);
- void place_finished(bool status);
- void route_finished(bool status);
-
- void taskCanceled();
- void taskStarted();
- void taskPaused();
-
void newContext(Context *ctx);
private:
- void disableActions();
-
- TaskManager *task;
- QAction *actionLoadJSON;
QAction *actionLoadPCF;
- QAction *actionPack;
- QAction *actionAssignBudget;
- QAction *actionPlace;
- QAction *actionRoute;
QAction *actionSaveAsc;
- QAction *actionPlay;
- QAction *actionPause;
- QAction *actionStop;
- bool timing_driven;
ArchArgs chipArgs;
std::string currentProj;
- std::string currentJson;
std::string currentPCF;
};