]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Use a progress bar with custom text for showing the free disk space, otherwise the...
authorPeter Penz <peter.penz19@gmail.com>
Mon, 15 Oct 2007 15:59:57 +0000 (15:59 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Mon, 15 Oct 2007 15:59:57 +0000 (15:59 +0000)
svn path=/trunk/KDE/kdebase/apps/; revision=725516

src/statusbarspaceinfo.cpp
src/statusbarspaceinfo.h

index 84436813608728d4af814adc631e949c338aab02..9bc091b7a03ba80cf33028ed8a8e821634c76e36 100644 (file)
 
 #include "statusbarspaceinfo.h"
 
-#include <kcolorscheme.h>
 #include <kdiskfreespace.h>
 #include <kmountpoint.h>
 #include <klocale.h>
 #include <kio/job.h>
 
 #include <QTimer>
-#include <QPainter>
 #include <QKeyEvent>
 
 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<int>((m_kBAvailable *
-                        static_cast<float>(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"
index e90c8f43b37cd6df6891b665d98649154908c764..02e36698b640b4f26eb370eef2b4fcd6d0265d0b 100644 (file)
 
 #include <kurl.h>
 
-#include <QtGui/QColor>
-#include <QtGui/QKeyEvent>
-#include <QtGui/QWidget>
+#include <QColor>
+#include <QKeyEvent>
+#include <QProgressBar>
+#include <QString>
 
 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