From 8e12ae2cfed728ee1ecab4e5f60f0435bf2d58b8 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Sun, 15 Jul 2018 20:31:42 +0200 Subject: [PATCH] Added splash screen info while loading --- gui/base.qrc | 1 + gui/basewindow.cc | 30 ++++++++++++++++++++++++------ gui/basewindow.h | 6 ++++++ gui/designwidget.cc | 5 +++++ gui/designwidget.h | 2 ++ gui/ice40/mainwindow.cc | 1 + gui/resources/splash.png | Bin 0 -> 4651 bytes 7 files changed, 39 insertions(+), 6 deletions(-) create mode 100644 gui/resources/splash.png diff --git a/gui/base.qrc b/gui/base.qrc index 8f07aabe..bf21986b 100644 --- a/gui/base.qrc +++ b/gui/base.qrc @@ -9,5 +9,6 @@ resources/resultset_previous.png resources/resultset_next.png resources/resultset_last.png + resources/splash.png diff --git a/gui/basewindow.cc b/gui/basewindow.cc index 22e47295..07b71105 100644 --- a/gui/basewindow.cc +++ b/gui/basewindow.cc @@ -18,6 +18,7 @@ */ #include +#include #include #include #include @@ -61,15 +62,10 @@ BaseMainWindow::BaseMainWindow(std::unique_ptr context, QWidget *parent setCentralWidget(centralWidget); - DesignWidget *designview = new DesignWidget(); + designview = new DesignWidget(); designview->setMinimumWidth(300); splitter_h->addWidget(designview); - connect(this, SIGNAL(contextChanged(Context *)), designview, SLOT(newContext(Context *))); - connect(this, SIGNAL(updateTreeView()), designview, SLOT(updateTree())); - - connect(designview, SIGNAL(info(std::string)), this, SLOT(writeInfo(std::string))); - tabWidget = new QTabWidget(); console = new PythonTab(); @@ -87,12 +83,34 @@ BaseMainWindow::BaseMainWindow(std::unique_ptr context, QWidget *parent connect(designview, SIGNAL(highlight(std::vector, int)), fpgaView, SLOT(onHighlightGroupChanged(std::vector, int))); + connect(this, SIGNAL(contextChanged(Context *)), designview, SLOT(newContext(Context *))); + connect(this, SIGNAL(updateTreeView()), designview, SLOT(updateTree())); + + connect(designview, SIGNAL(info(std::string)), this, SLOT(writeInfo(std::string))); + splitter_v->addWidget(centralTabWidget); splitter_v->addWidget(tabWidget); + displaySplash(); } BaseMainWindow::~BaseMainWindow() {} +void BaseMainWindow::displaySplash() +{ + splash = new QSplashScreen(); + splash->setPixmap(QPixmap(":/icons/resources/splash.png")); + splash->show(); + connect(designview, SIGNAL(finishContextLoad()), splash, SLOT(close())); + connect(designview, SIGNAL(contextLoadStatus(std::string)), this, SLOT(displaySplashMessage(std::string))); + QCoreApplication::instance()->processEvents(); +} + +void BaseMainWindow::displaySplashMessage(std::string msg) +{ + splash->showMessage(msg.c_str(), Qt::AlignCenter | Qt::AlignBottom, Qt::white); + QCoreApplication::instance()->processEvents(); +} + void BaseMainWindow::writeInfo(std::string text) { console->info(text); } void BaseMainWindow::createMenusAndBars() diff --git a/gui/basewindow.h b/gui/basewindow.h index 4d3d80a1..18b5339e 100644 --- a/gui/basewindow.h +++ b/gui/basewindow.h @@ -26,6 +26,7 @@ #include #include #include +#include #include #include #include @@ -36,6 +37,7 @@ Q_DECLARE_METATYPE(NEXTPNR_NAMESPACE_PREFIX DecalXY) NEXTPNR_NAMESPACE_BEGIN class PythonTab; +class DesignWidget; class BaseMainWindow : public QMainWindow { @@ -48,9 +50,11 @@ class BaseMainWindow : public QMainWindow protected: void createMenusAndBars(); + void displaySplash(); protected Q_SLOTS: void writeInfo(std::string text); + void displaySplashMessage(std::string msg); virtual void new_proj() = 0; virtual void open_proj() = 0; @@ -72,6 +76,8 @@ class BaseMainWindow : public QMainWindow QAction *actionNew; QAction *actionOpen; QProgressBar *progressBar; + QSplashScreen *splash; + DesignWidget *designview; }; NEXTPNR_NAMESPACE_END diff --git a/gui/designwidget.cc b/gui/designwidget.cc index 1f039c60..8b9e9d22 100644 --- a/gui/designwidget.cc +++ b/gui/designwidget.cc @@ -230,6 +230,7 @@ void DesignWidget::newContext(Context *ctx) bel_root->setText(0, "Bels"); treeWidget->insertTopLevelItem(0, bel_root); if (ctx) { + Q_EMIT contextLoadStatus("Configuring bels..."); for (auto bel : ctx->getBels()) { auto id = ctx->getBelName(bel); QStringList items = QString(id.c_str(ctx)).split("/"); @@ -262,6 +263,7 @@ void DesignWidget::newContext(Context *ctx) wire_root->setText(0, "Wires"); treeWidget->insertTopLevelItem(0, wire_root); if (ctx) { + Q_EMIT contextLoadStatus("Configuring wires..."); for (auto wire : ctx->getWires()) { auto id = ctx->getWireName(wire); QStringList items = QString(id.c_str(ctx)).split("/"); @@ -293,6 +295,7 @@ void DesignWidget::newContext(Context *ctx) pip_root->setText(0, "Pips"); treeWidget->insertTopLevelItem(0, pip_root); if (ctx) { + Q_EMIT contextLoadStatus("Configuring pips..."); for (auto pip : ctx->getPips()) { auto id = ctx->getPipName(pip); QStringList items = QString(id.c_str(ctx)).split("/"); @@ -328,6 +331,8 @@ void DesignWidget::newContext(Context *ctx) cells_root = new QTreeWidgetItem(treeWidget); cells_root->setText(0, "Cells"); treeWidget->insertTopLevelItem(0, cells_root); + + Q_EMIT finishContextLoad(); } void DesignWidget::updateTree() diff --git a/gui/designwidget.h b/gui/designwidget.h index 269e32fa..1afe817d 100644 --- a/gui/designwidget.h +++ b/gui/designwidget.h @@ -65,6 +65,8 @@ class DesignWidget : public QWidget void info(std::string text); void selected(std::vector decal); void highlight(std::vector decal, int group); + void finishContextLoad(); + void contextLoadStatus(std::string text); private Q_SLOTS: void prepareMenuProperty(const QPoint &pos); diff --git a/gui/ice40/mainwindow.cc b/gui/ice40/mainwindow.cc index 28792ed3..4b1f2c57 100644 --- a/gui/ice40/mainwindow.cc +++ b/gui/ice40/mainwindow.cc @@ -226,6 +226,7 @@ void MainWindow::new_proj() ctx = std::unique_ptr(new Context(chipArgs)); actionLoadJSON->setEnabled(true); + Q_EMIT displaySplash(); Q_EMIT contextChanged(ctx.get()); } } diff --git a/gui/resources/splash.png b/gui/resources/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..14d2842b95f853cf0947a5edb2fd398625d3c552 GIT binary patch literal 4651 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 literal 0 HcmV?d00001