QPixmap KeeShare::indicatorBadge(const Group* group, QPixmap pixmap) { if (!isShared(group)) { return pixmap; } const QPixmap badge = isEnabled(group) ? databaseIcons()->iconPixmap(DatabaseIcons::SharedIconIndex) : databaseIcons()->iconPixmap(DatabaseIcons::UnsharedIconIndex); QImage canvas = pixmap.toImage(); const QRectF target(canvas.width() * 0.4, canvas.height() * 0.4, canvas.width() * 0.6, canvas.height() * 0.6); QPainter painter(&canvas); painter.setCompositionMode(QPainter::CompositionMode_SourceOver); painter.drawPixmap(target, badge, badge.rect()); pixmap.convertFromImage(canvas); return pixmap; }
QImage Entry::icon() const { if (m_data.customIcon.isNull()) { return databaseIcons()->icon(m_data.iconNumber); } else { // TODO: check if database() is 0 return database()->metadata()->customIcon(m_data.customIcon); } }
void TestGuiPixmaps::testEntryIcons() { Database* db = new Database(); Entry* entry = new Entry(); entry->setGroup(db->rootGroup()); QImage icon; QImage image; QPixmap pixmap; QPixmap pixmapCached1; QPixmap pixmapCached2; icon = databaseIcons()->icon(10); entry->setIcon(10); image = entry->icon(); pixmap = entry->iconPixmap(); QCOMPARE(image, icon); compareImages(pixmap, icon); pixmapCached1 = entry->iconPixmap(); pixmapCached2 = databaseIcons()->iconPixmap(10); compareImages(pixmapCached1, icon); compareImages(pixmapCached2, icon); QCOMPARE(pixmapCached1.cacheKey(), pixmap.cacheKey()); QCOMPARE(pixmapCached2.cacheKey(), pixmap.cacheKey()); Uuid iconUuid = Uuid::random(); icon = QImage(2, 1, QImage::Format_RGB32); icon.setPixel(0, 0, qRgb(0, 0, 0)); icon.setPixel(1, 0, qRgb(0, 0, 50)); db->metadata()->addCustomIcon(iconUuid, icon); entry->setIcon(iconUuid); image = entry->icon(); pixmap = entry->iconPixmap(); QCOMPARE(image, icon); compareImages(pixmap, icon); pixmapCached1 = entry->iconPixmap(); compareImages(pixmapCached1, icon); QCOMPARE(pixmapCached1.cacheKey(), pixmap.cacheKey()); delete db; }
QPixmap Entry::iconScaledPixmap() const { if (m_data.customIcon.isNull()) { // built-in icons are 16x16 so don't need to be scaled return databaseIcons()->iconPixmap(m_data.iconNumber); } else { Q_ASSERT(database()); return database()->metadata()->customIconScaledPixmap(m_data.customIcon); } }
QVariant EntryModel::data(const QModelIndex& index, int role) const { if (!index.isValid()) { return QVariant(); } Entry* entry = entryFromIndex(index); if (role == Qt::DisplayRole) { switch (index.column()) { case ParentGroup: if (entry->group()) { return entry->group()->name(); } break; case Title: return entry->title(); case Username: return entry->username(); case Url: return entry->url(); } } else if (role == Qt::DecorationRole) { switch (index.column()) { case ParentGroup: if (entry->group()) { return entry->group()->iconScaledPixmap(); } break; case Title: if (entry->isExpired()) { return databaseIcons()->iconPixmap(DatabaseIcons::ExpiredIconIndex); } else { return entry->iconScaledPixmap(); } } } else if (role == Qt::FontRole) { QFont font; if (entry->isExpired()) { font.setStrikeOut(true); } return font; } return QVariant(); }
QPixmap Entry::iconPixmap() const { if (m_data.customIcon.isNull()) { return databaseIcons()->iconPixmap(m_data.iconNumber); } else { QPixmap pixmap; if (!QPixmapCache::find(m_pixmapCacheKey, &pixmap)) { // TODO: check if database() is 0 pixmap = QPixmap::fromImage(database()->metadata()->customIcon(m_data.customIcon)); m_pixmapCacheKey = QPixmapCache::insert(pixmap); } return pixmap; } }
QImage Entry::icon() const { if (m_data.customIcon.isNull()) { return databaseIcons()->icon(m_data.iconNumber); } else { Q_ASSERT(database()); if (database()) { return database()->metadata()->customIcon(m_data.customIcon); } else { return QImage(); } } }
QPixmap Group::iconPixmap() const { if (m_data.customIcon.isNull()) { return databaseIcons()->iconPixmap(m_data.iconNumber); } else { Q_ASSERT(m_db); if (m_db) { return m_db->metadata()->customIconPixmap(m_data.customIcon); } else { return QPixmap(); } } }
QPixmap Group::iconScaledPixmap() const { if (m_data.customIcon.isNull()) { // built-in icons are 16x16 so don't need to be scaled return databaseIcons()->iconPixmap(m_data.iconNumber); } else { Q_ASSERT(m_db); if (m_db) { return m_db->metadata()->customIconScaledPixmap(m_data.customIcon); } else { return QPixmap(); } } }
QPixmap Group::iconPixmap() const { if (m_data.customIcon.isNull()) { return databaseIcons()->iconPixmap(m_data.iconNumber); } else { Q_ASSERT(m_db); QPixmap pixmap; if (m_db && !QPixmapCache::find(m_pixmapCacheKey, &pixmap)) { pixmap = QPixmap::fromImage(m_db->metadata()->customIcon(m_data.customIcon)); m_pixmapCacheKey = QPixmapCache::insert(pixmap); } return pixmap; } }
void TestGuiPixmaps::testDatabaseIcons() { QImage image; QPixmap pixmap; QPixmap pixmapCached; image = databaseIcons()->icon(0); pixmap = databaseIcons()->iconPixmap(0); compareImages(pixmap, image); // check if the cache works correctly pixmapCached = databaseIcons()->iconPixmap(0); compareImages(pixmapCached, image); QCOMPARE(pixmapCached.cacheKey(), pixmap.cacheKey()); pixmap = databaseIcons()->iconPixmap(1); image = databaseIcons()->icon(1); compareImages(pixmap, image); pixmapCached = databaseIcons()->iconPixmap(1); compareImages(pixmapCached, image); QCOMPARE(pixmapCached.cacheKey(), pixmap.cacheKey()); }