1 #include "pireditkeysetdialog.h"
2 #include "ui_pireditkeysetdialog.h"
4 #include "mainwindow.h"
5 #include "pirkeysetwidgetitem.h"
9 #include "pirmakenames.h"
10 extern PIRMakeMgr makeManager;
13 PIREditKeysetDialog::PIREditKeysetDialog(QWidget *parent) :
15 ui(new Ui::PIREditKeysetDialog)
21 PIREditKeysetDialog::PIREditKeysetDialog(
24 ui(new Ui::PIREditKeysetDialog),
34 Qt::QueuedConnection);
37 PIREditKeysetDialog::~PIREditKeysetDialog()
43 void PIREditKeysetDialog::setupDialog(
44 PIRKeysetWidgetItem *kwi)
46 ui->keysetNameLabel->setText(
49 ui->addToFavoritesCheckBox->setChecked(kwi->isFavorite());
51 if (kwi->hasNickname())
53 ui->nicknameLineEdit->setText(kwi->getNickname());
57 ui->nicknameLineEdit->clear();
64 void PIREditKeysetDialog::enactChanges()
66 // Did the nickname change?
67 bool nickChanged = false;
68 QString newNick = ui->nicknameLineEdit->text();
69 if (newNick != keysetItem->getNickname())
73 keysetItem->setNickname(newNick);
75 // Need to update the display name:
76 QString newDisplayName;
77 if (!newNick.isEmpty())
79 newDisplayName = newNick;
80 newDisplayName.append(" (");
81 newDisplayName.append(makeManager.getMakeString(keysetItem->getMake()));
82 newDisplayName.append(" ");
83 newDisplayName.append(keysetItem->getInternalName());
84 newDisplayName.append(")");
86 updateQSettingsNickname();
90 newDisplayName = makeManager.getMakeString(keysetItem->getMake());
91 newDisplayName.append(" ");
92 newDisplayName.append(keysetItem->getInternalName());
94 removeQSettingsNickname();
97 keysetItem->setText(newDisplayName);
100 // Did the favorites setting change?
101 if (keysetItem->isFavorite())
103 if (!ui->addToFavoritesCheckBox->isChecked())
105 // Remove it from the favorites list:
106 keysetItem->setFavorite(false);
107 mainWindow->removeFromFavorites(keysetItem->getID());
111 // It's already in the favorites list, but if the nickname changed,
112 // we still need to update its entry:
115 mainWindow->removeFromFavorites(keysetItem->getID());
116 mainWindow->addToFavorites(keysetItem);
122 if (ui->addToFavoritesCheckBox->isChecked())
124 keysetItem->setFavorite(true);
125 mainWindow->addToFavorites(keysetItem);
131 // Creating a new QSettings array entry, or updating an existing one, is
132 // relatively painless:
133 void PIREditKeysetDialog::updateQSettingsNickname()
135 QSettings settings("pietrzak.org", "Pierogi");
137 // Try to find an existing entry:
138 int size = settings.beginReadArray("userNames");
146 settings.setArrayIndex(index);
147 name = settings.value("keysetName").toString();
149 if (name == keysetItem->getInternalName())
151 makeStr = settings.value("keysetMake").toString();
152 makeID = makeManager.getMakeID(makeStr);
154 if (makeID == keysetItem->getMake())
156 // We've found a match, so we just need to update it:
158 settings.beginWriteArray("userNames");
159 settings.setArrayIndex(index);
160 settings.setValue("keysetNickname", keysetItem->getNickname());
173 // There was no existing entry, so we just need to make one:
174 settings.beginWriteArray("userNames");
175 settings.setArrayIndex(size);
179 keysetItem->getInternalName());
183 makeManager.getMakeString(keysetItem->getMake()));
187 keysetItem->getNickname());
193 // Removing an entry from a QSettings array is, unfortunately, quite painful:
198 QString keysetNickname;
201 typedef std::map <int, stringTriple> PIRSettingsData;
203 void PIREditKeysetDialog::removeQSettingsNickname()
205 QSettings settings("pietrzak.org", "Pierogi");
207 int size = settings.beginReadArray("userNames");
210 PIRSettingsData backupData;
211 QString nameToRemove = keysetItem->getInternalName();
212 QString makeToRemove = makeManager.getMakeString(keysetItem->getMake());
216 settings.setArrayIndex(index);
218 if ( (settings.value("keysetName").toString() != nameToRemove)
219 && (settings.value("keysetMake").toString() != makeToRemove) )
221 backupData[index2].keysetName =
222 settings.value("keysetName").toString();
223 backupData[index2].keysetMake =
224 settings.value("keysetMake").toString();
225 backupData[index2].keysetNickname =
226 settings.value("keysetNickname").toString();
233 // Close the array, blow it away, and create a new one:
236 settings.remove("userNames");
237 settings.beginWriteArray("userNames");
244 settings.setArrayIndex(index);
245 settings.setValue("keysetName", backupData[index].keysetName);
246 settings.setValue("keysetMake", backupData[index].keysetMake);
247 settings.setValue("keysetNickname", backupData[index].keysetNickname);