diff --git a/src/panels/places/placesitemlistwidget.cpp b/src/panels/places/placesitemlistwidget.cpp index 52b3baf309..4d88f8c55e 100644 --- a/src/panels/places/placesitemlistwidget.cpp +++ b/src/panels/places/placesitemlistwidget.cpp @@ -6,6 +6,8 @@ #include "placesitemlistwidget.h" +#include + #include #include @@ -18,6 +20,9 @@ PlacesItemListWidget::PlacesItemListWidget(KItemListWidgetInformant* informant, QGraphicsItem* parent) : KStandardItemListWidget(informant, parent) + , m_isMountPoint(false) + , m_drawCapacityBar(false) + , m_capacityBarRatio(0) { } @@ -36,78 +41,101 @@ QPalette::ColorRole PlacesItemListWidget::normalTextColorRole() const return QPalette::WindowText; } +void PlacesItemListWidget::updateCapacityBar() +{ + const QUrl url = data().value("url").toUrl(); + if (url.isLocalFile()) { + const QString mountPointPath = url.toLocalFile(); + qDebug() << "url:" << mountPointPath; + KMountPoint::Ptr mp = KMountPoint::currentMountPoints().findByPath(mountPointPath); + m_isMountPoint = (mp && mp->mountPoint() == mountPointPath); + qDebug() << " isMountPoint:" << m_isMountPoint; + if (m_isMountPoint) { + const KDiskFreeSpaceInfo info = KDiskFreeSpaceInfo::freeSpaceInfo(mountPointPath); + m_drawCapacityBar = info.size() != 0; + m_capacityBarRatio = (qreal)info.used() / (qreal)info.size(); + qDebug() << " capacityBarRatio:" << m_capacityBarRatio << "(" << info.used() << "/" << info.size() << ")"; + + // update(); + } else { + resetCapacityBar(); + } + } else { + resetCapacityBar(); + } +} + +void PlacesItemListWidget::resetCapacityBar() +{ + m_isMountPoint = false; + m_drawCapacityBar = false; + m_capacityBarRatio = 0; +} + +void PlacesItemListWidget::polishEvent() +{ + updateCapacityBar(); + + QGraphicsWidget::polishEvent(); +} + void PlacesItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) { KStandardItemListWidget::paint(painter, option, widget); - bool drawCapacityBar = false; - const QUrl url = data().value("url").toUrl(); - if (url.isLocalFile()) { - const QString mountPointPath = url.toLocalFile(); - KMountPoint::Ptr mp = KMountPoint::currentMountPoints().findByPath(mountPointPath); - bool isMountPoint = (mp && mp->mountPoint() == mountPointPath); + if (m_drawCapacityBar) { + const TextInfo* textInfo = m_textInfo.value("text"); + if (textInfo) { // See KStandarItemListWidget::paint() for info on why we check textInfo. + painter->save(); - if (isMountPoint) { - const KDiskFreeSpaceInfo info = KDiskFreeSpaceInfo::freeSpaceInfo(mountPointPath); - drawCapacityBar = info.size() != 0; - if (drawCapacityBar) { - const TextInfo* textInfo = m_textInfo.value("text"); - if (textInfo) { // See KStandarItemListWidget::paint() for info on why we check textInfo. - painter->save(); + QRect capacityRect( + textInfo->pos.x(), + option->rect.top() + option->rect.height() - CAPACITYBAR_HEIGHT - CAPACITYBAR_MARGIN, + qMin((qreal)option->rect.width(), selectionRect().width()) - (textInfo->pos.x() - option->rect.left()), + CAPACITYBAR_HEIGHT + ); - QRect capacityRect( - textInfo->pos.x(), - option->rect.top() + option->rect.height() - CAPACITYBAR_HEIGHT - CAPACITYBAR_MARGIN, - qMin((qreal)option->rect.width(), selectionRect().width()) - (textInfo->pos.x() - option->rect.left()), - CAPACITYBAR_HEIGHT - ); + const QPalette pal = palette(); + const QPalette::ColorGroup group = isActiveWindow() ? QPalette::Active : QPalette::Inactive; + // QColor bgColor = QColor::fromRgb(230, 230, 230); + // QColor outlineColor = QColor::fromRgb(208, 208, 208); + // QColor bgColor = QColor::fromRgb(0, 230, 0); + // QColor outlineColor = QColor::fromRgb(208, 0, 0, 127); + // QColor normalUsedColor = QColor::fromRgb(38, 160, 218); + // QColor dangerUsedColor = QColor::fromRgb(218, 38, 38); + // QColor bgColor = pal.base().color().darker(130); + // QColor outlineColor = pal.base().color().darker(150); - const qreal ratio = (qreal)info.used() / (qreal)info.size(); - // qDebug() << "ratio:" << ratio << "(" << info.used() << "/" << info.size() << ")"; + QPalette::ColorRole role; + // role = isSelected() ? QPalette::Highlight : QPalette::Window; + // QColor bgColor = styleOption().palette.color(group, role).darker(150); + // QColor outlineColor = styleOption().palette.color(group, role).darker(170); + QColor bgColor = isSelected() + ? styleOption().palette.color(group, QPalette::Highlight).darker(180) + : styleOption().palette.color(group, QPalette::Window).darker(120); - const QPalette pal = palette(); - const QPalette::ColorGroup group = isActiveWindow() ? QPalette::Active : QPalette::Inactive; - // QColor bgColor = QColor::fromRgb(230, 230, 230); - // QColor outlineColor = QColor::fromRgb(208, 208, 208); - // QColor bgColor = QColor::fromRgb(0, 230, 0); - // QColor outlineColor = QColor::fromRgb(208, 0, 0, 127); - // QColor normalUsedColor = QColor::fromRgb(38, 160, 218); - // QColor dangerUsedColor = QColor::fromRgb(218, 38, 38); - // QColor bgColor = pal.base().color().darker(130); - // QColor outlineColor = pal.base().color().darker(150); + role = isSelected() ? QPalette::HighlightedText : QPalette::Highlight; + QColor normalUsedColor = styleOption().palette.color(group, role); - QPalette::ColorRole role; - // role = isSelected() ? QPalette::Highlight : QPalette::Window; - // QColor bgColor = styleOption().palette.color(group, role).darker(150); - // QColor outlineColor = styleOption().palette.color(group, role).darker(170); - QColor bgColor = isSelected() - ? styleOption().palette.color(group, QPalette::Highlight).darker(180) - : styleOption().palette.color(group, QPalette::Window).darker(120); + QColor dangerUsedColor = QColor::fromRgb(218, 38, 38); - role = isSelected() ? QPalette::HighlightedText : QPalette::Highlight; - QColor normalUsedColor = styleOption().palette.color(group, role); + // Background + painter->fillRect(capacityRect, bgColor); - QColor dangerUsedColor = QColor::fromRgb(218, 38, 38); + // Outline + // const QRect outlineRect(capacityRect.x(), capacityRect.y(), capacityRect.width() - 1, capacityRect.height() - 1); + // painter->setPen(outlineColor); + // painter->drawRect(outlineRect); - // Background - painter->fillRect(capacityRect, bgColor); - - // Outline - // const QRect outlineRect(capacityRect.x(), capacityRect.y(), capacityRect.width() - 1, capacityRect.height() - 1); - // painter->setPen(outlineColor); - // painter->drawRect(outlineRect); - - // Fill - const QRect fillRect(capacityRect.x(), capacityRect.y(), capacityRect.width() * ratio, capacityRect.height()); - if (ratio < 0.95) { // Fill - painter->fillRect(fillRect, normalUsedColor); - } else { - painter->fillRect(fillRect, dangerUsedColor); - } - - painter->restore(); - } + // Fill + const QRect fillRect(capacityRect.x(), capacityRect.y(), capacityRect.width() * m_capacityBarRatio, capacityRect.height()); + if (m_capacityBarRatio < 0.95) { // Fill + painter->fillRect(fillRect, normalUsedColor); + } else { + painter->fillRect(fillRect, dangerUsedColor); } + + painter->restore(); } } } diff --git a/src/panels/places/placesitemlistwidget.h b/src/panels/places/placesitemlistwidget.h index e5763ad07d..a82616ff3a 100644 --- a/src/panels/places/placesitemlistwidget.h +++ b/src/panels/places/placesitemlistwidget.h @@ -22,10 +22,18 @@ public: ~PlacesItemListWidget() override; void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = nullptr) override; + void polishEvent() override; protected: bool isHidden() const override; QPalette::ColorRole normalTextColorRole() const override; + void updateCapacityBar(); + void resetCapacityBar(); + +private: + bool m_isMountPoint; + bool m_drawCapacityBar; + qreal m_capacityBarRatio; }; #endif