From 9bb489936078980e98fc873845b2ca64ddb490fb Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Wed, 27 Jun 2018 11:12:05 +0200 Subject: disable new and open while tasks are running --- gui/basewindow.cc | 4 ++-- gui/basewindow.h | 2 ++ gui/ice40/mainwindow.cc | 9 +++++++++ 3 files changed, 13 insertions(+), 2 deletions(-) (limited to 'gui') diff --git a/gui/basewindow.cc b/gui/basewindow.cc index dd456e07..69f4f622 100644 --- a/gui/basewindow.cc +++ b/gui/basewindow.cc @@ -95,7 +95,7 @@ void BaseMainWindow::writeInfo(std::string text) { info->info(text); } void BaseMainWindow::createMenusAndBars() { - QAction *actionNew = new QAction("New", this); + actionNew = new QAction("New", this); QIcon iconNew; iconNew.addFile(QStringLiteral(":/icons/resources/new.png")); actionNew->setIcon(iconNew); @@ -103,7 +103,7 @@ void BaseMainWindow::createMenusAndBars() actionNew->setStatusTip("New project file"); connect(actionNew, SIGNAL(triggered()), this, SLOT(new_proj())); - QAction *actionOpen = new QAction("Open", this); + actionOpen = new QAction("Open", this); QIcon iconOpen; iconOpen.addFile(QStringLiteral(":/icons/resources/open.png")); actionOpen->setIcon(iconOpen); diff --git a/gui/basewindow.h b/gui/basewindow.h index 601f6acb..6180e795 100644 --- a/gui/basewindow.h +++ b/gui/basewindow.h @@ -65,6 +65,8 @@ class BaseMainWindow : public QMainWindow QMenuBar *menuBar; QToolBar *mainToolBar; QStatusBar *statusBar; + QAction *actionNew; + QAction *actionOpen; }; NEXTPNR_NAMESPACE_END diff --git a/gui/ice40/mainwindow.cc b/gui/ice40/mainwindow.cc index 32074adc..2563a767 100644 --- a/gui/ice40/mainwindow.cc +++ b/gui/ice40/mainwindow.cc @@ -260,6 +260,9 @@ void MainWindow::disableActions() actionPlay->setEnabled(false); actionPause->setEnabled(false); actionStop->setEnabled(false); + + actionNew->setEnabled(true); + actionOpen->setEnabled(true); } void MainWindow::loadfile_finished(bool status) @@ -349,6 +352,9 @@ void MainWindow::taskStarted() disableActions(); actionPause->setEnabled(true); actionStop->setEnabled(true); + + actionNew->setEnabled(false); + actionOpen->setEnabled(false); } void MainWindow::taskPaused() @@ -356,6 +362,9 @@ void MainWindow::taskPaused() disableActions(); actionPlay->setEnabled(true); actionStop->setEnabled(true); + + actionNew->setEnabled(false); + actionOpen->setEnabled(false); } void MainWindow::budget() -- cgit v1.2.3 From bafb4702c7176a08e4a9b2088297071a7bed6656 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Wed, 27 Jun 2018 11:45:19 +0200 Subject: reinit python tab --- gui/basewindow.cc | 4 +++- gui/pythontab.cc | 33 +++++++++++++++++++++++++++------ gui/pythontab.h | 5 ++++- 3 files changed, 34 insertions(+), 8 deletions(-) (limited to 'gui') diff --git a/gui/basewindow.cc b/gui/basewindow.cc index 69f4f622..2e8d7c85 100644 --- a/gui/basewindow.cc +++ b/gui/basewindow.cc @@ -74,7 +74,9 @@ BaseMainWindow::BaseMainWindow(QWidget *parent) : QMainWindow(parent), ctx(nullp tabWidget = new QTabWidget(); #ifndef NO_PYTHON - tabWidget->addTab(new PythonTab(), "Python"); + PythonTab *pythontab = new PythonTab(); + tabWidget->addTab(pythontab, "Python"); + connect(this, SIGNAL(contextChanged(Context*)), pythontab, SLOT(newContext(Context*))); #endif info = new InfoTab(); tabWidget->addTab(info, "Info"); diff --git a/gui/pythontab.cc b/gui/pythontab.cc index 397920d9..816039ba 100644 --- a/gui/pythontab.cc +++ b/gui/pythontab.cc @@ -25,10 +25,8 @@ NEXTPNR_NAMESPACE_BEGIN -PythonTab::PythonTab(QWidget *parent) : QWidget(parent) +PythonTab::PythonTab(QWidget *parent) : QWidget(parent),initialized(false) { - PyImport_ImportModule("emb"); - // Add text area for Python output and input line plainTextEdit = new QPlainTextEdit(); plainTextEdit->setReadOnly(true); @@ -57,7 +55,25 @@ PythonTab::PythonTab(QWidget *parent) : QWidget(parent) setLayout(mainLayout); connect(lineEdit, SIGNAL(textLineInserted(QString)), this, SLOT(editLineReturnPressed(QString))); +} + +PythonTab::~PythonTab() +{ + if (initialized) + deinit_python(); +} +void PythonTab::newContext(Context *ctx) +{ + if (initialized) + deinit_python(); + + plainTextEdit->clear(); + + init_python("nextpnr", !initialized); + python_export_global("ctx", ctx); + + PyImport_ImportModule("emb"); write = [this](std::string s) { plainTextEdit->moveCursor(QTextCursor::End); plainTextEdit->insertPlainText(s.c_str()); @@ -65,6 +81,8 @@ PythonTab::PythonTab(QWidget *parent) : QWidget(parent) }; emb::set_stdout(write); + initialized = true; + char buff[1024]; sprintf(buff, "Python %s on %s\n", Py_GetVersion(), Py_GetPlatform()); print(buff); @@ -121,9 +139,12 @@ int PythonTab::executePython(std::string &command) void PythonTab::editLineReturnPressed(QString text) { - std::string input = text.toStdString(); - print(std::string(">>> " + input + "\n")); - executePython(input); + if (initialized) + { + std::string input = text.toStdString(); + print(std::string(">>> " + input + "\n")); + executePython(input); + } } void PythonTab::showContextMenu(const QPoint &pt) { contextMenu->exec(mapToGlobal(pt)); } diff --git a/gui/pythontab.h b/gui/pythontab.h index 40de0ebe..871d2450 100644 --- a/gui/pythontab.h +++ b/gui/pythontab.h @@ -37,6 +37,7 @@ class PythonTab : public QWidget public: explicit PythonTab(QWidget *parent = 0); + ~PythonTab(); private: void print(std::string line); @@ -45,12 +46,14 @@ class PythonTab : public QWidget void editLineReturnPressed(QString text); void showContextMenu(const QPoint &pt); void clearBuffer(); - + public Q_SLOTS: + void newContext(Context *ctx); private: QPlainTextEdit *plainTextEdit; LineEditor *lineEdit; QMenu *contextMenu; emb::stdout_write_type write; + bool initialized; }; NEXTPNR_NAMESPACE_END -- cgit v1.2.3