diff --git a/src/lay/lay/layProgressWidget.cc b/src/lay/lay/layProgressWidget.cc index 3c4cfe670..609f210e7 100644 --- a/src/lay/lay/layProgressWidget.cc +++ b/src/lay/lay/layProgressWidget.cc @@ -322,7 +322,11 @@ ProgressWidget::set_progress (tl::Progress *progress) double v = progress->value (); pb->set_value (v, value); - progress = progress->next (); + if (progress->final ()) { + progress = 0; + } else { + progress = progress->next (); + } } else { pb->hide (); diff --git a/src/tl/tl/tlProgress.cc b/src/tl/tl/tlProgress.cc index 88d7e4ee0..55fa86da6 100644 --- a/src/tl/tl/tlProgress.cc +++ b/src/tl/tl/tlProgress.cc @@ -131,7 +131,9 @@ ProgressGarbageCollector::~ProgressGarbageCollector () static tl::ThreadStorage s_thread_data; Progress::Progress (const std::string &desc, size_t yield_interval) - : m_desc (desc), m_title (desc), + : m_desc (desc), + m_final (false), + m_title (desc), m_interval_count (0), m_yield_interval (yield_interval), m_last_value (-1.0), diff --git a/src/tl/tl/tlProgress.h b/src/tl/tl/tlProgress.h index e0001cd28..97badef33 100644 --- a/src/tl/tl/tlProgress.h +++ b/src/tl/tl/tlProgress.h @@ -260,6 +260,25 @@ public: return m_desc; } + /** + * @brief Sets a value indicating whether the progress is a "final" one + * + * A final progress will prevent child progress objects from showing. It basically summarizes child operations. + * By default, a progress object is not final. + */ + void set_final (bool f) + { + m_final = f; + } + + /** + * @brief Gets a value indicating whether the progress is a "final" one + */ + bool final () const + { + return m_final; + } + /** * @brief Render the title string */ @@ -297,6 +316,7 @@ private: friend class ProgressGarbageCollector; std::string m_desc; + bool m_final; std::string m_title; size_t m_interval_count; size_t m_yield_interval;