| 133 | typedef QHash<QLatin1String, IconCacheEntry> IconDatabase; |
| 134 | |
| 135 | static IconDatabase readIconData() |
| 136 | { |
| 137 | auto classesIconsRepository = ObjectBroker::object<ClassesIconsRepository *>(); |
| 138 | IconDatabase data; |
| 139 | int id = 0; |
| 140 | |
| 141 | for (auto it = classesIconsRepository->constBegin(), end = classesIconsRepository->constEnd(); |
| 142 | it != end; ++id, ++it) { |
| 143 | const QFileInfo fileInfo((*it)); |
| 144 | const QDir dir(fileInfo.path()); |
| 145 | const QString className = dir.dirName(); |
| 146 | const QString iconName = fileInfo.fileName(); |
| 147 | |
| 148 | const QByteArray classNameAsByteArray = className.toLatin1(); |
| 149 | const QLatin1String classNameKey(classNameAsByteArray.data(), classNameAsByteArray.size()); |
| 150 | |
| 151 | auto dataIt = data.find(classNameKey); |
| 152 | if (dataIt == data.end()) { |
| 153 | dataIt = data.insert(classNameKey, IconCacheEntry(classNameAsByteArray)); |
| 154 | } |
| 155 | |
| 156 | IconCacheEntry &perClassData = *dataIt; |
| 157 | if (iconName == QLatin1String("default.png")) { |
| 158 | perClassData.defaultIcon = id; |
| 159 | } else { |
| 160 | // special property-specific icons with file name format prop1=val;prop2=val.png |
| 161 | QString propString(iconName); |
| 162 | propString.chop(4); |
| 163 | const QStringList props = propString.split(';'); |
| 164 | IconCacheEntry::PropertyMap propertyMap; |
| 165 | for (const QString &prop : std::as_const(props)) { |
| 166 | const QStringList keyValue = prop.split(QLatin1Char('=')); |
| 167 | if (keyValue.size() != 2) |
| 168 | continue; |
| 169 | propertyMap << qMakePair(keyValue.at(0), keyValue.at(1)); |
| 170 | } |
| 171 | Q_ASSERT(!propertyMap.isEmpty()); |
| 172 | perClassData.propertyIcons << qMakePair(id, propertyMap); |
| 173 | } |
| 174 | } |
| 175 | |
| 176 | return data; |
| 177 | } |
| 178 | |
| 179 | static int iconIdForObject(const QMetaObject *mo, const QObject *obj) |
| 180 | { |
no test coverage detected