Commit e7532607 authored by Zren (Chris Holland)'s avatar Zren (Chris Holland) Committed by Elvis Angelaccio
Browse files

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.
parent ac6de720
......@@ -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();
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 qreal ratio = (qreal)info.used() / (qreal)info.size();
// qDebug() << "ratio:" << ratio << "(" << info.used() << "/" << info.size() << ")";
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);
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);
role = isSelected() ? QPalette::HighlightedText : QPalette::Highlight;
QColor normalUsedColor = styleOption().palette.color(group, role);
QColor dangerUsedColor = QColor::fromRgb(218, 38, 38);
// 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();
}
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);
if (m_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
);
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);
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);
role = isSelected() ? QPalette::HighlightedText : QPalette::Highlight;
QColor normalUsedColor = styleOption().palette.color(group, role);
QColor dangerUsedColor = QColor::fromRgb(218, 38, 38);
// 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() * m_capacityBarRatio, capacityRect.height());
if (m_capacityBarRatio < 0.95) { // Fill
painter->fillRect(fillRect, normalUsedColor);
} else {
painter->fillRect(fillRect, dangerUsedColor);
}
painter->restore();
}
}
}
......@@ -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
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment