diff --git a/bin/app/data/gui/statusbar_view/loader.gif b/bin/app/data/gui/statusbar_view/loader.gif new file mode 100644 index 00000000..5d7e4691 Binary files /dev/null and b/bin/app/data/gui/statusbar_view/loader.gif differ diff --git a/src/app/qt/element/QtStatusBar.cpp b/src/app/qt/element/QtStatusBar.cpp index 086a3b07..48067d93 100644 --- a/src/app/qt/element/QtStatusBar.cpp +++ b/src/app/qt/element/QtStatusBar.cpp @@ -1,8 +1,22 @@ #include "qt/element/QtStatusBar.h" +#include + QtStatusBar::QtStatusBar() : m_text(this) { + QMovie* movie = new QMovie("data/gui/statusbar_view/loader.gif"); + // if movie doesn't loop forever, force it to. + if (movie->loopCount() != -1) + { + connect(movie, SIGNAL(finished()), movie, SLOT(start())); + } + movie->start(); + + m_loader.setMovie(movie); + m_loader.hide(); + addWidget(&m_loader); + m_text.setText(""); addWidget(&m_text); } @@ -11,7 +25,7 @@ QtStatusBar::~QtStatusBar() { } -void QtStatusBar::setText(const std::string& text, bool isError) +void QtStatusBar::setText(const std::string& text, bool isError, bool showLoader) { if (isError) { @@ -22,5 +36,14 @@ void QtStatusBar::setText(const std::string& text, bool isError) m_text.setStyleSheet(""); } + if (showLoader) + { + m_loader.show(); + } + else + { + m_loader.hide(); + } + m_text.setText(text.c_str()); } diff --git a/src/app/qt/element/QtStatusBar.h b/src/app/qt/element/QtStatusBar.h index 8b4bfb0e..b8d81240 100644 --- a/src/app/qt/element/QtStatusBar.h +++ b/src/app/qt/element/QtStatusBar.h @@ -3,18 +3,20 @@ #include #include -#include #include -class QtStatusBar : public QStatusBar +class QtStatusBar + : public QStatusBar { public: QtStatusBar(void); ~QtStatusBar(void); - void setText(const std::string& text, bool isError = false); + void setText(const std::string& text, bool isError, bool showLoader); + private: QLabel m_text; + QLabel m_loader; }; #endif // QT_STATUS_BAR_H diff --git a/src/app/qt/view/QtStatusBarView.cpp b/src/app/qt/view/QtStatusBarView.cpp index e821de94..38ca7585 100644 --- a/src/app/qt/view/QtStatusBarView.cpp +++ b/src/app/qt/view/QtStatusBarView.cpp @@ -6,7 +6,8 @@ QtStatusBarView::QtStatusBarView(ViewLayout* viewLayout) : StatusBarView(viewLayout) - , m_showMessageFunctor(std::bind(&QtStatusBarView::doShowMessage, this, std::placeholders::_1, std::placeholders::_2)) + , m_showMessageFunctor(std::bind( + &QtStatusBarView::doShowMessage, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3)) { QtMainView* mw = static_cast(viewLayout); m_widget = std::make_shared(); @@ -21,7 +22,6 @@ QtStatusBarView::~QtStatusBarView() void QtStatusBarView::createWidgetWrapper() { - //setWidgetWrapper(std::make_shared(m_widget)); } void QtStatusBarView::initView() @@ -32,12 +32,12 @@ void QtStatusBarView::refreshView() { } -void QtStatusBarView::doShowMessage(const std::string& message, bool isError) +void QtStatusBarView::doShowMessage(const std::string& message, bool isError, bool showLoader) { - m_widget->setText(message, isError); + m_widget->setText(message, isError, showLoader); } -void QtStatusBarView::showMessage(const std::string& message, bool isError) +void QtStatusBarView::showMessage(const std::string& message, bool isError, bool showLoader) { - m_showMessageFunctor(message, isError); + m_showMessageFunctor(message, isError, showLoader); } diff --git a/src/app/qt/view/QtStatusBarView.h b/src/app/qt/view/QtStatusBarView.h index 6f2694fc..b5b1bf66 100644 --- a/src/app/qt/view/QtStatusBarView.h +++ b/src/app/qt/view/QtStatusBarView.h @@ -20,12 +20,13 @@ public: virtual void refreshView(); // StatusBar view implementation - virtual void showMessage(const std::string& message, bool isError); + virtual void showMessage(const std::string& message, bool isError, bool showLoader); + private: - void doShowMessage(const std::string& message, bool isError); + void doShowMessage(const std::string& message, bool isError, bool showLoader); std::shared_ptr m_widget; - QtThreadedFunctor m_showMessageFunctor; + QtThreadedFunctor m_showMessageFunctor; }; #endif // !QT_STATUS_BAR_VIEW_H diff --git a/src/lib/component/controller/StatusBarController.cpp b/src/lib/component/controller/StatusBarController.cpp index 0443c204..9bbb7ea2 100644 --- a/src/lib/component/controller/StatusBarController.cpp +++ b/src/lib/component/controller/StatusBarController.cpp @@ -19,15 +19,15 @@ StatusBarView* StatusBarController::getView() void StatusBarController::handleMessage(MessageStatus* message) { - setStatus(message->status, message->isError); + setStatus(message->status, message->isError, message->showLoader); } -void StatusBarController::setStatus(const std::string& status, bool isError) +void StatusBarController::setStatus(const std::string& status, bool isError, bool showLoader) { if (!status.empty()) { LOG_INFO_STREAM(<< "STATUS " << status); - getView()->showMessage(status, isError); + getView()->showMessage(status, isError, showLoader); } } diff --git a/src/lib/component/controller/StatusBarController.h b/src/lib/component/controller/StatusBarController.h index 9c6ee187..d0ea8b06 100644 --- a/src/lib/component/controller/StatusBarController.h +++ b/src/lib/component/controller/StatusBarController.h @@ -23,7 +23,7 @@ public: private: virtual void handleMessage(MessageStatus* message); - void setStatus(const std::string& status, bool isError); + void setStatus(const std::string& status, bool isError, bool showLoader); }; #endif // STATUS_BAR_CONTROLLER_H diff --git a/src/lib/component/view/StatusBarView.h b/src/lib/component/view/StatusBarView.h index cdf92442..5424f374 100644 --- a/src/lib/component/view/StatusBarView.h +++ b/src/lib/component/view/StatusBarView.h @@ -12,7 +12,8 @@ public: ~StatusBarView(void); virtual std::string getName() const; - virtual void showMessage(const std::string& message, bool isError) = 0; + virtual void showMessage(const std::string& message, bool isError, bool showLoader) = 0; + protected: StatusBarController* getController(); }; diff --git a/src/lib/data/parser/cxx/TaskParseCxx.cpp b/src/lib/data/parser/cxx/TaskParseCxx.cpp index 7bcde31c..2aad74ea 100644 --- a/src/lib/data/parser/cxx/TaskParseCxx.cpp +++ b/src/lib/data/parser/cxx/TaskParseCxx.cpp @@ -64,7 +64,7 @@ Task::TaskState TaskParseCxx::update() ss << fileRegister->getParsedFilesCount() << "/" << fileRegister->getFilesCount() << "] "; ss << sourcePath; - MessageStatus(ss.str()).dispatch(); + MessageStatus(ss.str(), false, true).dispatch(); m_parser.runTool(std::vector(1, sourcePath)); diff --git a/src/lib/utility/messaging/type/MessageStatus.h b/src/lib/utility/messaging/type/MessageStatus.h index 189f4b3d..7a04539d 100644 --- a/src/lib/utility/messaging/type/MessageStatus.h +++ b/src/lib/utility/messaging/type/MessageStatus.h @@ -7,9 +7,10 @@ class MessageStatus : public Message { public: - MessageStatus(const std::string& status, bool isError = false) + MessageStatus(const std::string& status, bool isError = false, bool showLoader = false) : status(status) , isError(isError) + , showLoader(showLoader) { setSendAsTask(false); } @@ -21,6 +22,7 @@ public: const std::string status; const bool isError; + const bool showLoader; }; #endif // MESSAGE_STATUS_H