File indexing completed on 2024-04-28 17:06:05
0001 /* 0002 SPDX-FileCopyrightText: 2004 Csaba Karai <krusader@users.sourceforge.net> 0003 SPDX-FileCopyrightText: 2004-2022 Krusader Krew <https://krusader.org> 0004 0005 SPDX-License-Identifier: GPL-2.0-or-later 0006 */ 0007 0008 #include "profilemanager.h" 0009 0010 // QtGui 0011 #include <QCursor> 0012 // QtWidgets 0013 #include <QInputDialog> 0014 #include <QMenu> 0015 0016 #include <KConfigCore/KSharedConfig> 0017 #include <KI18n/KLocalizedString> 0018 0019 #include "../icon.h" 0020 #include "../krglobal.h" 0021 0022 ProfileManager::ProfileManager(const QString &profileType, QWidget *parent) 0023 : QPushButton(parent) 0024 { 0025 setText(""); 0026 setIcon(Icon("user-identity")); 0027 setFixedWidth(16 + 15); 0028 setToolTip(i18n("Profiles")); 0029 0030 this->profileType = profileType; 0031 0032 connect(this, &ProfileManager::clicked, this, &ProfileManager::profilePopup); 0033 0034 KConfigGroup group(krConfig, "Private"); 0035 profileList = group.readEntry(profileType, QStringList()); 0036 } 0037 0038 void ProfileManager::profilePopup() 0039 { 0040 // profile menu identifiers 0041 #define ADD_NEW_ENTRY_ID 1000 0042 #define LOAD_ENTRY_ID 2000 0043 #define REMOVE_ENTRY_ID 3000 0044 #define OVERWRITE_ENTRY_ID 4000 0045 0046 // create the menu 0047 QMenu popup, removePopup, overwritePopup; 0048 popup.setTitle(i18n("Profiles")); 0049 0050 for (int i = 0; i != profileList.count(); i++) { 0051 KConfigGroup group(krConfig, profileType + " - " + profileList[i]); 0052 QString name = group.readEntry("Name"); 0053 popup.addAction(name)->setData(QVariant((int)(LOAD_ENTRY_ID + i))); 0054 removePopup.addAction(name)->setData(QVariant((int)(REMOVE_ENTRY_ID + i))); 0055 overwritePopup.addAction(name)->setData(QVariant((int)(OVERWRITE_ENTRY_ID + i))); 0056 } 0057 0058 popup.addSeparator(); 0059 0060 if (profileList.count()) { 0061 popup.addMenu(&removePopup)->setText(i18n("Remove entry")); 0062 popup.addMenu(&overwritePopup)->setText(i18n("Overwrite entry")); 0063 } 0064 0065 popup.addAction(i18n("Add new entry"))->setData(QVariant((int)(ADD_NEW_ENTRY_ID))); 0066 0067 int result = 0; 0068 QAction *res = popup.exec(QCursor::pos()); 0069 if (res && res->data().canConvert<int>()) 0070 result = res->data().toInt(); 0071 0072 // check out the user's selection 0073 if (result == ADD_NEW_ENTRY_ID) 0074 newProfile(); 0075 else if (result >= LOAD_ENTRY_ID && result < LOAD_ENTRY_ID + profileList.count()) { 0076 emit loadFromProfile(profileType + " - " + profileList[result - LOAD_ENTRY_ID]); 0077 } else if (result >= REMOVE_ENTRY_ID && result < REMOVE_ENTRY_ID + profileList.count()) { 0078 krConfig->deleteGroup(profileType + " - " + profileList[result - REMOVE_ENTRY_ID]); 0079 profileList.removeAll(profileList[result - REMOVE_ENTRY_ID]); 0080 0081 KConfigGroup group(krConfig, "Private"); 0082 group.writeEntry(profileType, profileList); 0083 krConfig->sync(); 0084 } else if (result >= OVERWRITE_ENTRY_ID && result < OVERWRITE_ENTRY_ID + profileList.count()) { 0085 emit saveToProfile(profileType + " - " + profileList[result - OVERWRITE_ENTRY_ID]); 0086 } 0087 } 0088 0089 void ProfileManager::newProfile(const QString &defaultName) 0090 { 0091 QString profile = QInputDialog::getText(this, i18n("Krusader::ProfileManager"), i18n("Enter the profile name:"), QLineEdit::Normal, defaultName); 0092 if (!profile.isEmpty()) { 0093 int profileNum = 1; 0094 while (profileList.contains(QString("%1").arg(profileNum))) 0095 profileNum++; 0096 0097 QString profileString = QString("%1").arg(profileNum); 0098 QString profileName = profileType + " - " + profileString; 0099 profileList.append(QString("%1").arg(profileString)); 0100 0101 KConfigGroup group(krConfig, "Private"); 0102 group.writeEntry(profileType, profileList); 0103 0104 KConfigGroup pg(krConfig, profileName); 0105 pg.writeEntry("Name", profile); 0106 emit saveToProfile(profileName); 0107 krConfig->sync(); 0108 } 0109 } 0110 0111 void ProfileManager::deleteProfile(const QString &name) 0112 { 0113 for (int i = 0; i != profileList.count(); i++) { 0114 KConfigGroup group(krConfig, profileType + " - " + profileList[i]); 0115 QString currentName = group.readEntry("Name"); 0116 0117 if (name == currentName) { 0118 krConfig->deleteGroup(profileType + " - " + profileList[i]); 0119 profileList.removeAll(profileList[i]); 0120 0121 KConfigGroup pg(krConfig, "Private"); 0122 pg.writeEntry(profileType, profileList); 0123 krConfig->sync(); 0124 return; 0125 } 0126 } 0127 } 0128 0129 void ProfileManager::overwriteProfile(const QString &name) 0130 { 0131 for (int i = 0; i != profileList.count(); i++) { 0132 KConfigGroup group(krConfig, profileType + " - " + profileList[i]); 0133 QString currentName = group.readEntry("Name"); 0134 0135 if (name == currentName) { 0136 emit saveToProfile(profileType + " - " + profileList[i]); 0137 return; 0138 } 0139 } 0140 } 0141 0142 bool ProfileManager::loadProfile(const QString &name) 0143 { 0144 for (int i = 0; i != profileList.count(); i++) { 0145 KConfigGroup group(krConfig, profileType + " - " + profileList[i]); 0146 QString currentName = group.readEntry("Name"); 0147 0148 if (name == currentName) { 0149 emit loadFromProfile(profileType + " - " + profileList[i]); 0150 return true; 0151 } 0152 } 0153 return false; 0154 } 0155 0156 QStringList ProfileManager::availableProfiles(const QString &profileType) 0157 { 0158 KConfigGroup group(krConfig, "Private"); 0159 QStringList profiles = group.readEntry(profileType, QStringList()); 0160 QStringList profileNames; 0161 0162 for (int i = 0; i != profiles.count(); i++) { 0163 KConfigGroup pg(krConfig, profileType + " - " + profiles[i]); 0164 profileNames.append(pg.readEntry("Name")); 0165 } 0166 0167 return profileNames; 0168 }