QTfrontend/ui/widget/selectWeapon.cpp
branchios-develop
changeset 13418 ba39a1d396c0
parent 13325 b024cf25bde1
child 13560 43b72629d453
--- 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 <QDebug>
 #include <QPushButton>
 #include <QGridLayout>
 #include <QHBoxLayout>
@@ -84,16 +85,63 @@
     QFrame(parent),
     m_numItems(numItems)
 {
-    wconf = new QSettings(cfgdir->absolutePath() + "/weapons.ini", QSettings::IniFormat, this);
+    wconf = new QMap<QString, QString>();
+    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());
 }