From d059b705a9b50572537cb938b3f593de0d305f9a Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Mon, 15 Oct 2007 15:59:57 +0000 Subject: [PATCH] Use a progress bar with custom text for showing the free disk space, otherwise the custom widget just does not fit well into styles like Oxygen. svn path=/trunk/KDE/kdebase/apps/; revision=725516 --- src/statusbarspaceinfo.cpp | 116 +++++-------------------------------- src/statusbarspaceinfo.h | 37 +++++------- 2 files changed, 29 insertions(+), 124 deletions(-) diff --git a/src/statusbarspaceinfo.cpp b/src/statusbarspaceinfo.cpp index 844368136..9bc091b7a 100644 --- a/src/statusbarspaceinfo.cpp +++ b/src/statusbarspaceinfo.cpp @@ -20,27 +20,19 @@ #include "statusbarspaceinfo.h" -#include #include #include #include #include #include -#include #include StatusBarSpaceInfo::StatusBarSpaceInfo(QWidget* parent) : - QWidget(parent), - m_gettingSize(false), - m_kBSize(0), - m_kBAvailable(0) + QProgressBar(parent), + m_text() { - setMinimumWidth(200); - - QPalette palette; - palette.setColor(QPalette::Background, Qt::transparent); - setPalette(palette); + setMaximumWidth(200); // Update the space information each 10 seconds. Polling is useful // here, as files can be deleted/added outside the scope of Dolphin. @@ -60,57 +52,11 @@ void StatusBarSpaceInfo::setUrl(const KUrl& url) QTimer::singleShot(300, this, SLOT(update())); } -void StatusBarSpaceInfo::paintEvent(QPaintEvent* /* event */) +QString StatusBarSpaceInfo::text() const { - QPainter painter(this); - const int barWidth = width(); - const int barTop = 1; - const int barHeight = height() - 5; - - QString text; - - const int widthDec = 3; // visual decrement for the available width - - QColor frameColor = palette().brush(QPalette::Background).color(); - frameColor.setAlpha(128); - painter.setPen(frameColor); - - const QColor backgrColor = KColorScheme(QPalette::Active, KColorScheme::View).background().color(); - painter.setBrush(backgrColor); - - painter.drawRect(QRect(0, barTop + 1 , barWidth - widthDec, barHeight)); - - if ((m_kBSize > 0) && (m_kBAvailable > 0)) { - // draw 'used size' bar - painter.setPen(Qt::NoPen); - painter.setBrush(progressColor(backgrColor)); - int usedWidth = barWidth - static_cast((m_kBAvailable * - static_cast(barWidth)) / m_kBSize); - const int left = 1; - int right = usedWidth - widthDec; - if (right < left) { - right = left; - } - painter.drawRect(QRect(left, barTop + 2, right, barHeight - 1)); - - text = i18nc("@info:status", "%1 free", KIO::convertSizeFromKiB(m_kBAvailable)); - } else { - if (m_gettingSize) { - text = i18nc("@info:status", "Getting size..."); - } else { - text = QString(); - QMetaObject::invokeMethod(this, "hide", Qt::QueuedConnection); - } - } - - // draw text - painter.setPen(KColorScheme(QPalette::Active, KColorScheme::View).foreground().color()); - painter.drawText(QRect(1, 1, barWidth - 2, barHeight + 6), - Qt::AlignCenter | Qt::TextWordWrap, - text); + return m_text; } - void StatusBarSpaceInfo::slotFoundMountPoint(const QString& mountPoint, quint64 kBSize, quint64 kBUsed, @@ -119,33 +65,28 @@ void StatusBarSpaceInfo::slotFoundMountPoint(const QString& mountPoint, Q_UNUSED(kBUsed); Q_UNUSED(mountPoint); - m_gettingSize = false; - m_kBSize = kBSize; - m_kBAvailable = kBAvailable; + m_text = i18nc("@info:status", "%1 free", KIO::convertSizeFromKiB(kBAvailable)); - update(); -} - -void StatusBarSpaceInfo::showResult() -{ - m_gettingSize = false; - update(); + setMinimum(0); + setMaximum(kBAvailable); + setValue(kBUsed); } void StatusBarSpaceInfo::refresh() { - m_kBSize = 0; - m_kBAvailable = 0; - // KDiskFreeSpace is for local paths only if (!m_url.isLocalFile()) { return; } - m_gettingSize = true; + m_text = i18nc("@info:status", "Getting size..."); + setMinimum(0); + setMaximum(0); + KMountPoint::Ptr mp = KMountPoint::currentMountPoints().findByPath(m_url.path()); - if (!mp) + if (!mp) { return; + } KDiskFreeSpace* job = new KDiskFreeSpace(this); connect(job, SIGNAL(foundMountPoint(const QString&, @@ -156,35 +97,8 @@ void StatusBarSpaceInfo::refresh() quint64, quint64, quint64))); - connect(job, SIGNAL(done()), - this, SLOT(showResult())); job->readDF(mp->mountPoint()); } -QColor StatusBarSpaceInfo::progressColor(const QColor& bgColor) const -{ - QColor color = KColorScheme(QPalette::Active, KColorScheme::Button).background().color(); - - // assure that enough contrast is given between the background color - // and the progressbar color - int bgRed = bgColor.red(); - int bgGreen = bgColor.green(); - int bgBlue = bgColor.blue(); - - const int backgrBrightness = qGray(bgRed, bgGreen, bgBlue); - const int progressBrightness = qGray(color.red(), color.green(), color.blue()); - - const int limit = 32; - const int diff = backgrBrightness - progressBrightness; - bool adjustColor = ((diff >= 0) && (diff < limit)) || - ((diff < 0) && (diff > -limit)); - if (adjustColor) { - const int inc = (backgrBrightness < 2 * limit) ? (2 * limit) : -limit; - color = QColor(bgRed + inc, bgGreen + inc, bgBlue + inc); - } - - return color; -} - #include "statusbarspaceinfo.moc" diff --git a/src/statusbarspaceinfo.h b/src/statusbarspaceinfo.h index e90c8f43b..02e36698b 100644 --- a/src/statusbarspaceinfo.h +++ b/src/statusbarspaceinfo.h @@ -22,9 +22,10 @@ #include -#include -#include -#include +#include +#include +#include +#include class KDiskFreeSp; @@ -32,7 +33,7 @@ class KDiskFreeSp; * @short Shows the available space for the volume represented * by the given URL as part of the status bar. */ -class StatusBarSpaceInfo : public QWidget +class StatusBarSpaceInfo : public QProgressBar { Q_OBJECT @@ -41,38 +42,28 @@ public: virtual ~StatusBarSpaceInfo(); void setUrl(const KUrl& url); - const KUrl& url() const - { - return m_url; - } + const KUrl& url() const; -protected: - /** @see QWidget::paintEvent() */ - virtual void paintEvent(QPaintEvent* event); + /** @see QProgressBar::text() */ + virtual QString text() const; private slots: void slotFoundMountPoint(const QString& mountPoint, quint64 kBSize, quint64 kBUsed, quint64 kBAvailable); - void showResult(); /** Refreshes the space information for the current set URL. */ void refresh(); -private: - /** - * Returns a color for the progress bar by respecting - * the given background color \a bgColor. It is assured - * that enough contrast is given to have a visual indication. - */ - QColor progressColor(const QColor& bgColor) const; - private: KUrl m_url; - bool m_gettingSize; - quint64 m_kBSize; - quint64 m_kBAvailable; + QString m_text; }; +inline const KUrl& StatusBarSpaceInfo::url() const +{ + return m_url; +} + #endif -- 2.47.3