82 |
83 |
83 SelWeaponWidget::SelWeaponWidget(int numItems, QWidget* parent) : |
84 SelWeaponWidget::SelWeaponWidget(int numItems, QWidget* parent) : |
84 QFrame(parent), |
85 QFrame(parent), |
85 m_numItems(numItems) |
86 m_numItems(numItems) |
86 { |
87 { |
87 wconf = new QSettings(cfgdir->absolutePath() + "/weapons.ini", QSettings::IniFormat, this); |
88 wconf = new QMap<QString, QString>(); |
88 |
|
89 for(int i = 0; i < cDefaultAmmos.size(); ++i) |
89 for(int i = 0; i < cDefaultAmmos.size(); ++i) |
90 wconf->setValue(cDefaultAmmos[i].first, cDefaultAmmos[i].second); |
90 { |
91 |
91 wconf->insert(cDefaultAmmos[i].first, cDefaultAmmos[i].second); |
92 QStringList keys = wconf->allKeys(); |
92 } |
93 for(int i = 0; i < keys.size(); i++) |
93 |
94 { |
94 if (!QDir(cfgdir->absolutePath() + "/Schemes").exists()) { |
95 if (wconf->value(keys[i]).toString().size() != cDefaultAmmoStore->size()) |
95 QDir().mkdir(cfgdir->absolutePath() + "/Schemes"); |
96 wconf->setValue(keys[i], fixWeaponSet(wconf->value(keys[i]).toString())); |
96 } |
|
97 if (!QDir(cfgdir->absolutePath() + "/Schemes/Ammo").exists()) { |
|
98 qDebug("No /Schemes/Ammo directory found. Trying to import weapon schemes from weapons.ini."); |
|
99 QDir().mkdir(cfgdir->absolutePath() + "/Schemes/Ammo"); |
|
100 |
|
101 QSettings old_wconf(cfgdir->absolutePath() + "/weapons.ini", QSettings::IniFormat); |
|
102 |
|
103 QStringList defaultAmmos; |
|
104 for(int i = 0; i < cDefaultAmmos.size(); ++i) |
|
105 { |
|
106 defaultAmmos.append(cDefaultAmmos[i].first); |
|
107 } |
|
108 |
|
109 QStringList keys = old_wconf.allKeys(); |
|
110 int imported = 0; |
|
111 for(int i = 0; i < keys.size(); i++) |
|
112 { |
|
113 if (!defaultAmmos.contains(keys[i])) { |
|
114 wconf->insert(keys[i], fixWeaponSet(old_wconf.value(keys[i]).toString())); |
|
115 QFile file(cfgdir->absolutePath() + "/Schemes/Ammo/" + keys[i] + ".hwa"); |
|
116 if (file.open(QIODevice::WriteOnly)) { |
|
117 QTextStream stream( &file ); |
|
118 stream << old_wconf.value(keys[i]).toString() << endl; |
|
119 file.close(); |
|
120 } |
|
121 imported++; |
|
122 } |
|
123 } |
|
124 qDebug("%d weapon scheme(s) imported.", imported); |
|
125 } else { |
|
126 QStringList schemes = QDir(cfgdir->absolutePath() + "/Schemes/Ammo").entryList(QDir::Files); |
|
127 |
|
128 for(int i = 0; i < schemes.size(); i++) |
|
129 { |
|
130 QFile file(cfgdir->absolutePath() + "/Schemes/Ammo/" + schemes[i]); |
|
131 QString config; |
|
132 if (file.open(QIODevice::ReadOnly)) { |
|
133 QTextStream stream( &file ); |
|
134 stream >> config; |
|
135 file.close(); |
|
136 } |
|
137 |
|
138 // Chop off file name suffix |
|
139 QString schemeName = schemes[i]; |
|
140 if (schemeName.endsWith(".hwa", Qt::CaseInsensitive)) { |
|
141 schemeName.chop(4); |
|
142 } |
|
143 wconf->insert(schemeName, fixWeaponSet(config)); |
|
144 } |
97 } |
145 } |
98 |
146 |
99 QString currentState = *cDefaultAmmoStore; |
147 QString currentState = *cDefaultAmmoStore; |
100 |
148 |
101 QTabWidget * tbw = new QTabWidget(this); |
149 QTabWidget * tbw = new QTabWidget(this); |
157 |
205 |
158 void SelWeaponWidget::setWeapons(const QString& ammo) |
206 void SelWeaponWidget::setWeapons(const QString& ammo) |
159 { |
207 { |
160 bool enable = true; |
208 bool enable = true; |
161 for(int i = 0; i < cDefaultAmmos.size(); i++) |
209 for(int i = 0; i < cDefaultAmmos.size(); i++) |
|
210 { |
162 if (!cDefaultAmmos[i].first.compare(m_name->text())) |
211 if (!cDefaultAmmos[i].first.compare(m_name->text())) |
163 { |
212 { |
164 enable = false; |
213 enable = false; |
165 } |
214 break; |
|
215 } |
|
216 } |
166 for(int i = 0; i < m_numItems; ++i) |
217 for(int i = 0; i < m_numItems; ++i) |
167 { |
218 { |
168 twi::iterator it = weaponItems.find(i); |
219 twi::iterator it = weaponItems.find(i); |
169 if (it == weaponItems.end()) continue; |
220 if (it == weaponItems.end()) continue; |
170 it.value()[0]->setItemsNum(ammo[i].digitValue()); |
221 it.value()[0]->setItemsNum(ammo[i].digitValue()); |
180 } |
231 } |
181 |
232 |
182 void SelWeaponWidget::setDefault() |
233 void SelWeaponWidget::setDefault() |
183 { |
234 { |
184 for(int i = 0; i < cDefaultAmmos.size(); i++) |
235 for(int i = 0; i < cDefaultAmmos.size(); i++) |
|
236 { |
185 if (!cDefaultAmmos[i].first.compare(m_name->text())) |
237 if (!cDefaultAmmos[i].first.compare(m_name->text())) |
186 { |
238 { |
187 return; |
239 return; |
188 } |
240 } |
|
241 } |
189 setWeapons(*cDefaultAmmoStore); |
242 setWeapons(*cDefaultAmmoStore); |
190 } |
243 } |
191 |
244 |
192 //Save current weapons set. |
245 //Save current weapons set. |
193 void SelWeaponWidget::save() |
246 void SelWeaponWidget::save() |
248 if (curWeaponsName != "") |
301 if (curWeaponsName != "") |
249 { |
302 { |
250 // remove old entry |
303 // remove old entry |
251 wconf->remove(curWeaponsName); |
304 wconf->remove(curWeaponsName); |
252 } |
305 } |
253 wconf->setValue(m_name->text(), stateFull); |
306 wconf->insert(m_name->text(), stateFull); |
|
307 QFile file(cfgdir->absolutePath() + "/Schemes/Ammo/" + m_name->text()+ ".hwa"); |
|
308 if (file.open(QIODevice::WriteOnly)) { |
|
309 QTextStream stream( &file ); |
|
310 stream << stateFull << endl; |
|
311 file.close(); |
|
312 } |
254 emit weaponsEdited(curWeaponsName, m_name->text(), stateFull); |
313 emit weaponsEdited(curWeaponsName, m_name->text(), stateFull); |
255 } |
314 } |
256 |
315 |
257 int SelWeaponWidget::operator [] (unsigned int weaponIndex) const |
316 int SelWeaponWidget::operator [] (unsigned int weaponIndex) const |
258 { |
317 { |
260 return it == weaponItems.end() ? 9 : it.value()[0]->getItemsNum(); |
319 return it == weaponItems.end() ? 9 : it.value()[0]->getItemsNum(); |
261 } |
320 } |
262 |
321 |
263 QString SelWeaponWidget::getWeaponsString(const QString& name) const |
322 QString SelWeaponWidget::getWeaponsString(const QString& name) const |
264 { |
323 { |
265 return wconf->value(name).toString(); |
324 return wconf->find(name).value(); |
266 } |
325 } |
267 |
326 |
268 void SelWeaponWidget::deleteWeaponsName() |
327 void SelWeaponWidget::deleteWeaponsName() |
269 { |
328 { |
270 QString delWeaponsName = curWeaponsName; |
329 QString delWeaponsName = curWeaponsName; |
271 if (delWeaponsName == "") return; |
330 if (delWeaponsName == "") return; |
272 |
331 |
273 for(int i = 0; i < cDefaultAmmos.size(); i++) |
332 for(int i = 0; i < cDefaultAmmos.size(); i++) |
|
333 { |
274 if (!cDefaultAmmos[i].first.compare(delWeaponsName)) |
334 if (!cDefaultAmmos[i].first.compare(delWeaponsName)) |
275 { |
335 { |
276 QMessageBox deniedMsg(this); |
336 QMessageBox deniedMsg(this); |
277 deniedMsg.setIcon(QMessageBox::Warning); |
337 deniedMsg.setIcon(QMessageBox::Warning); |
278 deniedMsg.setWindowTitle(QMessageBox::tr("Weapons - Warning")); |
338 deniedMsg.setWindowTitle(QMessageBox::tr("Weapons - Warning")); |
279 deniedMsg.setText(QMessageBox::tr("Cannot delete default weapon set '%1'!").arg(cDefaultAmmos[i].first)); |
339 deniedMsg.setText(QMessageBox::tr("Cannot delete default weapon set '%1'!").arg(cDefaultAmmos[i].first)); |
280 deniedMsg.setWindowModality(Qt::WindowModal); |
340 deniedMsg.setWindowModality(Qt::WindowModal); |
281 deniedMsg.exec(); |
341 deniedMsg.exec(); |
282 return; |
342 return; |
283 } |
343 } |
|
344 } |
284 |
345 |
285 QMessageBox reallyDeleteMsg(this); |
346 QMessageBox reallyDeleteMsg(this); |
286 reallyDeleteMsg.setIcon(QMessageBox::Question); |
347 reallyDeleteMsg.setIcon(QMessageBox::Question); |
287 reallyDeleteMsg.setWindowTitle(QMessageBox::tr("Weapons - Are you sure?")); |
348 reallyDeleteMsg.setWindowTitle(QMessageBox::tr("Weapons - Are you sure?")); |
288 reallyDeleteMsg.setText(QMessageBox::tr("Do you really want to delete the weapon set '%1'?").arg(delWeaponsName)); |
349 reallyDeleteMsg.setText(QMessageBox::tr("Do you really want to delete the weapon set '%1'?").arg(delWeaponsName)); |
306 //name already used -> look for an appropriate name: |
368 //name already used -> look for an appropriate name: |
307 int i=2; |
369 int i=2; |
308 while(wconf->contains(newName = tr("New (%1)").arg(i++))) ; |
370 while(wconf->contains(newName = tr("New (%1)").arg(i++))) ; |
309 } |
371 } |
310 setWeaponsName(newName); |
372 setWeaponsName(newName); |
311 wconf->setValue(newName, *cEmptyAmmoStore); |
373 wconf->insert(newName, *cEmptyAmmoStore); |
312 emit weaponsAdded(newName, *cEmptyAmmoStore); |
374 emit weaponsAdded(newName, *cEmptyAmmoStore); |
313 } |
375 } |
314 |
376 |
315 void SelWeaponWidget::setWeaponsName(const QString& name) |
377 void SelWeaponWidget::setWeaponsName(const QString& name) |
316 { |
378 { |
353 int i=2; |
415 int i=2; |
354 while(wconf->contains(newName = tr("Copy of %1 (%2)").arg(curWeaponsName).arg(i++))); |
416 while(wconf->contains(newName = tr("Copy of %1 (%2)").arg(curWeaponsName).arg(i++))); |
355 } |
417 } |
356 setWeaponsName(newName); |
418 setWeaponsName(newName); |
357 setWeapons(ammo); |
419 setWeapons(ammo); |
358 wconf->setValue(newName, ammo); |
420 wconf->insert(newName, ammo); |
359 emit weaponsAdded(newName, ammo); |
421 emit weaponsAdded(newName, ammo); |
360 } |
422 } |
361 } |
423 } |
362 |
424 |
363 QString SelWeaponWidget::fixWeaponSet(const QString &s) |
425 QString SelWeaponWidget::fixWeaponSet(const QString &s) |
372 << s.mid(thisSetLength * 2, thisSetLength) |
434 << s.mid(thisSetLength * 2, thisSetLength) |
373 << s.right(thisSetLength) |
435 << s.right(thisSetLength) |
374 ; |
436 ; |
375 |
437 |
376 for(int i = sl.length() - 1; i >= 0; --i) |
438 for(int i = sl.length() - 1; i >= 0; --i) |
|
439 { |
377 sl[i] = sl[i].leftJustified(neededLength, '0', true); |
440 sl[i] = sl[i].leftJustified(neededLength, '0', true); |
|
441 } |
378 |
442 |
379 return sl.join(QString()); |
443 return sl.join(QString()); |
380 } |
444 } |
381 |
445 |
382 void SelWeaponWidget::deletionDone() |
446 void SelWeaponWidget::deletionDone() |