mirror of
https://invent.kde.org/system/dolphin
synced 2024-11-05 18:47:12 +00:00
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
This commit is contained in:
parent
a23a882c68
commit
d059b705a9
2 changed files with 29 additions and 124 deletions
|
@ -20,27 +20,19 @@
|
|||
|
||||
#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"
|
||||
|
|
|
@ -22,9 +22,10 @@
|
|||
|
||||
#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
|
||||
|
|
Loading…
Reference in a new issue