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());
60 void PIREditKeysetDialog::enactChanges()
62 // Did the nickname change?
63 bool nickChanged = false;
64 QString newNick = ui->nicknameLineEdit->text();
65 if (newNick != keysetItem->getNickname())
69 keysetItem->setNickname(newNick);
71 // Need to update the display name:
72 QString newDisplayName;
73 if (!newNick.isEmpty())
75 newDisplayName = newNick;
76 newDisplayName.append(" (");
77 newDisplayName.append(makeManager.getMakeString(keysetItem->getMake()));
78 newDisplayName.append(" ");
79 newDisplayName.append(keysetItem->getInternalName());
80 newDisplayName.append(")");
82 updateQSettingsNickname();
86 newDisplayName = makeManager.getMakeString(keysetItem->getMake());
87 newDisplayName.append(" ");
88 newDisplayName.append(keysetItem->getInternalName());
90 removeQSettingsNickname();
93 keysetItem->setText(newDisplayName);
96 // Did the favorites setting change?
97 if (keysetItem->isFavorite())
99 if (!ui->addToFavoritesCheckBox->isChecked())
101 // Remove it from the favorites list:
102 keysetItem->setFavorite(false);
103 mainWindow->removeFromFavorites(keysetItem->getID());
107 // It's already in the favorites list, but if the nickname changed,
108 // we still need to update its entry:
111 mainWindow->removeFromFavorites(keysetItem->getID());
112 mainWindow->addToFavorites(keysetItem);
118 if (ui->addToFavoritesCheckBox->isChecked())
120 keysetItem->setFavorite(true);
121 mainWindow->addToFavorites(keysetItem);
125 // Finally, clean up the dialog box for the next user:
126 ui->nicknameLineEdit->clear();
130 // Creating a new QSettings array entry, or updating an existing one, is
131 // relatively painless:
132 void PIREditKeysetDialog::updateQSettingsNickname()
134 QSettings settings("pietrzak.org", "Pierogi");
136 // Try to find an existing entry:
137 int size = settings.beginReadArray("userNames");
145 settings.setArrayIndex(index);
146 name = settings.value("keysetName").toString();
148 if (name == keysetItem->getInternalName())
150 makeStr = settings.value("keysetMake").toString();
151 makeID = makeManager.getMakeID(makeStr);
153 if (makeID == keysetItem->getMake())
155 // We've found a match, so we just need to update it:
157 settings.beginWriteArray("userNames");
158 settings.setArrayIndex(index);
159 settings.setValue("keysetNickname", keysetItem->getNickname());
172 // There was no existing entry, so we just need to make one:
173 settings.beginWriteArray("userNames");
174 settings.setArrayIndex(size);
178 keysetItem->getInternalName());
182 makeManager.getMakeString(keysetItem->getMake()));
186 keysetItem->getNickname());
192 // Removing an entry from a QSettings array is, unfortunately, quite painful:
197 QString keysetNickname;
200 typedef std::map <int, stringTriple> PIRSettingsData;
202 void PIREditKeysetDialog::removeQSettingsNickname()
204 QSettings settings("pietrzak.org", "Pierogi");
206 int size = settings.beginReadArray("userNames");
209 PIRSettingsData backupData;
210 QString nameToRemove = keysetItem->getInternalName();
211 QString makeToRemove = makeManager.getMakeString(keysetItem->getMake());
215 settings.setArrayIndex(index);
217 if ( (settings.value("keysetName").toString() != nameToRemove)
218 && (settings.value("keysetMake").toString() != makeToRemove) )
220 backupData[index2].keysetName =
221 settings.value("keysetName").toString();
222 backupData[index2].keysetMake =
223 settings.value("keysetMake").toString();
224 backupData[index2].keysetNickname =
225 settings.value("keysetNickname").toString();
232 // Close the array, blow it away, and create a new one:
235 settings.remove("userNames");
236 settings.beginWriteArray("userNames");
243 settings.setArrayIndex(index);
244 settings.setValue("keysetName", backupData[index].keysetName);
245 settings.setValue("keysetMake", backupData[index].keysetMake);
246 settings.setValue("keysetNickname", backupData[index].keysetNickname);