# HG changeset patch # User KoBeWi # Date 1518076245 -3600 # Node ID c0320d66310dfd8b420cefd1c457ff8fd801d51c # Parent 684621f7eab3d62f26554890e433f277400597fe Keep game/weapon schemes in separate files diff -r 684621f7eab3 -r c0320d66310d QTfrontend/hwform.cpp --- a/QTfrontend/hwform.cpp Thu Feb 08 07:30:19 2018 +0100 +++ b/QTfrontend/hwform.cpp Thu Feb 08 08:50:45 2018 +0100 @@ -347,7 +347,7 @@ connect(ui.pageVideos, SIGNAL(goBack()), config, SLOT(SaveVideosOptions())); - ammoSchemeModel = new AmmoSchemeModel(this, cfgdir->absolutePath() + "/schemes.ini"); + ammoSchemeModel = new AmmoSchemeModel(this, cfgdir->absolutePath() + "/Game Settings"); ui.pageScheme->setModel(ammoSchemeModel); ui.pageMultiplayer->gameCFG->GameSchemes->setModel(ammoSchemeModel); ui.pageOptions->SchemesName->setModel(ammoSchemeModel); diff -r 684621f7eab3 -r c0320d66310d QTfrontend/model/ammoSchemeModel.cpp --- a/QTfrontend/model/ammoSchemeModel.cpp Thu Feb 08 07:30:19 2018 +0100 +++ b/QTfrontend/model/ammoSchemeModel.cpp Thu Feb 08 08:50:45 2018 +0100 @@ -69,9 +69,9 @@ << QVariant() // scriptparam 43 ; -AmmoSchemeModel::AmmoSchemeModel(QObject* parent, const QString & fileName) : +AmmoSchemeModel::AmmoSchemeModel(QObject* parent, const QString & directory) : QAbstractTableModel(parent), - fileConfig(fileName, QSettings::IniFormat) + fileConfig(cfgdir->absolutePath() + "/schemes.ini", QSettings::IniFormat) { predefSchemesNames = QStringList() << "Default" @@ -569,7 +569,7 @@ << QVariant() // scriptparam 43 ; - QList construction; + QList construction; construction << predefSchemesNames[10] // name 0 << QVariant(false) // fortsmode 1 @@ -617,7 +617,7 @@ << QVariant() // scriptparam 43 ; - QList hedgeeditor; + QList hedgeeditor; hedgeeditor << predefSchemesNames[11] // name 0 << QVariant(false) // fortsmode 1 @@ -664,9 +664,9 @@ << QVariant(0) // world edge 42 << QVariant() // scriptparam 43 ; - - - + + + schemes.append(defaultScheme); schemes.append(proMode); schemes.append(shoppa); @@ -681,22 +681,44 @@ schemes.append(hedgeeditor); - int size = fileConfig.beginReadArray("schemes"); - for (int i = 0; i < size; ++i) - { - fileConfig.setArrayIndex(i); + if (!QDir(directory).exists()) { + QDir().mkdir(directory); + + int size = fileConfig.beginReadArray("schemes"); + for (int i = 0; i < size; ++i) + { + fileConfig.setArrayIndex(i); + + if (!predefSchemesNames.contains(fileConfig.value(spNames[0]).toString())) + { + QList scheme; + QSettings file(directory + "/" + fileConfig.value(spNames[0]).toString() + ".ini", QSettings::IniFormat); - if (!predefSchemesNames.contains(fileConfig.value(spNames[0]).toString())) + for (int k = 0; k < spNames.size(); ++k) { + scheme << fileConfig.value(spNames[k], defaultScheme[k]); + file.setValue(spNames[k], fileConfig.value(spNames[k], defaultScheme[k])); + } + file.sync(); + + schemes.append(scheme); + } + } + fileConfig.endArray(); + } else { + QStringList scheme_dir = QDir(directory).entryList(); + + for(int i = 0; i < scheme_dir.size(); i++) { + if (scheme_dir[i] == "." || scheme_dir[i] == "..") continue; QList scheme; + QSettings file(directory + "/" + scheme_dir[i], QSettings::IniFormat); for (int k = 0; k < spNames.size(); ++k) - scheme << fileConfig.value(spNames[k], defaultScheme[k]); + scheme << file.value(spNames[k], defaultScheme[k]); schemes.append(scheme); } } - fileConfig.endArray(); } QVariant AmmoSchemeModel::headerData(int section, Qt::Orientation orientation, int role) const @@ -809,6 +831,9 @@ beginRemoveRows(parent, row, row); + QList scheme = schemes[row]; + int j = spNames.indexOf("name"); + QFile(cfgdir->absolutePath() + "/Game Settings/" + scheme[j].toString() + ".ini").remove(); schemes.removeAt(row); endRemoveRows(); @@ -830,16 +855,16 @@ void AmmoSchemeModel::Save() { - fileConfig.beginWriteArray("schemes", schemes.size() - numberOfDefaultSchemes); - for (int i = 0; i < schemes.size() - numberOfDefaultSchemes; ++i) { - fileConfig.setArrayIndex(i); - QList scheme = schemes[i + numberOfDefaultSchemes]; + int j = spNames.indexOf("name"); + QSettings file(cfgdir->absolutePath() + "/Game Settings/" + scheme[j].toString() + ".ini", QSettings::IniFormat); for (int k = 0; k < scheme.size(); ++k) - fileConfig.setValue(spNames[k], scheme[k]); + file.setValue(spNames[k], scheme[k]); + + file.sync(); } fileConfig.endArray(); } diff -r 684621f7eab3 -r c0320d66310d QTfrontend/ui/widget/selectWeapon.cpp --- a/QTfrontend/ui/widget/selectWeapon.cpp Thu Feb 08 07:30:19 2018 +0100 +++ b/QTfrontend/ui/widget/selectWeapon.cpp Thu Feb 08 08:50:45 2018 +0100 @@ -21,6 +21,7 @@ #include "weaponItem.h" #include "hwconsts.h" +#include #include #include #include @@ -84,16 +85,45 @@ QFrame(parent), m_numItems(numItems) { - wconf = new QSettings(cfgdir->absolutePath() + "/weapons.ini", QSettings::IniFormat, this); + if (!QDir(cfgdir->absolutePath() + "/Weapon Settings").exists()) { + QDir().mkdir(cfgdir->absolutePath() + "/Weapon Settings"); + wconf = new QSettings(cfgdir->absolutePath() + "/weapons.ini", QSettings::IniFormat, this); - for(int i = 0; i < cDefaultAmmos.size(); ++i) - wconf->setValue(cDefaultAmmos[i].first, cDefaultAmmos[i].second); + for(int i = 0; i < cDefaultAmmos.size(); ++i) + wconf->setValue(cDefaultAmmos[i].first, cDefaultAmmos[i].second); + + 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 = 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())); + QFile file(cfgdir->absolutePath() + "/Weapon Settings/" + keys[i] + ".hww"); + if (file.open(QIODevice::WriteOnly)) { + QTextStream stream( &file ); + stream << wconf->value(keys[i]).toString() << endl; + } + } + } else { + wconf = new QSettings("Hedgewars", "Hedgewars"); + wconf->clear(); + + QStringList schemes = QDir(cfgdir->absolutePath() + "/Weapon Settings").entryList(); + + for(int i = 0; i < schemes.size(); i++) + { + if (schemes[i] == "." || schemes[i] == "..") continue; + + QFile file(cfgdir->absolutePath() + "/Weapon Settings/" + schemes[i]); + QString config; + + if (file.open(QIODevice::ReadOnly)) { + QTextStream stream( &file ); + stream >> config; + } + + wconf->setValue(schemes[i].remove(".hww"), fixWeaponSet(config)); + } } QString currentState = *cDefaultAmmoStore; @@ -251,6 +281,11 @@ wconf->remove(curWeaponsName); } wconf->setValue(m_name->text(), stateFull); + QFile file(cfgdir->absolutePath() + "/Weapon Settings/" + m_name->text()+ ".hww"); + if (file.open(QIODevice::WriteOnly)) { + QTextStream stream( &file ); + stream << stateFull << endl; + } emit weaponsEdited(curWeaponsName, m_name->text(), stateFull); } @@ -293,6 +328,7 @@ { isDeleting = true; wconf->remove(delWeaponsName); + QFile(cfgdir->absolutePath() + "/Weapon Settings/" + curWeaponsName + ".hww").remove(); emit weaponsDeleted(delWeaponsName); } }