QTfrontend/ui/widget/selectWeapon.cpp
branchios-develop
changeset 13418 ba39a1d396c0
parent 13325 b024cf25bde1
child 13560 43b72629d453
equal deleted inserted replaced
13416:6e8b807bda4b 13418:ba39a1d396c0
    19 
    19 
    20 #include "selectWeapon.h"
    20 #include "selectWeapon.h"
    21 #include "weaponItem.h"
    21 #include "weaponItem.h"
    22 #include "hwconsts.h"
    22 #include "hwconsts.h"
    23 
    23 
       
    24 #include <QDebug>
    24 #include <QPushButton>
    25 #include <QPushButton>
    25 #include <QGridLayout>
    26 #include <QGridLayout>
    26 #include <QHBoxLayout>
    27 #include <QHBoxLayout>
    27 #include <QLabel>
    28 #include <QLabel>
    28 #include <QBitmap>
    29 #include <QBitmap>
    82 
    83 
    83 SelWeaponWidget::SelWeaponWidget(int numItems, QWidget* parent) :
    84 SelWeaponWidget::SelWeaponWidget(int numItems, QWidget* parent) :
    84     QFrame(parent),
    85     QFrame(parent),
    85     m_numItems(numItems)
    86     m_numItems(numItems)
    86 {
    87 {
    87     wconf = new QSettings(cfgdir->absolutePath() + "/weapons.ini", QSettings::IniFormat, this);
    88     wconf = new QMap<QString, QString>();
    88 
       
    89     for(int i = 0; i < cDefaultAmmos.size(); ++i)
    89     for(int i = 0; i < cDefaultAmmos.size(); ++i)
    90         wconf->setValue(cDefaultAmmos[i].first, cDefaultAmmos[i].second);
    90     {
    91 
    91         wconf->insert(cDefaultAmmos[i].first, cDefaultAmmos[i].second);
    92     QStringList keys = wconf->allKeys();
    92     }
    93     for(int i = 0; i < keys.size(); i++)
    93 
    94     {
    94     if (!QDir(cfgdir->absolutePath() + "/Schemes").exists()) {
    95         if (wconf->value(keys[i]).toString().size() != cDefaultAmmoStore->size())
    95         QDir().mkdir(cfgdir->absolutePath() + "/Schemes");
    96             wconf->setValue(keys[i], fixWeaponSet(wconf->value(keys[i]).toString()));
    96     }
       
    97     if (!QDir(cfgdir->absolutePath() + "/Schemes/Ammo").exists()) {
       
    98         qDebug("No /Schemes/Ammo directory found. Trying to import weapon schemes from weapons.ini.");
       
    99         QDir().mkdir(cfgdir->absolutePath() + "/Schemes/Ammo");
       
   100 
       
   101         QSettings old_wconf(cfgdir->absolutePath() + "/weapons.ini", QSettings::IniFormat);
       
   102 
       
   103         QStringList defaultAmmos;
       
   104         for(int i = 0; i < cDefaultAmmos.size(); ++i)
       
   105         {
       
   106             defaultAmmos.append(cDefaultAmmos[i].first);
       
   107         }
       
   108 
       
   109         QStringList keys = old_wconf.allKeys();
       
   110         int imported = 0;
       
   111         for(int i = 0; i < keys.size(); i++)
       
   112         {
       
   113             if (!defaultAmmos.contains(keys[i])) {
       
   114                 wconf->insert(keys[i], fixWeaponSet(old_wconf.value(keys[i]).toString()));
       
   115                 QFile file(cfgdir->absolutePath() + "/Schemes/Ammo/" + keys[i] + ".hwa");
       
   116                 if (file.open(QIODevice::WriteOnly)) {
       
   117                     QTextStream stream( &file );
       
   118                     stream << old_wconf.value(keys[i]).toString() << endl;
       
   119                     file.close();
       
   120                 }
       
   121                 imported++;
       
   122             }
       
   123         }
       
   124         qDebug("%d weapon scheme(s) imported.", imported);
       
   125     } else {
       
   126         QStringList schemes = QDir(cfgdir->absolutePath() + "/Schemes/Ammo").entryList(QDir::Files);
       
   127 
       
   128         for(int i = 0; i < schemes.size(); i++)
       
   129         {
       
   130             QFile file(cfgdir->absolutePath() + "/Schemes/Ammo/" + schemes[i]);
       
   131             QString config;
       
   132             if (file.open(QIODevice::ReadOnly)) {
       
   133                 QTextStream stream( &file );
       
   134                 stream >> config;
       
   135                 file.close();
       
   136             }
       
   137 
       
   138             // Chop off file name suffix
       
   139             QString schemeName = schemes[i];
       
   140             if (schemeName.endsWith(".hwa", Qt::CaseInsensitive)) {
       
   141                 schemeName.chop(4);
       
   142             }
       
   143             wconf->insert(schemeName, fixWeaponSet(config));
       
   144         }
    97     }
   145     }
    98 
   146 
    99     QString currentState = *cDefaultAmmoStore;
   147     QString currentState = *cDefaultAmmoStore;
   100 
   148 
   101     QTabWidget * tbw = new QTabWidget(this);
   149     QTabWidget * tbw = new QTabWidget(this);
   157 
   205 
   158 void SelWeaponWidget::setWeapons(const QString& ammo)
   206 void SelWeaponWidget::setWeapons(const QString& ammo)
   159 {
   207 {
   160     bool enable = true;
   208     bool enable = true;
   161     for(int i = 0; i < cDefaultAmmos.size(); i++)
   209     for(int i = 0; i < cDefaultAmmos.size(); i++)
       
   210     {
   162         if (!cDefaultAmmos[i].first.compare(m_name->text()))
   211         if (!cDefaultAmmos[i].first.compare(m_name->text()))
   163         {
   212         {
   164             enable = false;
   213             enable = false;
   165         }
   214             break;
       
   215         }
       
   216     }
   166     for(int i = 0; i < m_numItems; ++i)
   217     for(int i = 0; i < m_numItems; ++i)
   167     {
   218     {
   168         twi::iterator it = weaponItems.find(i);
   219         twi::iterator it = weaponItems.find(i);
   169         if (it == weaponItems.end()) continue;
   220         if (it == weaponItems.end()) continue;
   170         it.value()[0]->setItemsNum(ammo[i].digitValue());
   221         it.value()[0]->setItemsNum(ammo[i].digitValue());
   180 }
   231 }
   181 
   232 
   182 void SelWeaponWidget::setDefault()
   233 void SelWeaponWidget::setDefault()
   183 {
   234 {
   184     for(int i = 0; i < cDefaultAmmos.size(); i++)
   235     for(int i = 0; i < cDefaultAmmos.size(); i++)
       
   236     {
   185         if (!cDefaultAmmos[i].first.compare(m_name->text()))
   237         if (!cDefaultAmmos[i].first.compare(m_name->text()))
   186         {
   238         {
   187             return;
   239             return;
   188         }
   240         }
       
   241     }
   189     setWeapons(*cDefaultAmmoStore);
   242     setWeapons(*cDefaultAmmoStore);
   190 }
   243 }
   191 
   244 
   192 //Save current weapons set.
   245 //Save current weapons set.
   193 void SelWeaponWidget::save()
   246 void SelWeaponWidget::save()
   248     if (curWeaponsName != "")
   301     if (curWeaponsName != "")
   249     {
   302     {
   250         // remove old entry
   303         // remove old entry
   251         wconf->remove(curWeaponsName);
   304         wconf->remove(curWeaponsName);
   252     }
   305     }
   253     wconf->setValue(m_name->text(), stateFull);
   306     wconf->insert(m_name->text(), stateFull);
       
   307     QFile file(cfgdir->absolutePath() + "/Schemes/Ammo/" + m_name->text()+ ".hwa");
       
   308     if (file.open(QIODevice::WriteOnly)) {
       
   309         QTextStream stream( &file );
       
   310         stream << stateFull << endl;
       
   311         file.close();
       
   312     }
   254     emit weaponsEdited(curWeaponsName, m_name->text(), stateFull);
   313     emit weaponsEdited(curWeaponsName, m_name->text(), stateFull);
   255 }
   314 }
   256 
   315 
   257 int SelWeaponWidget::operator [] (unsigned int weaponIndex) const
   316 int SelWeaponWidget::operator [] (unsigned int weaponIndex) const
   258 {
   317 {
   260     return it == weaponItems.end() ? 9 : it.value()[0]->getItemsNum();
   319     return it == weaponItems.end() ? 9 : it.value()[0]->getItemsNum();
   261 }
   320 }
   262 
   321 
   263 QString SelWeaponWidget::getWeaponsString(const QString& name) const
   322 QString SelWeaponWidget::getWeaponsString(const QString& name) const
   264 {
   323 {
   265     return wconf->value(name).toString();
   324     return wconf->find(name).value();
   266 }
   325 }
   267 
   326 
   268 void SelWeaponWidget::deleteWeaponsName()
   327 void SelWeaponWidget::deleteWeaponsName()
   269 {
   328 {
   270     QString delWeaponsName = curWeaponsName;
   329     QString delWeaponsName = curWeaponsName;
   271     if (delWeaponsName == "") return;
   330     if (delWeaponsName == "") return;
   272 
   331 
   273     for(int i = 0; i < cDefaultAmmos.size(); i++)
   332     for(int i = 0; i < cDefaultAmmos.size(); i++)
       
   333     {
   274         if (!cDefaultAmmos[i].first.compare(delWeaponsName))
   334         if (!cDefaultAmmos[i].first.compare(delWeaponsName))
   275         {
   335         {
   276             QMessageBox deniedMsg(this);
   336             QMessageBox deniedMsg(this);
   277             deniedMsg.setIcon(QMessageBox::Warning);
   337             deniedMsg.setIcon(QMessageBox::Warning);
   278             deniedMsg.setWindowTitle(QMessageBox::tr("Weapons - Warning"));
   338             deniedMsg.setWindowTitle(QMessageBox::tr("Weapons - Warning"));
   279             deniedMsg.setText(QMessageBox::tr("Cannot delete default weapon set '%1'!").arg(cDefaultAmmos[i].first));
   339             deniedMsg.setText(QMessageBox::tr("Cannot delete default weapon set '%1'!").arg(cDefaultAmmos[i].first));
   280             deniedMsg.setWindowModality(Qt::WindowModal);
   340             deniedMsg.setWindowModality(Qt::WindowModal);
   281             deniedMsg.exec();
   341             deniedMsg.exec();
   282             return;
   342             return;
   283         }
   343         }
       
   344     }
   284 
   345 
   285     QMessageBox reallyDeleteMsg(this);
   346     QMessageBox reallyDeleteMsg(this);
   286     reallyDeleteMsg.setIcon(QMessageBox::Question);
   347     reallyDeleteMsg.setIcon(QMessageBox::Question);
   287     reallyDeleteMsg.setWindowTitle(QMessageBox::tr("Weapons - Are you sure?"));
   348     reallyDeleteMsg.setWindowTitle(QMessageBox::tr("Weapons - Are you sure?"));
   288     reallyDeleteMsg.setText(QMessageBox::tr("Do you really want to delete the weapon set '%1'?").arg(delWeaponsName));
   349     reallyDeleteMsg.setText(QMessageBox::tr("Do you really want to delete the weapon set '%1'?").arg(delWeaponsName));
   291 
   352 
   292     if (reallyDeleteMsg.exec() == QMessageBox::Ok)
   353     if (reallyDeleteMsg.exec() == QMessageBox::Ok)
   293     {
   354     {
   294         isDeleting = true;
   355         isDeleting = true;
   295         wconf->remove(delWeaponsName);
   356         wconf->remove(delWeaponsName);
       
   357         QFile(cfgdir->absolutePath() + "/Schemes/Ammo/" + curWeaponsName + ".hwa").remove();
   296         emit weaponsDeleted(delWeaponsName);
   358         emit weaponsDeleted(delWeaponsName);
   297     }
   359     }
   298 }
   360 }
   299 
   361 
   300 void SelWeaponWidget::newWeaponsName()
   362 void SelWeaponWidget::newWeaponsName()
   306         //name already used -> look for an appropriate name:
   368         //name already used -> look for an appropriate name:
   307         int i=2;
   369         int i=2;
   308         while(wconf->contains(newName = tr("New (%1)").arg(i++))) ;
   370         while(wconf->contains(newName = tr("New (%1)").arg(i++))) ;
   309     }
   371     }
   310     setWeaponsName(newName);
   372     setWeaponsName(newName);
   311     wconf->setValue(newName, *cEmptyAmmoStore);
   373     wconf->insert(newName, *cEmptyAmmoStore);
   312     emit weaponsAdded(newName, *cEmptyAmmoStore);
   374     emit weaponsAdded(newName, *cEmptyAmmoStore);
   313 }
   375 }
   314 
   376 
   315 void SelWeaponWidget::setWeaponsName(const QString& name)
   377 void SelWeaponWidget::setWeaponsName(const QString& name)
   316 {
   378 {
   318 
   380 
   319     curWeaponsName = name;
   381     curWeaponsName = name;
   320 
   382 
   321     if(name != "" && wconf->contains(name))
   383     if(name != "" && wconf->contains(name))
   322     {
   384     {
   323         setWeapons(wconf->value(name).toString());
   385         setWeapons(wconf->find(name).value());
   324     }
   386     }
   325     else
   387     else
   326     {
   388     {
   327         setWeapons(*cEmptyAmmoStore);
   389         setWeapons(*cEmptyAmmoStore);
   328     }
   390     }
   335     setWeaponsName(name);
   397     setWeaponsName(name);
   336 }
   398 }
   337 
   399 
   338 QStringList SelWeaponWidget::getWeaponNames() const
   400 QStringList SelWeaponWidget::getWeaponNames() const
   339 {
   401 {
   340     return wconf->allKeys();
   402     return wconf->keys();
   341 }
   403 }
   342 
   404 
   343 void SelWeaponWidget::copy()
   405 void SelWeaponWidget::copy()
   344 {
   406 {
   345     save();
   407     save();
   353             int i=2;
   415             int i=2;
   354             while(wconf->contains(newName = tr("Copy of %1 (%2)").arg(curWeaponsName).arg(i++)));
   416             while(wconf->contains(newName = tr("Copy of %1 (%2)").arg(curWeaponsName).arg(i++)));
   355         }
   417         }
   356         setWeaponsName(newName);
   418         setWeaponsName(newName);
   357         setWeapons(ammo);
   419         setWeapons(ammo);
   358         wconf->setValue(newName, ammo);
   420         wconf->insert(newName, ammo);
   359         emit weaponsAdded(newName, ammo);
   421         emit weaponsAdded(newName, ammo);
   360     }
   422     }
   361 }
   423 }
   362 
   424 
   363 QString SelWeaponWidget::fixWeaponSet(const QString &s)
   425 QString SelWeaponWidget::fixWeaponSet(const QString &s)
   372             << s.mid(thisSetLength * 2, thisSetLength)
   434             << s.mid(thisSetLength * 2, thisSetLength)
   373             << s.right(thisSetLength)
   435             << s.right(thisSetLength)
   374                ;
   436                ;
   375 
   437 
   376     for(int i = sl.length() - 1; i >= 0; --i)
   438     for(int i = sl.length() - 1; i >= 0; --i)
       
   439     {
   377         sl[i] = sl[i].leftJustified(neededLength, '0', true);
   440         sl[i] = sl[i].leftJustified(neededLength, '0', true);
       
   441     }
   378 
   442 
   379     return sl.join(QString());
   443     return sl.join(QString());
   380 }
   444 }
   381 
   445 
   382 void SelWeaponWidget::deletionDone()
   446 void SelWeaponWidget::deletionDone()