diff options
| author | Felix Ernst <[email protected]> | 2024-06-13 16:38:41 +0200 |
|---|---|---|
| committer | Felix Ernst <[email protected]> | 2024-06-20 09:45:32 +0000 |
| commit | 9108534ce07fbdc5e8f037826049c37cf226d2e6 (patch) | |
| tree | a95995578c1691fa19a19bbcbc6659e4dc3a59b8 /src/statusbar/dolphinstatusbar.cpp | |
| parent | 15eff9f5ada404632eb014ca3c00337592851b47 (diff) | |
Prevent inconsistent status bar progress reporting states
Merge setting title and progress percent into one method. This
makes sure that the method can be called from all over the place
and will still always show a consistent state instead of partially
showing the progress percent for one progress but the label for
a different one.
This is to enable various tasks reporting progress at the same time
in a way that doesn't lead to a confusing mess for users. Usually
multiple tasks do not show progress at the same time, but when it
happens this commit should make sure that the user experience is
at least bearable.
Allow not having a "Stop" button next to the progress report for
tasks that cannot be stopped.
Diffstat (limited to 'src/statusbar/dolphinstatusbar.cpp')
| -rw-r--r-- | src/statusbar/dolphinstatusbar.cpp | 41 |
1 files changed, 23 insertions, 18 deletions
diff --git a/src/statusbar/dolphinstatusbar.cpp b/src/statusbar/dolphinstatusbar.cpp index 50f4cd3ea..5a3aa5857 100644 --- a/src/statusbar/dolphinstatusbar.cpp +++ b/src/statusbar/dolphinstatusbar.cpp @@ -164,37 +164,42 @@ QString DolphinStatusBar::text() const return m_text; } -void DolphinStatusBar::setProgressText(const QString &text) +void DolphinStatusBar::showProgress(const QString ¤tlyRunningTaskTitle, int progressPercent, CancelLoading cancelLoading) { - m_progressTextLabel->setText(text); -} + m_cancelLoading = cancelLoading; -QString DolphinStatusBar::progressText() const -{ - return m_progressTextLabel->text(); -} - -void DolphinStatusBar::setProgress(int percent) -{ // Show a busy indicator if a value < 0 is provided: - m_progressBar->setMaximum((percent < 0) ? 0 : 100); + m_progressBar->setMaximum((progressPercent < 0) ? 0 : 100); - percent = qBound(0, percent, 100); - const bool progressRestarted = (percent < 100) && (percent < m_progress); - m_progress = percent; - if (progressRestarted && !m_progressBar->isVisible()) { + progressPercent = qBound(0, progressPercent, 100); + if (!m_progressBar->isVisible()) { // Show the progress bar delayed: In the case if 100 % are reached within // a short time, no progress bar will be shown at all. - m_showProgressBarTimer->start(); + if (!m_showProgressBarTimer->isActive()) { + m_showProgressBarTimer->start(); + } else { + // The timer is already running. Should we restart it or keep it running? + if (m_progressTextLabel->text() != currentlyRunningTaskTitle || (progressPercent < 100 && progressPercent < m_progress)) { + m_showProgressBarTimer->start(); + } + } } + m_progress = progressPercent; m_progressBar->setValue(m_progress); - if (percent == 100) { + if (progressPercent == 100) { // The end of the progress has been reached. Assure that the progress bar // gets hidden and the extensions widgets get visible again. m_showProgressBarTimer->stop(); updateProgressInfo(); } + + m_progressTextLabel->setText(currentlyRunningTaskTitle); +} + +QString DolphinStatusBar::progressText() const +{ + return m_progressTextLabel->text(); } int DolphinStatusBar::progress() const @@ -302,7 +307,7 @@ void DolphinStatusBar::updateProgressInfo() { if (m_progress < 100) { // Show the progress information and hide the extensions - m_stopButton->show(); + m_stopButton->setVisible(m_cancelLoading == CancelLoading::Allowed); m_progressTextLabel->show(); m_progressBar->show(); setExtensionsVisible(false); |
