From a80b861cb50d4aa56f6f28f8924171f57477be27 Mon Sep 17 00:00:00 2001 From: Thilo Graf Date: Tue, 25 Oct 2016 08:53:23 +0200 Subject: [PATCH] CHintBox: move showTimeOutBar() to protected, add params to enableTimeOutBar() Explicit call of disableTimeOutBar() after exec() is required to ensure we have no timebar opened objects. I'm not shure, but otherwise crashs could be possible. showTimeOutBar() is required for OnTimer(). It doesn't need any parameter. --- src/gui/widget/hintbox.cpp | 24 +++++++++++++++--------- src/gui/widget/hintbox.h | 13 +++++++++++-- src/gui/widget/msgbox.cpp | 2 +- 3 files changed, 27 insertions(+), 12 deletions(-) diff --git a/src/gui/widget/hintbox.cpp b/src/gui/widget/hintbox.cpp index d5f80d796..0a0217fca 100644 --- a/src/gui/widget/hintbox.cpp +++ b/src/gui/widget/hintbox.cpp @@ -168,17 +168,21 @@ void CHintBox::init(const std::string& Text, const int& Width, const std::string CHintBox::~CHintBox() { - if(timeout_pb){ - timeout_pb->kill(); //ensure cleanup from screen - delete timeout_pb; timeout_pb = NULL; - } - if(timeout_pb_timer){ - delete timeout_pb_timer; timeout_pb_timer = NULL; - } + disableTimeOutBar(); } -void CHintBox::showTimeOutBar() +void CHintBox::enableTimeOutBar(bool enable) { + if(!enable){ + if(timeout_pb_timer){ + delete timeout_pb_timer; timeout_pb_timer = NULL; + } + if(timeout_pb){ + delete timeout_pb; timeout_pb = NULL; + } + return; + } + if(timeout_pb){ timeout_pb->paint0(); timeout_pb->setValues(timeout_pb->getValue()+1, 100*timeout); @@ -201,7 +205,7 @@ int CHintBox::exec() uint64_t timeoutEnd = CRCInput::calcTimeoutEnd( timeout ); if (timeout > 0) - showTimeOutBar(); + enableTimeOutBar(); while ( ! ( res & ( messages_return::cancel_info | messages_return::cancel_all ) ) ) { @@ -244,6 +248,8 @@ int CHintBox::exec() } } } + + disableTimeOutBar(); return res; } diff --git a/src/gui/widget/hintbox.h b/src/gui/widget/hintbox.h index e7a066161..3f5a35724 100644 --- a/src/gui/widget/hintbox.h +++ b/src/gui/widget/hintbox.h @@ -84,6 +84,7 @@ class CHintBox : public CComponentsWindow const int& indent); virtual void ReSize(); + void showTimeOutBar(){enableTimeOutBar();} public: /**CHintBox Constructor @@ -186,9 +187,17 @@ class CHintBox : public CComponentsWindow virtual void setTimeOut(const int& Timeout){timeout = Timeout;} /** - * enable visualized timeout as progressbar under titelbar + * enable/disable visualized timeout as progressbar under titlebar + * @param[in] enable + * @li optional: exepts type bool, default = true */ - void showTimeOutBar(); + void enableTimeOutBar(bool enable = true); + + /** + * disable visualized timeout as progressbar + * @see enableTimeOutBar + */ + void disableTimeOutBar(){enableTimeOutBar(false);} /** * scroll handler for text objects: NOTE: exec() must be called ! diff --git a/src/gui/widget/msgbox.cpp b/src/gui/widget/msgbox.cpp index dfe855cad..0c08d924c 100644 --- a/src/gui/widget/msgbox.cpp +++ b/src/gui/widget/msgbox.cpp @@ -223,7 +223,7 @@ int CMsgBox::exec() uint64_t timeoutEnd = CRCInput::calcTimeoutEnd(timeout); if (timeout > 0) - showTimeOutBar(); + enableTimeOutBar(); bool loop = true; while (loop)