diff --git a/gui/gui.cmake b/gui/gui.cmake index fb7f2db4..961d498a 100644 --- a/gui/gui.cmake +++ b/gui/gui.cmake @@ -21,10 +21,6 @@ set(GENERATED_MOC_FILES ${CMAKE_CURRENT_BINARY_DIR}/generated/moc_designwidget.cc ) -set(UI_SOURCES - gui/mainwindow.ui -) -qt5_wrap_ui_custom(GENERATED_UI_HEADERS ${UI_SOURCES}) qt5_add_resources_custom(GUI_RESOURCE_FILES gui/nextpnr.qrc) aux_source_directory(gui/ GUI_ALL_SOURCE_FILES) diff --git a/gui/mainwindow.cc b/gui/mainwindow.cc index bd38cc40..76addbba 100644 --- a/gui/mainwindow.cc +++ b/gui/mainwindow.cc @@ -1,34 +1,115 @@ #include "mainwindow.h" +#include +#include +#include +#include +#include +#include +#include +#include #include "designwidget.h" #include "fpgaviewwidget.h" #include "pythontab.h" -#include "ui_mainwindow.h" MainWindow::MainWindow(Design *_design, QWidget *parent) - : QMainWindow(parent), ui(new Ui::MainWindow), design(_design) + : QMainWindow(parent), design(_design) { - ui->setupUi(this); std::string title = "nextpnr-ice40 - " + design->chip.getChipName(); setWindowTitle(title.c_str()); + setObjectName(QStringLiteral("MainWindow")); + resize(1024, 768); - ui->splitter->addWidget(new FPGAViewWidget()); + 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(design); designview->setMinimumWidth(300); designview->setMaximumWidth(300); + splitter_h->addWidget(designview); connect(designview, SIGNAL(info(std::string)), this, SLOT(writeInfo(std::string))); - ui->splitter_2->addWidget(designview); - - tabWidget = new QTabWidget(); + QTabWidget *tabWidget = new QTabWidget(); tabWidget->addTab(new PythonTab(), "Python"); info = new InfoTab(); tabWidget->addTab(info, "Info"); - ui->splitter->addWidget(tabWidget); + splitter_v->addWidget(new FPGAViewWidget()); + splitter_v->addWidget(tabWidget); } -MainWindow::~MainWindow() { delete ui; } +MainWindow::~MainWindow() {} 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); + + 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); + + QAction *actionExit = new QAction("Exit", this); + + QIcon icon3; + icon3.addFile(QStringLiteral(":/icons/resources/exit.png")); + actionExit->setIcon(icon3); + + QAction *actionAbout = new QAction("About", this); + + QMenuBar *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); + + QToolBar *mainToolBar = new QToolBar(); + addToolBar(Qt::TopToolBarArea, mainToolBar); + + 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())); +} diff --git a/gui/mainwindow.h b/gui/mainwindow.h index 40bb98ef..6516a986 100644 --- a/gui/mainwindow.h +++ b/gui/mainwindow.h @@ -10,10 +10,6 @@ // FIXME USING_NEXTPNR_NAMESPACE -namespace Ui { -class MainWindow; -} - class MainWindow : public QMainWindow { Q_OBJECT @@ -23,14 +19,14 @@ class MainWindow : public QMainWindow ~MainWindow(); Design *getDesign() { return design; } + private: + void createMenusAndBars(); + private Q_SLOTS: void writeInfo(std::string text); private: - Ui::MainWindow *ui; Design *design; - - QTabWidget *tabWidget; InfoTab *info; }; diff --git a/gui/mainwindow.ui b/gui/mainwindow.ui deleted file mode 100644 index 7260c7ea..00000000 --- a/gui/mainwindow.ui +++ /dev/null @@ -1,153 +0,0 @@ - - - MainWindow - - - - 0 - 0 - 969 - 629 - - - - nextpnr - - - - - - - Qt::Horizontal - - - - Qt::Vertical - - - - - Qt::Vertical - - - - - - - - - - 0 - 0 - 969 - 27 - - - - - &File - - - - - - - - - - - - &Help - - - - - - - - - TopToolBarArea - - - false - - - - - - - - - - :/icons/resources/new.png:/icons/resources/new.png - - - New - - - - - - :/icons/resources/open.png:/icons/resources/open.png - - - Open - - - - - - :/icons/resources/save.png:/icons/resources/save.png - - - Save - - - - - Save as ... - - - - - Close - - - - - - :/icons/resources/exit.png:/icons/resources/exit.png - - - Exit - - - - - About - - - - - - - - - - actionExit - triggered() - MainWindow - close() - - - -1 - -1 - - - 484 - 314 - - - - -