File indexing completed on 2024-05-12 05:52:37

0001 /*
0002     SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 
0006 */
0007 
0008 #include "loadgroupmenu.h"
0009 #include "kdebugsettingsutil.h"
0010 
0011 #include <KLocalizedString>
0012 
0013 #include <QDir>
0014 #include <QStandardPaths>
0015 
0016 LoadGroupMenu::LoadGroupMenu(QWidget *parent)
0017     : QMenu(parent)
0018 {
0019     setTitle(i18n("Load Group"));
0020     init();
0021 }
0022 
0023 LoadGroupMenu::~LoadGroupMenu() = default;
0024 
0025 void LoadGroupMenu::refreshMenu()
0026 {
0027     clear();
0028     init();
0029 }
0030 
0031 QString LoadGroupMenu::defaultWritableGroupPath()
0032 {
0033     return QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation) + QLatin1StringView("/groups");
0034 }
0035 
0036 QStringList LoadGroupMenu::defaultReadableGroupPath() const
0037 {
0038     return QStandardPaths::locateAll(QStandardPaths::AppLocalDataLocation, QStringLiteral("/groups/"), QStandardPaths::LocateDirectory);
0039 }
0040 
0041 void LoadGroupMenu::init()
0042 {
0043     // Load all ?
0044     mGroupNames.clear();
0045     const QStringList groupPath = defaultReadableGroupPath();
0046     if (groupPath.isEmpty()) {
0047         setEnabled(false);
0048         return;
0049     }
0050     for (const QString &dirName : groupPath) {
0051         QDir dir(dirName);
0052         const QStringList dirNameList = dir.entryList(QDir::Files | QDir::NoDotAndDotDot);
0053         mGroupNames += dirNameList;
0054         for (const QString &file : dirNameList) {
0055             QAction *act = addAction(file);
0056             const QString fullPath = dirName + QLatin1Char('/') + file;
0057             connect(act, &QAction::triggered, this, [this, fullPath] {
0058                 Q_EMIT loadGroupRequested(fullPath);
0059             });
0060         }
0061     }
0062     if (isEmpty()) {
0063         setEnabled(false);
0064         return;
0065     }
0066     if (KDebugSettingsUtil::hasWritableGroups()) {
0067         addSeparator();
0068         QAction *manageGroup = addAction(i18n("Manage Group"));
0069         connect(manageGroup, &QAction::triggered, this, &LoadGroupMenu::manageGroupRequested);
0070     }
0071 }
0072 
0073 QStringList LoadGroupMenu::groupNames() const
0074 {
0075     return mGroupNames;
0076 }
0077 
0078 void LoadGroupMenu::setGroupNames(const QStringList &groupNames)
0079 {
0080     mGroupNames = groupNames;
0081 }
0082 
0083 #include "moc_loadgroupmenu.cpp"