From 9c03909ebaec8157824a9cb13eeea774d29b35e1 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Thu, 21 Jun 2018 13:41:16 +0200 Subject: Make arch specific main window --- gui/basewindow.cc | 138 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 138 insertions(+) create mode 100644 gui/basewindow.cc (limited to 'gui/basewindow.cc') diff --git a/gui/basewindow.cc b/gui/basewindow.cc new file mode 100644 index 00000000..cbf0faae --- /dev/null +++ b/gui/basewindow.cc @@ -0,0 +1,138 @@ +#include "mainwindow.h" +#include +#include +#include +#include +#include +#include +#include "designwidget.h" +#include "fpgaviewwidget.h" +#include "jsonparse.h" +#include "log.h" +#include "pythontab.h" +//#include "pack.h" +//#include "pcf.h" +#include "place_sa.h" +#include "route.h" +//#include "bitstream.h" +#include "design_utils.h" + +BaseMainWindow::BaseMainWindow(Context *_ctx, QWidget *parent) + : QMainWindow(parent), ctx(_ctx) +{ + Q_INIT_RESOURCE(nextpnr); + + log_files.clear(); + log_streams.clear(); + log_write_function = [this](std::string text) { info->info(text); }; + + setObjectName(QStringLiteral("BaseMainWindow")); + resize(1024, 768); + + createMenusAndBars(); + + QWidget *centralWidget = new QWidget(this); + + QGridLayout *gridLayout = new QGridLayout(centralWidget); + gridLayout->setSpacing(6); + gridLayout->setContentsMargins(11, 11, 11, 11); + + QSplitter *splitter_h = new QSplitter(Qt::Horizontal, centralWidget); + QSplitter *splitter_v = new QSplitter(Qt::Vertical, splitter_h); + splitter_h->addWidget(splitter_v); + + gridLayout->addWidget(splitter_h, 0, 0, 1, 1); + + setCentralWidget(centralWidget); + + DesignWidget *designview = new DesignWidget(ctx); + designview->setMinimumWidth(300); + designview->setMaximumWidth(300); + splitter_h->addWidget(designview); + + connect(designview, SIGNAL(info(std::string)), this, + SLOT(writeInfo(std::string))); + + tabWidget = new QTabWidget(); + tabWidget->addTab(new PythonTab(), "Python"); + info = new InfoTab(); + tabWidget->addTab(info, "Info"); + splitter_v->addWidget(new FPGAViewWidget()); + splitter_v->addWidget(tabWidget); +} + +BaseMainWindow::~BaseMainWindow() {} + +void BaseMainWindow::writeInfo(std::string text) { info->info(text); } + +void BaseMainWindow::createMenusAndBars() +{ + QAction *actionOpen = new QAction("Open", this); + QIcon icon1; + icon1.addFile(QStringLiteral(":/icons/resources/open.png")); + actionOpen->setIcon(icon1); + actionOpen->setShortcuts(QKeySequence::Open); + actionOpen->setStatusTip("Open an existing JSON file"); + connect(actionOpen, SIGNAL(triggered()), this, SLOT(open())); + + QAction *actionSave = new QAction("Save", this); + QIcon icon2; + icon2.addFile(QStringLiteral(":/icons/resources/save.png")); + actionSave->setIcon(icon2); + actionSave->setShortcuts(QKeySequence::Save); + actionSave->setStatusTip("Save the ASC to disk"); + connect(actionSave, SIGNAL(triggered()), this, SLOT(save())); + actionSave->setEnabled(false); + + QAction *actionExit = new QAction("Exit", this); + QIcon icon3; + icon3.addFile(QStringLiteral(":/icons/resources/exit.png")); + actionExit->setIcon(icon3); + actionExit->setShortcuts(QKeySequence::Quit); + actionExit->setStatusTip("Exit the application"); + connect(actionExit, SIGNAL(triggered()), this, SLOT(close())); + + QAction *actionAbout = new QAction("About", this); + + menuBar = new QMenuBar(); + menuBar->setGeometry(QRect(0, 0, 1024, 27)); + QMenu *menu_File = new QMenu("&File", menuBar); + QMenu *menu_Help = new QMenu("&Help", menuBar); + menuBar->addAction(menu_File->menuAction()); + menuBar->addAction(menu_Help->menuAction()); + setMenuBar(menuBar); + + mainToolBar = new QToolBar(); + addToolBar(Qt::TopToolBarArea, mainToolBar); + + statusBar = new QStatusBar(); + setStatusBar(statusBar); + + menu_File->addAction(actionOpen); + menu_File->addAction(actionSave); + menu_File->addSeparator(); + menu_File->addAction(actionExit); + menu_Help->addAction(actionAbout); + + mainToolBar->addAction(actionOpen); + mainToolBar->addAction(actionSave); +} + +void BaseMainWindow::open() +{ + QString fileName = QFileDialog::getOpenFileName(this, QString(), QString(), + QString("*.json")); + if (!fileName.isEmpty()) { + tabWidget->setCurrentWidget(info); + + std::string fn = fileName.toStdString(); + std::istream *f = new std::ifstream(fn); + + parse_json_file(f, fn, ctx); + + // pack_design(ctx); + print_utilisation(ctx); + } +} + +bool BaseMainWindow::save() { return false; } -- cgit v1.2.3 From 23fe31da44a2e2596335c09ae983217ffbc8f6b1 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Thu, 21 Jun 2018 13:55:36 +0200 Subject: cleanup --- gui/basewindow.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gui/basewindow.cc') diff --git a/gui/basewindow.cc b/gui/basewindow.cc index cbf0faae..fa9528fc 100644 --- a/gui/basewindow.cc +++ b/gui/basewindow.cc @@ -1,4 +1,3 @@ -#include "mainwindow.h" #include #include #include @@ -9,6 +8,7 @@ #include "fpgaviewwidget.h" #include "jsonparse.h" #include "log.h" +#include "mainwindow.h" #include "pythontab.h" //#include "pack.h" //#include "pcf.h" -- cgit v1.2.3 From 2d405f966b4e69b95cd4ea9acbb5438e1fa91e69 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Thu, 21 Jun 2018 14:12:02 +0200 Subject: Add graphics view in tab --- gui/basewindow.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'gui/basewindow.cc') diff --git a/gui/basewindow.cc b/gui/basewindow.cc index fa9528fc..25603322 100644 --- a/gui/basewindow.cc +++ b/gui/basewindow.cc @@ -57,7 +57,11 @@ BaseMainWindow::BaseMainWindow(Context *_ctx, QWidget *parent) tabWidget->addTab(new PythonTab(), "Python"); info = new InfoTab(); tabWidget->addTab(info, "Info"); - splitter_v->addWidget(new FPGAViewWidget()); + + centralTabWidget = new QTabWidget(); + centralTabWidget->addTab(new FPGAViewWidget(), "Graphics"); + + splitter_v->addWidget(centralTabWidget); splitter_v->addWidget(tabWidget); } -- cgit v1.2.3 From 097df1869d654b1214b925fe991aa09d2ef5b3cd Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Thu, 21 Jun 2018 15:41:40 +0200 Subject: Added task manager and worker thread for ice40 --- gui/basewindow.cc | 29 ++--------------------------- 1 file changed, 2 insertions(+), 27 deletions(-) (limited to 'gui/basewindow.cc') diff --git a/gui/basewindow.cc b/gui/basewindow.cc index 25603322..1e6b171f 100644 --- a/gui/basewindow.cc +++ b/gui/basewindow.cc @@ -3,28 +3,22 @@ #include #include #include -#include #include "designwidget.h" #include "fpgaviewwidget.h" #include "jsonparse.h" #include "log.h" #include "mainwindow.h" #include "pythontab.h" -//#include "pack.h" -//#include "pcf.h" -#include "place_sa.h" -#include "route.h" -//#include "bitstream.h" -#include "design_utils.h" + BaseMainWindow::BaseMainWindow(Context *_ctx, QWidget *parent) : QMainWindow(parent), ctx(_ctx) { Q_INIT_RESOURCE(nextpnr); + qRegisterMetaType(); log_files.clear(); log_streams.clear(); - log_write_function = [this](std::string text) { info->info(text); }; setObjectName(QStringLiteral("BaseMainWindow")); resize(1024, 768); @@ -121,22 +115,3 @@ void BaseMainWindow::createMenusAndBars() mainToolBar->addAction(actionOpen); mainToolBar->addAction(actionSave); } - -void BaseMainWindow::open() -{ - QString fileName = QFileDialog::getOpenFileName(this, QString(), QString(), - QString("*.json")); - if (!fileName.isEmpty()) { - tabWidget->setCurrentWidget(info); - - std::string fn = fileName.toStdString(); - std::istream *f = new std::ifstream(fn); - - parse_json_file(f, fn, ctx); - - // pack_design(ctx); - print_utilisation(ctx); - } -} - -bool BaseMainWindow::save() { return false; } -- cgit v1.2.3 From 54549d36e911aac8d0b0a2eea6074654c06c9717 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Thu, 21 Jun 2018 17:44:18 +0200 Subject: log_error now trows exception, main is covering catch --- gui/basewindow.cc | 1 - 1 file changed, 1 deletion(-) (limited to 'gui/basewindow.cc') diff --git a/gui/basewindow.cc b/gui/basewindow.cc index 1e6b171f..9020a719 100644 --- a/gui/basewindow.cc +++ b/gui/basewindow.cc @@ -10,7 +10,6 @@ #include "mainwindow.h" #include "pythontab.h" - BaseMainWindow::BaseMainWindow(Context *_ctx, QWidget *parent) : QMainWindow(parent), ctx(_ctx) { -- cgit v1.2.3 From 11d99853ab4514b1f6b87c5beb87c91f50e702a6 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Fri, 22 Jun 2018 12:49:20 +0200 Subject: more task control --- gui/basewindow.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gui/basewindow.cc') diff --git a/gui/basewindow.cc b/gui/basewindow.cc index 9020a719..b7258dd3 100644 --- a/gui/basewindow.cc +++ b/gui/basewindow.cc @@ -13,7 +13,7 @@ BaseMainWindow::BaseMainWindow(Context *_ctx, QWidget *parent) : QMainWindow(parent), ctx(_ctx) { - Q_INIT_RESOURCE(nextpnr); + Q_INIT_RESOURCE(base); qRegisterMetaType(); log_files.clear(); -- cgit v1.2.3 From 7f368282700172925428e45f23b8b61e0bf39f94 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Fri, 22 Jun 2018 13:10:27 +0200 Subject: fixed namespace for gui section --- gui/basewindow.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'gui/basewindow.cc') diff --git a/gui/basewindow.cc b/gui/basewindow.cc index b7258dd3..f16b205d 100644 --- a/gui/basewindow.cc +++ b/gui/basewindow.cc @@ -10,10 +10,14 @@ #include "mainwindow.h" #include "pythontab.h" +static void initBasenameResource() { Q_INIT_RESOURCE(base); } + +NEXTPNR_NAMESPACE_BEGIN + BaseMainWindow::BaseMainWindow(Context *_ctx, QWidget *parent) : QMainWindow(parent), ctx(_ctx) { - Q_INIT_RESOURCE(base); + initBasenameResource(); qRegisterMetaType(); log_files.clear(); @@ -114,3 +118,5 @@ void BaseMainWindow::createMenusAndBars() mainToolBar->addAction(actionOpen); mainToolBar->addAction(actionSave); } + +NEXTPNR_NAMESPACE_END -- cgit v1.2.3