diff options
| author | Chris Holland <[email protected]> | 2019-07-31 21:46:53 -0400 |
|---|---|---|
| committer | Elvis Angelaccio <[email protected]> | 2020-11-04 23:16:12 +0000 |
| commit | e75326077b443f5f1f1b19dc960a3a8a83979d81 (patch) | |
| tree | 58075e29255e7aa5608ff85ae3d3d4ad6825c82d /src/panels | |
| parent | ac6de72048fb50bca1823b8001fb012158050c25 (diff) | |
Only check if place url is mount point once during polish event.
The capacity bars will no longer update when capacity changes. It only
checks the size on init.
Updating during polish event is only a temporarily solution just to
draft code flow for seperating logic from painting. Eventually this
logic update should be in a worker thread detached from blocking the
rendering thread that blocks launching the dolphin window.
Diffstat (limited to 'src/panels')
| -rw-r--r-- | src/panels/places/placesitemlistwidget.cpp | 138 | ||||
| -rw-r--r-- | src/panels/places/placesitemlistwidget.h | 8 |
2 files changed, 91 insertions, 55 deletions
diff --git a/src/panels/places/placesitemlistwidget.cpp b/src/panels/places/placesitemlistwidget.cpp index 52b3baf30..4d88f8c55 100644 --- a/src/panels/places/placesitemlistwidget.cpp +++ b/src/panels/places/placesitemlistwidget.cpp @@ -6,6 +6,8 @@ #include "placesitemlistwidget.h" +#include <QDebug> + #include <QGraphicsView> #include <QStyleOption> @@ -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::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) +void PlacesItemListWidget::updateCapacityBar() { - KStandardItemListWidget::paint(painter, option, widget); - - bool drawCapacityBar = false; 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); - bool isMountPoint = (mp && mp->mountPoint() == mountPointPath); - - if (isMountPoint) { + m_isMountPoint = (mp && mp->mountPoint() == mountPointPath); + qDebug() << " isMountPoint:" << m_isMountPoint; + if (m_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(); + 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(); +} - 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 - ); +void PlacesItemListWidget::paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget) +{ + KStandardItemListWidget::paint(painter, option, widget); - const qreal ratio = (qreal)info.used() / (qreal)info.size(); - // qDebug() << "ratio:" << ratio << "(" << info.used() << "/" << info.size() << ")"; + if (m_drawCapacityBar) { + const TextInfo* textInfo = m_textInfo.value("text"); + if (textInfo) { // See KStandarItemListWidget::paint() for info on why we check textInfo. + painter->save(); - 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); + 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 + ); - 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); - // 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); - } + // Outline + // const QRect outlineRect(capacityRect.x(), capacityRect.y(), capacityRect.width() - 1, capacityRect.height() - 1); + // painter->setPen(outlineColor); + // painter->drawRect(outlineRect); - 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 e5763ad07..a82616ff3 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 |
