]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/statusbarspaceinfo.cpp
add TODO as reminder for KDE 4.1...
[dolphin.git] / src / statusbarspaceinfo.cpp
index 09976372ab7c569bb2422f462eb79529668d66ea..84436813608728d4af814adc631e949c338aab02 100644 (file)
 
 #include "statusbarspaceinfo.h"
 
-#include <QtCore/QTimer>
-#include <QtGui/QPainter>
-#include <QtGui/QPaintEvent>
-
-#include <kglobalsettings.h>
-#include <kdiskfreesp.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),
@@ -37,6 +38,10 @@ StatusBarSpaceInfo::StatusBarSpaceInfo(QWidget* parent) :
 {
     setMinimumWidth(200);
 
+    QPalette palette;
+    palette.setColor(QPalette::Background, Qt::transparent);
+    setPalette(palette);
+
     // Update the space information each 10 seconds. Polling is useful
     // here, as files can be deleted/added outside the scope of Dolphin.
     QTimer* timer = new QTimer(this);
@@ -66,14 +71,11 @@ void StatusBarSpaceInfo::paintEvent(QPaintEvent* /* event */)
 
     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);
+    QColor frameColor = palette().brush(QPalette::Background).color();
+    frameColor.setAlpha(128);
     painter.setPen(frameColor);
 
-    const QColor backgrColor = KGlobalSettings::baseColor();
+    const QColor backgrColor = KColorScheme(QPalette::Active, KColorScheme::View).background().color();
     painter.setBrush(backgrColor);
 
     painter.drawRect(QRect(0, barTop + 1 , barWidth - widthDec, barHeight));
@@ -91,28 +93,28 @@ void StatusBarSpaceInfo::paintEvent(QPaintEvent* /* event */)
         }
         painter.drawRect(QRect(left, barTop + 2, right, barHeight - 1));
 
-        text = i18n("%1 free", KIO::convertSizeFromKiB(m_kBAvailable));
+        text = i18nc("@info:status", "%1 free", KIO::convertSizeFromKiB(m_kBAvailable));
     } else {
         if (m_gettingSize) {
-            text = i18n("Getting size...");
+            text = i18nc("@info:status", "Getting size...");
         } else {
             text = QString();
-            QTimer::singleShot(0, this, SLOT(hide()));
+            QMetaObject::invokeMethod(this, "hide", Qt::QueuedConnection);
         }
     }
 
     // draw text
-    painter.setPen(KGlobalSettings::textColor());
+    painter.setPen(KColorScheme(QPalette::Active, KColorScheme::View).foreground().color());
     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)
+void StatusBarSpaceInfo::slotFoundMountPoint(const QString& mountPoint,
+                                             quint64 kBSize,
+                                             quint64 kBUsed,
+                                             quint64 kBAvailable)
 {
     Q_UNUSED(kBUsed);
     Q_UNUSED(mountPoint);
@@ -121,15 +123,6 @@ void StatusBarSpaceInfo::slotFoundMountPoint(const unsigned long& kBSize,
     m_kBSize = kBSize;
     m_kBAvailable = kBAvailable;
 
-    // Bypass a the issue (?) of KDiskFreeSp that for protocols like
-    // FTP, SMB the size of root partition is returned.
-    // TODO: check whether KDiskFreeSp is buggy or Dolphin uses it in a wrong way
-    const QString protocol(m_url.protocol());
-    if (!protocol.isEmpty() && (protocol != "file")) {
-        m_kBSize = 0;
-        m_kBAvailable = 0;
-    }
-
     update();
 }
 
@@ -141,30 +134,37 @@ void StatusBarSpaceInfo::showResult()
 
 void StatusBarSpaceInfo::refresh()
 {
-    m_gettingSize = true;
     m_kBSize = 0;
     m_kBAvailable = 0;
 
-    const QString mountPoint(KIO::findPathMountPoint(m_url.path()));
-
-    KDiskFreeSp* job = new KDiskFreeSp(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&)));
+    // KDiskFreeSpace is for local paths only
+    if (!m_url.isLocalFile()) {
+        return;
+    }
+
+    m_gettingSize = true;
+    KMountPoint::Ptr mp = KMountPoint::currentMountPoints().findByPath(m_url.path());
+    if (!mp)
+        return;
+
+    KDiskFreeSpace* job = new KDiskFreeSpace(this);
+    connect(job, SIGNAL(foundMountPoint(const QString&,
+                                        quint64,
+                                        quint64,
+                                        quint64)),
+            this, SLOT(slotFoundMountPoint(const QString&,
+                                           quint64,
+                                           quint64,
+                                           quint64)));
     connect(job, SIGNAL(done()),
             this, SLOT(showResult()));
 
-    job->readDF(mountPoint);
+    job->readDF(mp->mountPoint());
 }
 
 QColor StatusBarSpaceInfo::progressColor(const QColor& bgColor) const
 {
-    QColor color = KGlobalSettings::buttonBackground();
+    QColor color = KColorScheme(QPalette::Active, KColorScheme::Button).background().color();
 
     // assure that enough contrast is given between the background color
     // and the progressbar color