QTfrontend/ui/widget/selectWeapon.cpp
changeset 13314 fe85ba81b01b
parent 13196 f93658732448
child 13315 3546bb36c8fb
equal deleted inserted replaced
13313:93780a3b846a 13314:fe85ba81b01b
    83 
    83 
    84 SelWeaponWidget::SelWeaponWidget(int numItems, QWidget* parent) :
    84 SelWeaponWidget::SelWeaponWidget(int numItems, QWidget* parent) :
    85     QFrame(parent),
    85     QFrame(parent),
    86     m_numItems(numItems)
    86     m_numItems(numItems)
    87 {
    87 {
       
    88     wconf = new QMap<QString, QString>();
       
    89     for(int i = 0; i < cDefaultAmmos.size(); ++i)
       
    90         wconf->insert(cDefaultAmmos[i].first, cDefaultAmmos[i].second);
       
    91 
    88     if (!QDir(cfgdir->absolutePath() + "/Schemes").exists()) {
    92     if (!QDir(cfgdir->absolutePath() + "/Schemes").exists()) {
    89         QDir().mkdir(cfgdir->absolutePath() + "/Schemes");
    93         QDir().mkdir(cfgdir->absolutePath() + "/Schemes");
    90     }
    94     }
    91     if (!QDir(cfgdir->absolutePath() + "/Schemes/Ammo").exists()) {
    95     if (!QDir(cfgdir->absolutePath() + "/Schemes/Ammo").exists()) {
    92         qDebug("No /Schemes/Ammo directory found. Trying to import weapon schemes from weapons.ini.");
    96         qDebug("No /Schemes/Ammo directory found. Trying to import weapon schemes from weapons.ini.");
    93         QDir().mkdir(cfgdir->absolutePath() + "/Schemes/Ammo");
    97         QDir().mkdir(cfgdir->absolutePath() + "/Schemes/Ammo");
    94         wconf = new QSettings("Hedgewars", "Hedgewars");
    98 
    95         wconf->clear();
       
    96         QSettings old_wconf(cfgdir->absolutePath() + "/weapons.ini", QSettings::IniFormat);
    99         QSettings old_wconf(cfgdir->absolutePath() + "/weapons.ini", QSettings::IniFormat);
    97 
   100 
    98         QStringList defaultAmmos;
   101         QStringList defaultAmmos;
    99         for(int i = 0; i < cDefaultAmmos.size(); ++i) {
   102         for(int i = 0; i < cDefaultAmmos.size(); ++i) 
   100             wconf->setValue(cDefaultAmmos[i].first, cDefaultAmmos[i].second);
   103             defaultAmmos.append(cDefaultAmmos[i].first);        
   101             defaultAmmos.append(cDefaultAmmos[i].first);
       
   102         }
       
   103 
   104 
   104         QStringList keys = old_wconf.allKeys();
   105         QStringList keys = old_wconf.allKeys();
   105         int imported = 0;
   106         int imported = 0;
   106         for(int i = 0; i < keys.size(); i++)
   107         for(int i = 0; i < keys.size(); i++)
   107         {
   108         {
   108             if (!defaultAmmos.contains(keys[i])) {
   109             if (!defaultAmmos.contains(keys[i])) {
   109                 wconf->setValue(keys[i], fixWeaponSet(old_wconf.value(keys[i]).toString()));
   110                 wconf->insert(keys[i], fixWeaponSet(old_wconf.value(keys[i]).toString()));
   110                 QFile file(cfgdir->absolutePath() + "/Schemes/Ammo/" + keys[i] + ".hwa");
   111                 QFile file(cfgdir->absolutePath() + "/Schemes/Ammo/" + keys[i] + ".hwa");
   111                 if (file.open(QIODevice::WriteOnly)) {
   112                 if (file.open(QIODevice::WriteOnly)) {
   112                     QTextStream stream( &file );
   113                     QTextStream stream( &file );
   113                     stream << old_wconf.value(keys[i]).toString() << endl;
   114                     stream << old_wconf.value(keys[i]).toString() << endl;
   114                     file.close();
   115                     file.close();
   115                 }
   116                 }
   116                 imported++;
   117                 imported++;
   117             }
   118             }
   118         }
   119         }
   119         qDebug("%d weapon scheme(s) imported.", imported);
   120         qDebug("%d weapon scheme(s) imported.", imported);
   120     } else {
   121     } else {        
   121         wconf = new QSettings("Hedgewars", "Hedgewars");
       
   122         wconf->clear();
       
   123 
       
   124         for(int i = 0; i < cDefaultAmmos.size(); ++i)
       
   125             wconf->setValue(cDefaultAmmos[i].first, cDefaultAmmos[i].second);
       
   126 
       
   127         QStringList schemes = QDir(cfgdir->absolutePath() + "/Schemes/Ammo").entryList();
   122         QStringList schemes = QDir(cfgdir->absolutePath() + "/Schemes/Ammo").entryList();
   128 
   123 
   129         for(int i = 0; i < schemes.size(); i++)
   124         for(int i = 0; i < schemes.size(); i++)
   130         {
   125         {
   131             if (schemes[i] == "." || schemes[i] == "..") continue;
   126             if (schemes[i] == "." || schemes[i] == "..") continue;
   141             // Chop off file name suffix
   136             // Chop off file name suffix
   142             QString schemeName = schemes[i];
   137             QString schemeName = schemes[i];
   143             if (schemeName.endsWith(".hwa", Qt::CaseInsensitive)) {
   138             if (schemeName.endsWith(".hwa", Qt::CaseInsensitive)) {
   144                 schemeName.chop(4);
   139                 schemeName.chop(4);
   145             }
   140             }
   146             wconf->setValue(schemeName, fixWeaponSet(config));
   141             wconf->insert(schemeName, fixWeaponSet(config));
   147         }
   142         }
   148     }
   143     }
   149 
   144 
   150     QString currentState = *cDefaultAmmoStore;
   145     QString currentState = *cDefaultAmmoStore;
   151 
   146 
   299     if (curWeaponsName != "")
   294     if (curWeaponsName != "")
   300     {
   295     {
   301         // remove old entry
   296         // remove old entry
   302         wconf->remove(curWeaponsName);
   297         wconf->remove(curWeaponsName);
   303     }
   298     }
   304     wconf->setValue(m_name->text(), stateFull);
   299     wconf->insert(m_name->text(), stateFull);
   305     QFile file(cfgdir->absolutePath() + "/Schemes/Ammo/" + m_name->text()+ ".hwa");
   300     QFile file(cfgdir->absolutePath() + "/Schemes/Ammo/" + m_name->text()+ ".hwa");
   306     if (file.open(QIODevice::WriteOnly)) {
   301     if (file.open(QIODevice::WriteOnly)) {
   307         QTextStream stream( &file );
   302         QTextStream stream( &file );
   308         stream << stateFull << endl;
   303         stream << stateFull << endl;
   309         file.close();
   304         file.close();
   317     return it == weaponItems.end() ? 9 : it.value()[0]->getItemsNum();
   312     return it == weaponItems.end() ? 9 : it.value()[0]->getItemsNum();
   318 }
   313 }
   319 
   314 
   320 QString SelWeaponWidget::getWeaponsString(const QString& name) const
   315 QString SelWeaponWidget::getWeaponsString(const QString& name) const
   321 {
   316 {
   322     return wconf->value(name).toString();
   317     return wconf->find(name).value();
   323 }
   318 }
   324 
   319 
   325 void SelWeaponWidget::deleteWeaponsName()
   320 void SelWeaponWidget::deleteWeaponsName()
   326 {
   321 {
   327     QString delWeaponsName = curWeaponsName;
   322     QString delWeaponsName = curWeaponsName;
   364         //name already used -> look for an appropriate name:
   359         //name already used -> look for an appropriate name:
   365         int i=2;
   360         int i=2;
   366         while(wconf->contains(newName = tr("New (%1)").arg(i++))) ;
   361         while(wconf->contains(newName = tr("New (%1)").arg(i++))) ;
   367     }
   362     }
   368     setWeaponsName(newName);
   363     setWeaponsName(newName);
   369     wconf->setValue(newName, *cEmptyAmmoStore);
   364     wconf->insert(newName, *cEmptyAmmoStore);
   370     emit weaponsAdded(newName, *cEmptyAmmoStore);
   365     emit weaponsAdded(newName, *cEmptyAmmoStore);
   371 }
   366 }
   372 
   367 
   373 void SelWeaponWidget::setWeaponsName(const QString& name)
   368 void SelWeaponWidget::setWeaponsName(const QString& name)
   374 {
   369 {
   376 
   371 
   377     curWeaponsName = name;
   372     curWeaponsName = name;
   378 
   373 
   379     if(name != "" && wconf->contains(name))
   374     if(name != "" && wconf->contains(name))
   380     {
   375     {
   381         setWeapons(wconf->value(name).toString());
   376         setWeapons(wconf->find(name).value());
   382     }
   377     }
   383     else
   378     else
   384     {
   379     {
   385         setWeapons(*cEmptyAmmoStore);
   380         setWeapons(*cEmptyAmmoStore);
   386     }
   381     }
   393     setWeaponsName(name);
   388     setWeaponsName(name);
   394 }
   389 }
   395 
   390 
   396 QStringList SelWeaponWidget::getWeaponNames() const
   391 QStringList SelWeaponWidget::getWeaponNames() const
   397 {
   392 {
   398     return wconf->allKeys();
   393     return wconf->keys();
   399 }
   394 }
   400 
   395 
   401 void SelWeaponWidget::copy()
   396 void SelWeaponWidget::copy()
   402 {
   397 {
   403     save();
   398     save();
   411             int i=2;
   406             int i=2;
   412             while(wconf->contains(newName = tr("Copy of %1 (%2)").arg(curWeaponsName).arg(i++)));
   407             while(wconf->contains(newName = tr("Copy of %1 (%2)").arg(curWeaponsName).arg(i++)));
   413         }
   408         }
   414         setWeaponsName(newName);
   409         setWeaponsName(newName);
   415         setWeapons(ammo);
   410         setWeapons(ammo);
   416         wconf->setValue(newName, ammo);
   411         wconf->insert(newName, ammo);
   417         emit weaponsAdded(newName, ammo);
   412         emit weaponsAdded(newName, ammo);
   418     }
   413     }
   419 }
   414 }
   420 
   415 
   421 QString SelWeaponWidget::fixWeaponSet(const QString &s)
   416 QString SelWeaponWidget::fixWeaponSet(const QString &s)