QTfrontend/ui/widget/selectWeapon.cpp
changeset 12665 5664ec82aed7
parent 12663 d7492247a368
child 12689 5b135c26f320
--- a/QTfrontend/ui/widget/selectWeapon.cpp	Sat Oct 07 01:05:55 2017 +0200
+++ b/QTfrontend/ui/widget/selectWeapon.cpp	Sat Oct 07 03:43:06 2017 +0200
@@ -189,11 +189,19 @@
     setWeapons(*cDefaultAmmoStore);
 }
 
+//Save current weapons set.
 void SelWeaponWidget::save()
 {
+    //The save() function is called by ANY change of the combo box.
+    //If an entry is deleted, this code would just re-add the deleted
+    //item. We use isDeleted to check if we are currently deleting to
+    //prevent this.
+    if (isDeleting)
+        return;
     // TODO make this return if success or not, so that the page can react
     // properly and not goBack if saving failed
-    if (m_name->text() == "") return;
+    if (m_name->text() == "")
+        return;
 
     QString state1;
     QString state2;
@@ -240,7 +248,7 @@
         wconf->remove(curWeaponsName);
     }
     wconf->setValue(m_name->text(), stateFull);
-    emit weaponsChanged();
+    emit weaponsEdited(curWeaponsName, m_name->text(), stateFull);
 }
 
 int SelWeaponWidget::operator [] (unsigned int weaponIndex) const
@@ -256,10 +264,11 @@
 
 void SelWeaponWidget::deleteWeaponsName()
 {
-    if (curWeaponsName == "") return;
+    QString delWeaponsName = curWeaponsName;
+    if (delWeaponsName == "") return;
 
     for(int i = 0; i < cDefaultAmmos.size(); i++)
-        if (!cDefaultAmmos[i].first.compare(m_name->text()))
+        if (!cDefaultAmmos[i].first.compare(delWeaponsName))
         {
             QMessageBox deniedMsg(this);
             deniedMsg.setIcon(QMessageBox::Warning);
@@ -273,19 +282,21 @@
     QMessageBox reallyDeleteMsg(this);
     reallyDeleteMsg.setIcon(QMessageBox::Question);
     reallyDeleteMsg.setWindowTitle(QMessageBox::tr("Weapons - Are you sure?"));
-    reallyDeleteMsg.setText(QMessageBox::tr("Do you really want to delete the weapon set '%1'?").arg(curWeaponsName));
+    reallyDeleteMsg.setText(QMessageBox::tr("Do you really want to delete the weapon set '%1'?").arg(delWeaponsName));
     reallyDeleteMsg.setWindowModality(Qt::WindowModal);
     reallyDeleteMsg.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);
 
     if (reallyDeleteMsg.exec() == QMessageBox::Ok)
     {
-        wconf->remove(curWeaponsName);
-        emit weaponsDeleted();
+        isDeleting = true;
+        wconf->remove(delWeaponsName);
+        emit weaponsDeleted(delWeaponsName);
     }
 }
 
 void SelWeaponWidget::newWeaponsName()
 {
+    save();
     QString newName = tr("New");
     if(wconf->contains(newName))
     {
@@ -294,6 +305,8 @@
         while(wconf->contains(newName = tr("New (%1)").arg(i++))) ;
     }
     setWeaponsName(newName);
+    wconf->setValue(newName, *cEmptyAmmoStore);
+    emit weaponsAdded(newName, *cEmptyAmmoStore);
 }
 
 void SelWeaponWidget::setWeaponsName(const QString& name)
@@ -312,6 +325,13 @@
     }
 }
 
+void SelWeaponWidget::switchWeapons(const QString& name)
+{
+    // Rescue old weapons set, then select new one
+    save();
+    setWeaponsName(name);
+}
+
 QStringList SelWeaponWidget::getWeaponNames() const
 {
     return wconf->allKeys();
@@ -319,6 +339,7 @@
 
 void SelWeaponWidget::copy()
 {
+    save();
     if(wconf->contains(curWeaponsName))
     {
         QString ammo = getWeaponsString(curWeaponsName);
@@ -331,6 +352,8 @@
         }
         setWeaponsName(newName);
         setWeapons(ammo);
+        wconf->setValue(newName, ammo);
+        emit weaponsAdded(newName, ammo);
     }
 }
 
@@ -352,3 +375,8 @@
 
     return sl.join(QString());
 }
+
+void SelWeaponWidget::deletionDone()
+{
+    isDeleting = false;
+}