]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/statusbarspaceinfo.cpp
The feature freeze is near: Add video support to the Information Panel. Phonon is...
[dolphin.git] / src / statusbarspaceinfo.cpp
index 794d140787129469a7495b087e818e1757ab4c73..c9173b8f9ef2feee26d18ca34c8ed2dbda5cbe7b 100644 (file)
 
 #include "statusbarspaceinfo.h"
 
-#include <QtCore/QTimer>
-#include <QtGui/QPainter>
-#include <QtGui/QPaintEvent>
-
-#include <kglobalsettings.h>
-#include <kdiskfreespace.h>
+#include <KDiskFreeSpaceInfo>
 #include <kmountpoint.h>
 #include <klocale.h>
 #include <kio/job.h>
 
+#include <QTimer>
+#include <QKeyEvent>
+
 StatusBarSpaceInfo::StatusBarSpaceInfo(QWidget* parent) :
-    QWidget(parent),
-    m_gettingSize(false),
+    KCapacityBar(KCapacityBar::DrawTextInline, parent),
     m_kBSize(0),
-    m_kBAvailable(0)
+    m_timer(0)
 {
-    setMinimumWidth(200);
+    setMaximumWidth(200);
+    setMinimumWidth(200); // something to fix on kcapacitybar (ereslibre)
 
-    // Update the space information each 10 seconds. Polling is useful
+    // Use a timer to update the space information. Polling is useful
     // here, as files can be deleted/added outside the scope of Dolphin.
-    QTimer* timer = new QTimer(this);
-    connect(timer, SIGNAL(timeout()), this, SLOT(refresh()));
-    timer->start(10000);
+    m_timer = new QTimer(this);
+    connect(m_timer, SIGNAL(timeout()), this, SLOT(refresh()));
 }
 
 StatusBarSpaceInfo::~StatusBarSpaceInfo()
@@ -53,136 +50,64 @@ void StatusBarSpaceInfo::setUrl(const KUrl& url)
 {
     m_url = url;
     refresh();
-    QTimer::singleShot(300, this, SLOT(update()));
 }
 
-void StatusBarSpaceInfo::paintEvent(QPaintEvent* /* event */)
+void StatusBarSpaceInfo::showEvent(QShowEvent* event)
 {
-    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
-
-    const QColor c1 = palette().brush(QPalette::Background).color();
-    const QColor c2 = KGlobalSettings::buttonTextColor();
-    const QColor frameColor((c1.red()   + c2.red())   / 2,
-                            (c1.green() + c2.green()) / 2,
-                            (c1.blue()  + c2.blue())  / 2);
-    painter.setPen(frameColor);
-
-    const QColor backgrColor = KGlobalSettings::baseColor();
-    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 = i18n("%1 free", KIO::convertSizeFromKiB(m_kBAvailable));
-    } else {
-        if (m_gettingSize) {
-            text = i18n("Getting size...");
-        } else {
-            text = QString();
-            QTimer::singleShot(0, this, SLOT(hide()));
-        }
+    KCapacityBar::showEvent(event);
+    if (!event->spontaneous()) {
+        refresh();
+        m_timer->start(10000);
     }
-
-    // draw text
-    painter.setPen(KGlobalSettings::textColor());
-    painter.drawText(QRect(1, 1, barWidth - 2, barHeight + 6),
-                     Qt::AlignCenter | Qt::TextWordWrap,
-                     text);
-}
-
-
-void StatusBarSpaceInfo::slotFoundMountPoint(const unsigned long& kBSize,
-                                             const unsigned long& kBUsed,
-                                             const unsigned long& kBAvailable,
-                                             const QString& mountPoint)
-{
-    Q_UNUSED(kBUsed);
-    Q_UNUSED(mountPoint);
-
-    m_gettingSize = false;
-    m_kBSize = kBSize;
-    m_kBAvailable = kBAvailable;
-
-    update();
 }
 
-void StatusBarSpaceInfo::showResult()
+void StatusBarSpaceInfo::hideEvent(QHideEvent* event)
 {
-    m_gettingSize = false;
-    update();
+    m_timer->stop();
+    KCapacityBar::hideEvent(event);
 }
 
 void StatusBarSpaceInfo::refresh()
 {
-    m_kBSize = 0;
-    m_kBAvailable = 0;
+    if (!isVisible()) {
+        return;
+    }
 
     // KDiskFreeSpace is for local paths only
-    if (!m_url.isLocalFile())
+    if (!m_url.isLocalFile()) {
+        setText(i18nc("@info:status", "Unknown size"));
+        setValue(0);
+        update();
         return;
+    }
 
-    m_gettingSize = true;
-    KMountPoint::Ptr mp = KMountPoint::currentMountPoints().findByPath(m_url.path());
-    if (!mp)
+    KMountPoint::Ptr mp = KMountPoint::currentMountPoints().findByPath(m_url.toLocalFile());
+    if (!mp) {
         return;
+    }
 
-    KDiskFreeSpace* job = new KDiskFreeSpace(this);
-    connect(job, SIGNAL(foundMountPoint(const unsigned long&,
-                                        const unsigned long&,
-                                        const unsigned long&,
-                                        const QString&)),
-            this, SLOT(slotFoundMountPoint(const unsigned long&,
-                                           const unsigned long&,
-                                           const unsigned long&,
-                                           const QString&)));
-    connect(job, SIGNAL(done()),
-            this, SLOT(showResult()));
-
-    job->readDF(mp->mountPoint());
-}
-
-QColor StatusBarSpaceInfo::progressColor(const QColor& bgColor) const
-{
-    QColor color = KGlobalSettings::buttonBackground();
-
-    // 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);
+    KDiskFreeSpaceInfo job = KDiskFreeSpaceInfo::freeSpaceInfo(mp->mountPoint());
+    if (!job.isValid()) {
+        setText(i18nc("@info:status", "Unknown size"));
+        setValue(0);
+        update();
+        return;
     }
 
-    return color;
+    KIO::filesize_t kBSize = job.size() / 1024;
+    KIO::filesize_t kBUsed = job.used() / 1024;
+
+    const bool valuesChanged = (kBUsed != static_cast<quint64>(value())) || (kBSize != m_kBSize);
+    if (valuesChanged) {
+        setText(i18nc("@info:status Free disk space", "%1 free",
+                KIO::convertSize(job.available())));
+
+        setUpdatesEnabled(false);
+        m_kBSize = kBSize;
+        setValue(kBSize > 0 ? (kBUsed * 100) / kBSize : 0);
+        setUpdatesEnabled(true);
+        update();
+    }
 }
 
 #include "statusbarspaceinfo.moc"