diff options
-rw-r--r-- | common/log.cc | 3 | ||||
-rw-r--r-- | common/log.h | 4 | ||||
-rw-r--r-- | gui/infotab.cc | 3 | ||||
-rw-r--r-- | gui/mainwindow.cc | 60 | ||||
-rw-r--r-- | gui/mainwindow.h | 3 | ||||
-rw-r--r-- | gui/pythontab.cc | 5 |
6 files changed, 62 insertions, 16 deletions
diff --git a/common/log.cc b/common/log.cc index cbd3c171..2868e03f 100644 --- a/common/log.cc +++ b/common/log.cc @@ -33,6 +33,7 @@ NEXTPNR_NAMESPACE_BEGIN std::vector<FILE *> log_files; std::vector<std::ostream *> log_streams; FILE *log_errfile = NULL; +log_write_type log_write_function = nullptr; bool log_error_stderr = false; bool log_cmd_error_throw = false; @@ -99,6 +100,8 @@ void logv(const char *format, va_list ap) for (auto f : log_streams) *f << str; + if (log_write_function) + log_write_function(str); } void logv_info(const char *format, va_list ap) diff --git a/common/log.h b/common/log.h index 8afa94d4..597b5fac 100644 --- a/common/log.h +++ b/common/log.h @@ -20,6 +20,7 @@ #ifndef LOG_H #define LOG_H +#include <functional> #include <ostream> #include <set> #include <stdarg.h> @@ -36,6 +37,8 @@ NEXTPNR_NAMESPACE_BEGIN +typedef std::function<void(std::string)> log_write_type; + struct log_cmd_error_exception { }; @@ -43,6 +46,7 @@ struct log_cmd_error_exception extern std::vector<FILE *> log_files; extern std::vector<std::ostream *> log_streams; extern FILE *log_errfile; +extern log_write_type log_write_function; extern bool log_quiet_warnings; extern int log_verbose_level; diff --git a/gui/infotab.cc b/gui/infotab.cc index 0bf43b90..a5659569 100644 --- a/gui/infotab.cc +++ b/gui/infotab.cc @@ -5,6 +5,9 @@ InfoTab::InfoTab(QWidget *parent) : QWidget(parent) {
plainTextEdit = new QPlainTextEdit();
plainTextEdit->setReadOnly(true);
+ QFont f("unexistent");
+ f.setStyleHint(QFont::Monospace);
+ plainTextEdit->setFont(f);
QGridLayout *mainLayout = new QGridLayout();
mainLayout->addWidget(plainTextEdit);
diff --git a/gui/mainwindow.cc b/gui/mainwindow.cc index b9b86663..087c54ba 100644 --- a/gui/mainwindow.cc +++ b/gui/mainwindow.cc @@ -1,5 +1,6 @@ #include "mainwindow.h"
#include <QAction>
+#include <QFileDialog>
#include <QGridLayout>
#include <QIcon>
#include <QMenu>
@@ -7,13 +8,27 @@ #include <QSplitter>
#include <QStatusBar>
#include <QToolBar>
+#include <fstream>
#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 "pybindings.h"
+#include "route.h"
+//#include "bitstream.h"
+#include "design_utils.h"
MainWindow::MainWindow(Context *_ctx, QWidget *parent)
: QMainWindow(parent), ctx(_ctx)
{
+ log_files.clear();
+ log_streams.clear();
+ log_write_function = [this](std::string text) { info->info(text); };
+
std::string title = "nextpnr-ice40 - " + ctx->getChipName();
setWindowTitle(title.c_str());
setObjectName(QStringLiteral("MainWindow"));
@@ -43,7 +58,7 @@ MainWindow::MainWindow(Context *_ctx, QWidget *parent) connect(designview, SIGNAL(info(std::string)), this,
SLOT(writeInfo(std::string)));
- QTabWidget *tabWidget = new QTabWidget();
+ tabWidget = new QTabWidget();
tabWidget->addTab(new PythonTab(), "Python");
info = new InfoTab();
tabWidget->addTab(info, "Info");
@@ -57,30 +72,30 @@ void MainWindow::writeInfo(std::string text) { info->info(text); } void MainWindow::createMenusAndBars()
{
- QAction *actionNew = new QAction("New", this);
- QIcon icon;
- icon.addFile(QStringLiteral(":/icons/resources/new.png"));
- actionNew->setIcon(icon);
-
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);
-
- QAction *actionSave_as = new QAction("Save as ...", this);
-
- QAction *actionClose = new QAction("Close", this);
+ 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);
@@ -98,18 +113,31 @@ void MainWindow::createMenusAndBars() QStatusBar *statusBar = new QStatusBar();
setStatusBar(statusBar);
- menu_File->addAction(actionNew);
menu_File->addAction(actionOpen);
menu_File->addAction(actionSave);
- menu_File->addAction(actionSave_as);
- menu_File->addAction(actionClose);
menu_File->addSeparator();
menu_File->addAction(actionExit);
menu_Help->addAction(actionAbout);
- mainToolBar->addAction(actionNew);
mainToolBar->addAction(actionOpen);
mainToolBar->addAction(actionSave);
+}
- connect(actionExit, SIGNAL(triggered()), this, SLOT(close()));
+void MainWindow::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 MainWindow::save() { return false; }
diff --git a/gui/mainwindow.h b/gui/mainwindow.h index 149c4aa5..35d917d9 100644 --- a/gui/mainwindow.h +++ b/gui/mainwindow.h @@ -24,9 +24,12 @@ class MainWindow : public QMainWindow private Q_SLOTS:
void writeInfo(std::string text);
+ void open();
+ bool save();
private:
Context *ctx;
+ QTabWidget *tabWidget;
InfoTab *info;
};
diff --git a/gui/pythontab.cc b/gui/pythontab.cc index 1e827330..3764696e 100644 --- a/gui/pythontab.cc +++ b/gui/pythontab.cc @@ -11,9 +11,14 @@ PythonTab::PythonTab(QWidget *parent) : QWidget(parent) plainTextEdit = new QPlainTextEdit();
plainTextEdit->setReadOnly(true);
plainTextEdit->setMinimumHeight(100);
+ QFont f("unexistent");
+ f.setStyleHint(QFont::Monospace);
+ plainTextEdit->setFont(f);
+
lineEdit = new QLineEdit();
lineEdit->setMinimumHeight(30);
lineEdit->setMaximumHeight(30);
+ lineEdit->setFont(f);
QGridLayout *mainLayout = new QGridLayout();
mainLayout->addWidget(plainTextEdit, 0, 0);
|