┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/statusbar/dolphinstatusbar.cpp
diff options
context:
space:
mode:
authorFelix Ernst <[email protected]>2024-06-13 16:38:41 +0200
committerFelix Ernst <[email protected]>2024-06-20 09:45:32 +0000
commit9108534ce07fbdc5e8f037826049c37cf226d2e6 (patch)
treea95995578c1691fa19a19bbcbc6659e4dc3a59b8 /src/statusbar/dolphinstatusbar.cpp
parent15eff9f5ada404632eb014ca3c00337592851b47 (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.cpp41
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 &currentlyRunningTaskTitle, 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);