File indexing completed on 2024-04-21 09:35:59
0001 /*************************************************************************** 0002 * Copyright (C) 2008 by Trever Fischer * 0003 * wm161@wm161.net * 0004 * Copyright (C) 2009-2011 by Daniel Nicoletti * 0005 * dantti12@gmail.com * 0006 * * 0007 * This program is free software; you can redistribute it and/or modify * 0008 * it under the terms of the GNU General Public License as published by * 0009 * the Free Software Foundation; either version 2 of the License, or * 0010 * (at your option) any later version. * 0011 * * 0012 * This program is distributed in the hope that it will be useful, * 0013 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0015 * GNU General Public License for more details. * 0016 * * 0017 * You should have received a copy of the GNU General Public License * 0018 * along with this program; see the file COPYING. If not, write to * 0019 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * 0020 * Boston, MA 02110-1301, USA. * 0021 ***************************************************************************/ 0022 0023 #include <config.h> 0024 0025 #include "PkIcons.h" 0026 0027 #include <KIconLoader> 0028 0029 #include <QLoggingCategory> 0030 0031 Q_LOGGING_CATEGORY(APPER_LIB, "apper.lib") 0032 0033 //#include <KGlobal> 0034 0035 using namespace PackageKit; 0036 0037 bool PkIcons::init = false; 0038 QHash<QString, QIcon> PkIcons::cache = QHash<QString, QIcon>(); 0039 0040 void PkIcons::configure() 0041 { 0042 QIcon::setThemeSearchPaths(QIcon::themeSearchPaths() + 0043 QStringList{QLatin1String("xdgdata-pixmap"), 0044 QLatin1String("/usr/share/app-info/icons/"), 0045 QLatin1String("/usr/share/app-install/icons/")}); 0046 // KStandardDirs:: KGlobal::dirs()->addResourceDir("xdgdata-pixmap", "/usr/share/app-info/icons/", "/usr/share/app-install/icons/"); 0047 // KIconLoader::global()->reconfigure("apper"); 0048 PkIcons::init = true; 0049 } 0050 0051 QIcon PkIcons::getIcon(const QString &name) 0052 { 0053 if (!PkIcons::init) { 0054 PkIcons::configure(); 0055 } 0056 0057 return QIcon::fromTheme(name); 0058 } 0059 0060 QIcon PkIcons::getIcon(const QString &name, const QString &defaultName) 0061 { 0062 if (!PkIcons::init) { 0063 PkIcons::configure(); 0064 } 0065 0066 if (name.isEmpty()) { 0067 return QIcon(); 0068 } 0069 0070 bool isNull; 0071 isNull = KIconLoader::global()->iconPath(name, KIconLoader::NoGroup, true).isEmpty(); 0072 0073 if (isNull && !defaultName.isNull()) { 0074 return QIcon::fromTheme(defaultName); 0075 } else if (isNull) { 0076 return QIcon(); 0077 } 0078 return QIcon::fromTheme(name); 0079 } 0080 0081 QString PkIcons::statusIconName(Transaction::Status status) 0082 { 0083 if (!PkIcons::init) { 0084 PkIcons::configure(); 0085 } 0086 switch (status) { 0087 case Transaction::StatusUnknown : return QLatin1String("help-browser"); 0088 case Transaction::StatusCancel : 0089 case Transaction::StatusCleanup : return QLatin1String("package-clean-up"); 0090 case Transaction::StatusCommit : return QLatin1String("package-working");//TODO needs a better icon 0091 case Transaction::StatusDepResolve : return QLatin1String("package-info"); 0092 case Transaction::StatusDownloadChangelog : 0093 case Transaction::StatusDownloadFilelist : 0094 case Transaction::StatusDownloadGroup : 0095 case Transaction::StatusDownloadPackagelist : return QLatin1String("refresh-cache"); 0096 case Transaction::StatusDownload : return QLatin1String("package-download"); 0097 case Transaction::StatusDownloadRepository : 0098 case Transaction::StatusDownloadUpdateinfo : return QLatin1String("refresh-cache"); 0099 case Transaction::StatusFinished : return QLatin1String("package-clean-up"); 0100 case Transaction::StatusGeneratePackageList : return QLatin1String("refresh-cache"); 0101 case Transaction::StatusWaitingForLock : return QLatin1String("dialog-password"); 0102 case Transaction::StatusWaitingForAuth : return QLatin1String("dialog-password");//IMPROVE ME 0103 case Transaction::StatusInfo : return QLatin1String("package-info"); 0104 case Transaction::StatusInstall : return QLatin1String("kpk-package-add"); 0105 case Transaction::StatusLoadingCache : return QLatin1String("refresh-cache"); 0106 case Transaction::StatusObsolete : return QLatin1String("package-clean-up"); 0107 case Transaction::StatusQuery : return QLatin1String("search-package"); 0108 case Transaction::StatusRefreshCache : return QLatin1String("refresh-cache"); 0109 case Transaction::StatusRemove : return QLatin1String("package-removed"); 0110 case Transaction::StatusRepackaging : return QLatin1String("package-clean-up"); 0111 case Transaction::StatusRequest : return QLatin1String("search-package"); 0112 case Transaction::StatusRunning : return QLatin1String("package-working"); 0113 case Transaction::StatusScanApplications : return QLatin1String("search-package"); 0114 case Transaction::StatusSetup : return QLatin1String("package-working"); 0115 case Transaction::StatusSigCheck : 0116 case Transaction::StatusTestCommit : return QLatin1String("package-info");//TODO needs a better icon 0117 case Transaction::StatusUpdate : return QLatin1String("package-update"); 0118 case Transaction::StatusWait : return QLatin1String("package-wait"); 0119 case Transaction::StatusScanProcessList : return QLatin1String("package-info"); 0120 case Transaction::StatusCheckExecutableFiles : return QLatin1String("package-info"); 0121 case Transaction::StatusCheckLibraries : return QLatin1String("package-info"); 0122 case Transaction::StatusCopyFiles : return QLatin1String("package-info"); 0123 case Transaction::StatusRunHook : return QLatin1String("package-info"); 0124 } 0125 qCDebug(APPER_LIB) << "status icon unrecognised: " << status; 0126 return QLatin1String("help-browser"); 0127 } 0128 0129 QIcon PkIcons::statusIcon(Transaction::Status status) 0130 { 0131 return QIcon::fromTheme(PkIcons::statusIconName(status)); 0132 } 0133 0134 QString PkIcons::statusAnimation(Transaction::Status status) 0135 { 0136 if (!PkIcons::init) { 0137 PkIcons::configure(); 0138 } 0139 switch (status) { 0140 case Transaction::StatusUnknown : return QLatin1String("help-browser"); 0141 case Transaction::StatusCancel : 0142 case Transaction::StatusCleanup : return QLatin1String("pk-cleaning-up"); 0143 case Transaction::StatusCommit : 0144 case Transaction::StatusDepResolve : return QLatin1String("pk-testing"); 0145 case Transaction::StatusDownloadChangelog : 0146 case Transaction::StatusDownloadFilelist : 0147 case Transaction::StatusDownloadGroup : 0148 case Transaction::StatusDownloadPackagelist : return QLatin1String("pk-refresh-cache"); 0149 case Transaction::StatusDownload : return QLatin1String("pk-downloading"); 0150 case Transaction::StatusDownloadRepository : 0151 case Transaction::StatusDownloadUpdateinfo : return QLatin1String("pk-refresh-cache"); 0152 case Transaction::StatusFinished : return QLatin1String("pk-cleaning-up"); 0153 case Transaction::StatusGeneratePackageList : return QLatin1String("pk-searching"); 0154 case Transaction::StatusWaitingForLock : return QLatin1String("pk-waiting"); 0155 case Transaction::StatusInfo : return QLatin1String("package-working"); 0156 case Transaction::StatusInstall : return QLatin1String("pk-installing"); 0157 case Transaction::StatusLoadingCache : return QLatin1String("pk-refresh-cache"); 0158 case Transaction::StatusObsolete : return QLatin1String("pk-cleaning-up"); 0159 case Transaction::StatusQuery : return QLatin1String("pk-searching"); 0160 case Transaction::StatusRefreshCache : return QLatin1String("pk-refresh-cache"); 0161 case Transaction::StatusRemove : return QLatin1String("package-removed");//TODO do the animation 0162 case Transaction::StatusRepackaging : return QLatin1String("pk-searching"); 0163 case Transaction::StatusRequest : return QLatin1String("process-working"); 0164 case Transaction::StatusRunning : return QLatin1String("pk-testing"); 0165 case Transaction::StatusScanApplications : return QLatin1String("pk-searching"); 0166 case Transaction::StatusSetup : return QLatin1String("pk-searching"); 0167 case Transaction::StatusSigCheck : return QLatin1String("package-info"); 0168 case Transaction::StatusTestCommit : return QLatin1String("pk-testing"); 0169 case Transaction::StatusUpdate : return QLatin1String("pk-installing"); 0170 case Transaction::StatusWait : return QLatin1String("pk-waiting"); 0171 case Transaction::StatusWaitingForAuth : return QLatin1String("dialog-password"); 0172 case Transaction::StatusScanProcessList : return QLatin1String("utilities-system-monitor"); 0173 default : qCDebug(APPER_LIB) << "status icon unrecognised: " << status; 0174 return QLatin1String("help-browser"); 0175 } 0176 } 0177 0178 QString PkIcons::actionIconName(Transaction::Role role) 0179 { 0180 if (!PkIcons::init) { 0181 PkIcons::configure(); 0182 } 0183 switch (role) { 0184 case Transaction::RoleUnknown : return QLatin1String("applications-other"); 0185 case Transaction::RoleAcceptEula : return QLatin1String("package-info"); 0186 case Transaction::RoleCancel : return QLatin1String("process-stop"); 0187 case Transaction::RoleDownloadPackages : return QLatin1String("package-download"); 0188 case Transaction::RoleGetCategories : return QLatin1String("package-info"); 0189 case Transaction::RoleDependsOn : return QLatin1String("package-info"); 0190 case Transaction::RoleGetDetails : return QLatin1String("package-info"); 0191 case Transaction::RoleGetDetailsLocal : return QLatin1String("package-info"); 0192 case Transaction::RoleGetDistroUpgrades : return QLatin1String("distro-upgrade"); 0193 case Transaction::RoleGetFiles : return QLatin1String("search-package"); 0194 case Transaction::RoleGetFilesLocal : return QLatin1String("search-package"); 0195 case Transaction::RoleGetOldTransactions : return QLatin1String("package-info"); 0196 case Transaction::RoleGetPackages : return QLatin1String("package-packages"); 0197 case Transaction::RoleGetRepoList : return QLatin1String("package-orign"); 0198 case Transaction::RoleRequiredBy : return QLatin1String("package-info"); 0199 case Transaction::RoleGetUpdateDetail : return QLatin1String("package-info"); 0200 case Transaction::RoleGetUpdates : return QLatin1String("package-info"); 0201 case Transaction::RoleInstallFiles : return QLatin1String("package-installed"); 0202 case Transaction::RoleInstallPackages : return QLatin1String("package-installed"); 0203 case Transaction::RoleInstallSignature : return QLatin1String("package-installed"); 0204 case Transaction::RoleRefreshCache : return QLatin1String("refresh-cache"); 0205 case Transaction::RoleRemovePackages : return QLatin1String("package-removed"); 0206 case Transaction::RoleRepoEnable : return QLatin1String("package-orign"); 0207 case Transaction::RoleRepoSetData : return QLatin1String("package-orign"); 0208 case Transaction::RoleRepoRemove : return QLatin1String("package-orign"); 0209 case Transaction::RoleResolve : return QLatin1String("search-package"); 0210 case Transaction::RoleSearchDetails : return QLatin1String("search-package"); 0211 case Transaction::RoleSearchFile : return QLatin1String("search-package"); 0212 case Transaction::RoleSearchGroup : return QLatin1String("search-package"); 0213 case Transaction::RoleSearchName : return QLatin1String("search-package"); 0214 case Transaction::RoleUpdatePackages : return QLatin1String("package-update"); 0215 case Transaction::RoleWhatProvides : return QLatin1String("search-package"); 0216 case Transaction::RoleRepairSystem : return QLatin1String("package-rollback"); 0217 case Transaction::RoleUpgradeSystem : return QLatin1String("package-update"); 0218 } 0219 qCDebug(APPER_LIB) << "action unrecognised: " << role; 0220 return QLatin1String("applications-other"); 0221 } 0222 0223 QIcon PkIcons::actionIcon(Transaction::Role role) 0224 { 0225 return QIcon::fromTheme(actionIconName(role)); 0226 } 0227 0228 QIcon PkIcons::groupsIcon(Transaction::Group group) 0229 { 0230 if (!PkIcons::init) { 0231 PkIcons::configure(); 0232 } 0233 switch (group) { 0234 case Transaction::GroupUnknown : return QIcon::fromTheme(QLatin1String("unknown")); 0235 case Transaction::GroupAccessibility : return QIcon::fromTheme(QLatin1String("preferences-desktop-accessibility")); 0236 case Transaction::GroupAccessories : return QIcon::fromTheme(QLatin1String("applications-accessories")); 0237 case Transaction::GroupAdminTools : return QIcon::fromTheme(QLatin1String("dialog-password")); 0238 case Transaction::GroupCommunication : return QIcon::fromTheme(QLatin1String("network-workgroup"));//FIXME 0239 case Transaction::GroupDesktopGnome : return QIcon::fromTheme(QLatin1String("kpk-desktop-gnome")); 0240 case Transaction::GroupDesktopKde : return QIcon::fromTheme(QLatin1String("kde")); 0241 case Transaction::GroupDesktopOther : return QIcon::fromTheme(QLatin1String("user-desktop")); 0242 case Transaction::GroupDesktopXfce : return QIcon::fromTheme(QLatin1String("kpk-desktop-xfce")); 0243 case Transaction::GroupDocumentation : return QIcon::fromTheme(QLatin1String("accessories-dictionary"));//FIXME 0244 case Transaction::GroupEducation : return QIcon::fromTheme(QLatin1String("applications-education")); 0245 case Transaction::GroupElectronics : return QIcon::fromTheme(QLatin1String("media-flash")); 0246 case Transaction::GroupFonts : return QIcon::fromTheme(QLatin1String("preferences-desktop-font")); 0247 case Transaction::GroupGames : return QIcon::fromTheme(QLatin1String("applications-games")); 0248 case Transaction::GroupGraphics : return QIcon::fromTheme(QLatin1String("applications-graphics")); 0249 case Transaction::GroupInternet : return QIcon::fromTheme(QLatin1String("applications-internet")); 0250 case Transaction::GroupLegacy : return QIcon::fromTheme(QLatin1String("media-floppy")); 0251 case Transaction::GroupLocalization : return QIcon::fromTheme(QLatin1String("applications-education-language")); 0252 case Transaction::GroupMaps : return QIcon::fromTheme(QLatin1String("Maps"));//FIXME 0253 case Transaction::GroupCollections : return QIcon::fromTheme(QLatin1String("package-orign")); 0254 case Transaction::GroupMultimedia : return QIcon::fromTheme(QLatin1String("applications-multimedia")); 0255 case Transaction::GroupNetwork : return QIcon::fromTheme(QLatin1String("network-wired")); 0256 case Transaction::GroupOffice : return QIcon::fromTheme(QLatin1String("applications-office")); 0257 case Transaction::GroupOther : return QIcon::fromTheme(QLatin1String("applications-other")); 0258 case Transaction::GroupPowerManagement : return QIcon::fromTheme(QLatin1String("battery")); 0259 case Transaction::GroupProgramming : return QIcon::fromTheme(QLatin1String("applications-development")); 0260 case Transaction::GroupPublishing : return QIcon::fromTheme(QLatin1String("accessories-text-editor")); 0261 case Transaction::GroupRepos : return QIcon::fromTheme(QLatin1String("application-x-compressed-tar")); 0262 case Transaction::GroupScience : return QIcon::fromTheme(QLatin1String("applications-science")); 0263 case Transaction::GroupSecurity : return QIcon::fromTheme(QLatin1String("security-high")); 0264 case Transaction::GroupServers : return QIcon::fromTheme(QLatin1String("network-server")); 0265 case Transaction::GroupSystem : return QIcon::fromTheme(QLatin1String("applications-system")); 0266 case Transaction::GroupVirtualization : return QIcon::fromTheme(QLatin1String("cpu")); 0267 case Transaction::GroupVendor : return QIcon::fromTheme(QLatin1String("application-certificate")); 0268 case Transaction::GroupNewest : return QIcon::fromTheme(QLatin1String("dialog-information")); 0269 } 0270 qCDebug(APPER_LIB) << "group unrecognised: " << group; 0271 return QIcon::fromTheme(QLatin1String("unknown")); 0272 } 0273 0274 QIcon PkIcons::packageIcon(Transaction::Info info) 0275 { 0276 if (!PkIcons::init) { 0277 PkIcons::configure(); 0278 } 0279 switch (info) { 0280 case Transaction::InfoBugfix : return QIcon::fromTheme(QLatin1String("script-error")); 0281 case Transaction::InfoEnhancement : return QIcon::fromTheme(QLatin1String("ktip")); 0282 case Transaction::InfoImportant : return QIcon::fromTheme(QLatin1String("security-medium")); 0283 case Transaction::InfoLow : return QIcon::fromTheme(QLatin1String("security-high")); 0284 case Transaction::InfoSecurity : return QIcon::fromTheme(QLatin1String("security-low")); 0285 case Transaction::InfoNormal : return QIcon::fromTheme(QLatin1String("emblem-new")); 0286 case Transaction::InfoBlocked : return QIcon::fromTheme(QLatin1String("dialog-cancel")); 0287 case Transaction::InfoAvailable : return QIcon::fromTheme(QLatin1String("package-download")); 0288 case Transaction::InfoInstalled : return QIcon::fromTheme(QLatin1String("package-installed")); 0289 default : return QIcon::fromTheme(QLatin1String("package")); 0290 } 0291 } 0292 0293 QString PkIcons::restartIconName(Transaction::Restart type) 0294 { 0295 if (!PkIcons::init) { 0296 PkIcons::configure(); 0297 } 0298 // These names MUST be standard icons, otherwise KStatusNotifierItem 0299 // will not be able to load them 0300 switch (type) { 0301 case Transaction::RestartSecuritySystem : 0302 case Transaction::RestartSystem : return QLatin1String("system-reboot"); 0303 case Transaction::RestartSecuritySession : 0304 case Transaction::RestartSession : return QLatin1String("system-log-out"); 0305 case Transaction::RestartApplication : return QLatin1String("process-stop"); 0306 case Transaction::RestartNone : 0307 case Transaction::RestartUnknown : break; 0308 } 0309 return QLatin1String(""); 0310 } 0311 0312 QIcon PkIcons::restartIcon(Transaction::Restart type) 0313 { 0314 return PkIcons::getIcon(restartIconName(type)); 0315 } 0316 0317 QIcon PkIcons::getPreloadedIcon(const QString &name) 0318 { 0319 if (!PkIcons::init) { 0320 PkIcons::configure(); 0321 } 0322 0323 qCDebug(APPER_LIB) << KIconLoader::global()->iconPath(name, KIconLoader::NoGroup, true); 0324 QIcon icon; 0325 icon.addPixmap(QIcon::fromTheme(name).pixmap(48, 48)); 0326 return icon; 0327 } 0328 0329 QString PkIcons::lastCacheRefreshIconName(uint lastTime) 0330 { 0331 unsigned long fifteen = 60 * 60 * 24 * 15; 0332 unsigned long tirty = 60 * 60 * 24 * 30; 0333 0334 if (lastTime != UINT_MAX && lastTime < fifteen) { 0335 return QLatin1String("security-high"); 0336 } else if (lastTime != UINT_MAX && lastTime > fifteen && lastTime < tirty) { 0337 return QLatin1String("security-medium"); 0338 } 0339 return QLatin1String("security-low"); 0340 } 0341 0342 #include "moc_PkIcons.cpp"