Cache status icons in file model

This commit is contained in:
Martchus 2024-06-22 22:32:28 +02:00
parent 19a621a357
commit 8caf7124fd
2 changed files with 20 additions and 12 deletions

View File

@ -357,18 +357,21 @@ QVariant SyncthingFileModel::data(const QModelIndex &index, int role) const
} }
break; break;
case 4: { case 4: {
static constexpr auto size = 16; auto &icon = m_statusIcons[(item->existsInDb ? 0x01 : 0x00) | (item->existsLocally ? 0x02 : 0x00)];
auto &manager = IconManager::instance(); if (icon.isNull()) {
auto icon = QPixmap(size * 2, size); static constexpr auto size = 16;
auto painter = QPainter(&icon); icon = QPixmap(size * 2, size);
auto left = 0; auto &manager = IconManager::instance();
icon.fill(QColor(Qt::transparent)); auto painter = QPainter(&icon);
if (item->existsInDb) { auto left = 0;
manager.renderForkAwesomeIcon(QtForkAwesome::Icon::Globe, &painter, QRect(left, 0, size, size)); icon.fill(QColor(Qt::transparent));
} if (item->existsInDb) {
left += size; manager.renderForkAwesomeIcon(QtForkAwesome::Icon::Globe, &painter, QRect(left, 0, size, size));
if (item->existsLocally) { }
manager.renderForkAwesomeIcon(QtForkAwesome::Icon::Home, &painter, QRect(left, 0, size, size)); left += size;
if (item->existsLocally) {
manager.renderForkAwesomeIcon(QtForkAwesome::Icon::Home, &painter, QRect(left, 0, size, size));
}
} }
return icon; return icon;
} break; } break;
@ -787,6 +790,9 @@ void SyncthingFileModel::handleNewConfigAvailable()
void SyncthingFileModel::handleForkAwesomeIconsChanged() void SyncthingFileModel::handleForkAwesomeIconsChanged()
{ {
for (auto &icon : m_statusIcons) {
icon = QPixmap();
}
invalidateAllIndicies(QVector<int>({ Qt::DecorationRole })); invalidateAllIndicies(QVector<int>({ Qt::DecorationRole }));
} }

View File

@ -10,6 +10,7 @@
#include <QFuture> #include <QFuture>
#include <QFutureWatcher> #include <QFutureWatcher>
#include <QHash> #include <QHash>
#include <QPixmap>
#include <QSet> #include <QSet>
#include <map> #include <map>
@ -122,6 +123,7 @@ private:
QString m_manuallyEditedIgnorePatterns; QString m_manuallyEditedIgnorePatterns;
QString m_ignoreAllByDefaultPattern; QString m_ignoreAllByDefaultPattern;
QChar m_pathSeparator; QChar m_pathSeparator;
mutable QPixmap m_statusIcons[4];
int m_columns; int m_columns;
bool m_selectionMode; bool m_selectionMode;
bool m_hasIgnorePatterns; bool m_hasIgnorePatterns;