QVariant AppsModel::data(const QModelIndex &index, int role) const { if (!index.isValid() || index.row() >= m_entryList.count()) { return QVariant(); } const AbstractEntry *entry = m_entryList.at(index.row()); if (role == Qt::DisplayRole) { return entry->name(); } else if (role == Qt::DecorationRole) { return entry->icon(); } else if (role == Kicker::IsParentRole) { return (entry->type() == AbstractEntry::GroupType); } else if (role == Kicker::HasChildrenRole) { if (entry->type() == AbstractEntry::GroupType) { const AbstractGroupEntry *groupEntry = static_cast<const AbstractGroupEntry *>(entry); if (groupEntry->model() && groupEntry->model()->count()) { return true; } } } else if (role == Kicker::FavoriteIdRole) { if (entry->type() == AbstractEntry::RunnableType) { return QVariant("app:" + static_cast<AppEntry *>(m_entryList.at(index.row()))->service()->storageId()); } } else if (role == Kicker::HasActionListRole) { if (entry->type() == AbstractEntry::RunnableType || !m_hiddenEntries.isEmpty()) { return true; } else if (entry->type() == AbstractEntry::GroupType) { const AbstractGroupEntry *groupEntry = static_cast<const AbstractGroupEntry *>(entry); if (groupEntry->model()) { const AppsModel *appsModel = qobject_cast<const AppsModel *>(groupEntry->model()); if (appsModel && !appsModel->hiddenEntries().isEmpty()) { return true; } } } } else if (role == Kicker::ActionListRole) { QVariantList actionList; if (entry->type() == AbstractEntry::RunnableType) { const KService::Ptr service = static_cast<const AppEntry *>(entry)->service(); if (ContainmentInterface::mayAddLauncher(m_appletInterface, ContainmentInterface::Desktop)) { actionList << Kicker::createActionItem(i18n("Add to Desktop"), "addToDesktop"); } if (ContainmentInterface::mayAddLauncher(m_appletInterface, ContainmentInterface::Panel)) { actionList << Kicker::createActionItem(i18n("Add to Panel"), "addToPanel"); } if (ContainmentInterface::mayAddLauncher(m_appletInterface, ContainmentInterface::TaskManager, service->entryPath())) { actionList << Kicker::createActionItem(i18n("Add as Launcher"), "addToTaskManager"); } if (m_menuEntryEditor->canEdit(service->entryPath())) { actionList << Kicker::createSeparatorActionItem(); QVariantMap editAction = Kicker::createActionItem(i18n("Edit Application..."), "editApplication"); editAction["icon"] = "kmenuedit"; // TODO: Using the KMenuEdit icon might be misleading. actionList << editAction; } #ifdef PackageKitQt5_FOUND QStringList files(service->entryPath()); if (service->isApplication()) { files += QStandardPaths::findExecutable(KShell::splitArgs(service->exec()).first()); } FindPackageJob* job = new FindPackageJob(files); // TODO: Would be great to make this async. if (job->exec() && !job->packageNames().isEmpty()) { QString packageName = job->packageNames().first(); QVariantMap removeAction = Kicker::createActionItem(i18n("Remove '%1'...", packageName), "removeApplication", packageName); removeAction["icon"] = "applications-other"; actionList << removeAction; } #endif if (appletConfig() && appletConfig()->contains("hiddenApplications")) { const QStringList &hiddenApps = appletConfig()->value("hiddenApplications").toStringList(); if (!hiddenApps.contains(service->menuId())) { actionList << Kicker::createActionItem(i18n("Hide Application"), "hideApplication"); } } } if (!m_hiddenEntries.isEmpty()) { actionList << Kicker::createSeparatorActionItem(); actionList << Kicker::createActionItem(i18n("Unhide Applications in this Submenu"), "unhideSiblingApplications"); } if (entry->type() == AbstractEntry::GroupType) { const AbstractGroupEntry *groupEntry = static_cast<const AbstractGroupEntry *>(entry); if (groupEntry->model()) { const AppsModel *appsModel = qobject_cast<const AppsModel *>(groupEntry->model()); if (appsModel && !appsModel->hiddenEntries().isEmpty()) { actionList << Kicker::createActionItem(i18n("Unhide Applications in '%1'", entry->name()), "unhideChildApplications"); } } } return actionList; } else if (role == Kicker::UrlRole) { if (entry->type() == AbstractEntry::RunnableType) { return QUrl::fromLocalFile(static_cast<AppEntry *>(m_entryList.at(index.row()))->service()->entryPath()); } } return QVariant(); }
QVariantList AppEntry::actions() const { QVariantList actionList; actionList << Kicker::jumpListActions(m_service); if (!actionList.isEmpty()) { actionList << Kicker::createSeparatorActionItem(); } bool hasAddLauncher = false; if (ContainmentInterface::mayAddLauncher(m_appletInterface, ContainmentInterface::Desktop)) { actionList << Kicker::createActionItem(i18n("Add to Desktop"), "addToDesktop"); hasAddLauncher = true; } if (ContainmentInterface::mayAddLauncher(m_appletInterface, ContainmentInterface::Panel)) { actionList << Kicker::createActionItem(i18n("Add to Panel"), "addToPanel"); hasAddLauncher = true; } if (ContainmentInterface::mayAddLauncher(m_appletInterface, ContainmentInterface::TaskManager, m_service->entryPath())) { actionList << Kicker::createActionItem(i18n("Add as Launcher"), "addToTaskManager"); hasAddLauncher = true; } if (hasAddLauncher) { actionList << Kicker::createSeparatorActionItem(); } const QVariantList &recentDocuments = Kicker::recentDocumentActions(m_service); if (!recentDocuments.isEmpty()) { actionList << recentDocuments << Kicker::createSeparatorActionItem(); } if (m_menuEntryEditor->canEdit(m_service->entryPath())) { actionList << Kicker::createSeparatorActionItem(); QVariantMap editAction = Kicker::createActionItem(i18n("Edit Application..."), "editApplication"); editAction["icon"] = "kmenuedit"; // TODO: Using the KMenuEdit icon might be misleading. actionList << editAction; } #ifdef PackageKitQt5_FOUND QStringList files(m_service->entryPath()); if (m_service->isApplication()) { files += QStandardPaths::findExecutable(KShell::splitArgs(m_service->exec()).first()); } FindPackageJob* job = new FindPackageJob(files); // TODO: Would be great to make this async. if (job->exec() && !job->packageNames().isEmpty()) { QString packageName = job->packageNames().first(); QVariantMap removeAction = Kicker::createActionItem(i18n("Remove '%1'...", packageName), "removeApplication", packageName); removeAction["icon"] = "applications-other"; actionList << removeAction; } #endif if (m_appletConfig && m_appletConfig->contains("hiddenApplications") && qobject_cast<AppsModel *>(m_owner)) { const QStringList &hiddenApps = m_appletConfig->value("hiddenApplications").toStringList(); if (!hiddenApps.contains(m_service->menuId())) { actionList << Kicker::createActionItem(i18n("Hide Application"), "hideApplication"); } } return actionList; }