From 749b1647e40937cdf9f6af2993d2f32b92888808 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Tue, 28 Apr 2015 20:26:31 +0200 Subject: [PATCH] ui: added loader animation gif to StatusBar The loader animation can be activated by setting the showLoader flag on MessageStatus. --- bin/app/data/gui/statusbar_view/loader.gif | Bin 0 -> 4582 bytes src/app/qt/element/QtStatusBar.cpp | 25 +++++++++++++++++- src/app/qt/element/QtStatusBar.h | 8 +++--- src/app/qt/view/QtStatusBarView.cpp | 12 ++++----- src/app/qt/view/QtStatusBarView.h | 7 ++--- .../controller/StatusBarController.cpp | 6 ++--- .../controller/StatusBarController.h | 2 +- src/lib/component/view/StatusBarView.h | 3 ++- src/lib/data/parser/cxx/TaskParseCxx.cpp | 2 +- .../utility/messaging/type/MessageStatus.h | 4 ++- 10 files changed, 49 insertions(+), 20 deletions(-) create mode 100644 bin/app/data/gui/statusbar_view/loader.gif 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 0000000000000000000000000000000000000000..5d7e4691562d365d5944ceef45d58674bcb2dc69 GIT binary patch literal 4582 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 xhp3Bn942+v-Vtsn?@X7pkg?Ca?JU4H)V{{Xj? + 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