diff -r 6e8b807bda4b -r ba39a1d396c0 QTfrontend/ui/widget/selectWeapon.cpp --- a/QTfrontend/ui/widget/selectWeapon.cpp Sun Jun 10 18:56:51 2018 +0200 +++ b/QTfrontend/ui/widget/selectWeapon.cpp Sun Jun 10 19:12:26 2018 +0200 @@ -21,6 +21,7 @@ #include "weaponItem.h" #include "hwconsts.h" +#include #include #include #include @@ -84,16 +85,63 @@ QFrame(parent), m_numItems(numItems) { - wconf = new QSettings(cfgdir->absolutePath() + "/weapons.ini", QSettings::IniFormat, this); + wconf = new QMap(); + for(int i = 0; i < cDefaultAmmos.size(); ++i) + { + wconf->insert(cDefaultAmmos[i].first, cDefaultAmmos[i].second); + } - for(int i = 0; i < cDefaultAmmos.size(); ++i) - wconf->setValue(cDefaultAmmos[i].first, cDefaultAmmos[i].second); + if (!QDir(cfgdir->absolutePath() + "/Schemes").exists()) { + QDir().mkdir(cfgdir->absolutePath() + "/Schemes"); + } + if (!QDir(cfgdir->absolutePath() + "/Schemes/Ammo").exists()) { + qDebug("No /Schemes/Ammo directory found. Trying to import weapon schemes from weapons.ini."); + QDir().mkdir(cfgdir->absolutePath() + "/Schemes/Ammo"); + + QSettings old_wconf(cfgdir->absolutePath() + "/weapons.ini", QSettings::IniFormat); + + QStringList defaultAmmos; + for(int i = 0; i < cDefaultAmmos.size(); ++i) + { + defaultAmmos.append(cDefaultAmmos[i].first); + } - QStringList keys = wconf->allKeys(); - for(int i = 0; i < keys.size(); i++) - { - if (wconf->value(keys[i]).toString().size() != cDefaultAmmoStore->size()) - wconf->setValue(keys[i], fixWeaponSet(wconf->value(keys[i]).toString())); + QStringList keys = old_wconf.allKeys(); + int imported = 0; + for(int i = 0; i < keys.size(); i++) + { + if (!defaultAmmos.contains(keys[i])) { + wconf->insert(keys[i], fixWeaponSet(old_wconf.value(keys[i]).toString())); + QFile file(cfgdir->absolutePath() + "/Schemes/Ammo/" + keys[i] + ".hwa"); + if (file.open(QIODevice::WriteOnly)) { + QTextStream stream( &file ); + stream << old_wconf.value(keys[i]).toString() << endl; + file.close(); + } + imported++; + } + } + qDebug("%d weapon scheme(s) imported.", imported); + } else { + QStringList schemes = QDir(cfgdir->absolutePath() + "/Schemes/Ammo").entryList(QDir::Files); + + for(int i = 0; i < schemes.size(); i++) + { + QFile file(cfgdir->absolutePath() + "/Schemes/Ammo/" + schemes[i]); + QString config; + if (file.open(QIODevice::ReadOnly)) { + QTextStream stream( &file ); + stream >> config; + file.close(); + } + + // Chop off file name suffix + QString schemeName = schemes[i]; + if (schemeName.endsWith(".hwa", Qt::CaseInsensitive)) { + schemeName.chop(4); + } + wconf->insert(schemeName, fixWeaponSet(config)); + } } QString currentState = *cDefaultAmmoStore; @@ -159,10 +207,13 @@ { bool enable = true; for(int i = 0; i < cDefaultAmmos.size(); i++) + { if (!cDefaultAmmos[i].first.compare(m_name->text())) { enable = false; + break; } + } for(int i = 0; i < m_numItems; ++i) { twi::iterator it = weaponItems.find(i); @@ -182,10 +233,12 @@ void SelWeaponWidget::setDefault() { for(int i = 0; i < cDefaultAmmos.size(); i++) + { if (!cDefaultAmmos[i].first.compare(m_name->text())) { return; } + } setWeapons(*cDefaultAmmoStore); } @@ -250,7 +303,13 @@ // remove old entry wconf->remove(curWeaponsName); } - wconf->setValue(m_name->text(), stateFull); + wconf->insert(m_name->text(), stateFull); + QFile file(cfgdir->absolutePath() + "/Schemes/Ammo/" + m_name->text()+ ".hwa"); + if (file.open(QIODevice::WriteOnly)) { + QTextStream stream( &file ); + stream << stateFull << endl; + file.close(); + } emit weaponsEdited(curWeaponsName, m_name->text(), stateFull); } @@ -262,7 +321,7 @@ QString SelWeaponWidget::getWeaponsString(const QString& name) const { - return wconf->value(name).toString(); + return wconf->find(name).value(); } void SelWeaponWidget::deleteWeaponsName() @@ -271,6 +330,7 @@ if (delWeaponsName == "") return; for(int i = 0; i < cDefaultAmmos.size(); i++) + { if (!cDefaultAmmos[i].first.compare(delWeaponsName)) { QMessageBox deniedMsg(this); @@ -281,6 +341,7 @@ deniedMsg.exec(); return; } + } QMessageBox reallyDeleteMsg(this); reallyDeleteMsg.setIcon(QMessageBox::Question); @@ -293,6 +354,7 @@ { isDeleting = true; wconf->remove(delWeaponsName); + QFile(cfgdir->absolutePath() + "/Schemes/Ammo/" + curWeaponsName + ".hwa").remove(); emit weaponsDeleted(delWeaponsName); } } @@ -308,7 +370,7 @@ while(wconf->contains(newName = tr("New (%1)").arg(i++))) ; } setWeaponsName(newName); - wconf->setValue(newName, *cEmptyAmmoStore); + wconf->insert(newName, *cEmptyAmmoStore); emit weaponsAdded(newName, *cEmptyAmmoStore); } @@ -320,7 +382,7 @@ if(name != "" && wconf->contains(name)) { - setWeapons(wconf->value(name).toString()); + setWeapons(wconf->find(name).value()); } else { @@ -337,7 +399,7 @@ QStringList SelWeaponWidget::getWeaponNames() const { - return wconf->allKeys(); + return wconf->keys(); } void SelWeaponWidget::copy() @@ -355,7 +417,7 @@ } setWeaponsName(newName); setWeapons(ammo); - wconf->setValue(newName, ammo); + wconf->insert(newName, ammo); emit weaponsAdded(newName, ammo); } } @@ -374,7 +436,9 @@ ; for(int i = sl.length() - 1; i >= 0; --i) + { sl[i] = sl[i].leftJustified(neededLength, '0', true); + } return sl.join(QString()); }