QTfrontend/model/ammoSchemeModel.cpp
changeset 13196 f93658732448
parent 13195 7d9462d49d4c
equal deleted inserted replaced
13195:7d9462d49d4c 13196:f93658732448
    16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
    17  */
    17  */
    18 
    18 
    19 #include <QDebug>
    19 #include <QDebug>
    20 #include <QModelIndex>
    20 #include <QModelIndex>
       
    21 #include <QFile>
       
    22 #include <QTextStream>
       
    23 #include <QHash>
    21 
    24 
    22 #include "ammoSchemeModel.h"
    25 #include "ammoSchemeModel.h"
    23 #include "hwconsts.h"
    26 #include "hwconsts.h"
    24 
    27 
    25 QList<QVariant> defaultScheme = QList<QVariant>()
    28 QList<QVariant> defaultScheme = QList<QVariant>()
    90                          ;
    93                          ;
    91 
    94 
    92     numberOfDefaultSchemes = predefSchemesNames.size();
    95     numberOfDefaultSchemes = predefSchemesNames.size();
    93 
    96 
    94     spNames = QStringList()
    97     spNames = QStringList()
    95               << "name"                //  0
    98               << "name"                //  0 | Name should be first forever
    96               << "fortsmode"           //  1
    99               << "fortsmode"           //  1
    97               << "divteams"            //  2
   100               << "divteams"            //  2
    98               << "solidland"           //  3
   101               << "solidland"           //  3
    99               << "border"              //  4
   102               << "border"              //  4
   100               << "lowgrav"             //  5
   103               << "lowgrav"             //  5
   745         for (int i = 0; i < size; ++i)
   748         for (int i = 0; i < size; ++i)
   746         {
   749         {
   747             fileConfig.setArrayIndex(i);
   750             fileConfig.setArrayIndex(i);
   748 
   751 
   749             QString schemeName = fileConfig.value(spNames[0]).toString();
   752             QString schemeName = fileConfig.value(spNames[0]).toString();
   750             if (!predefSchemesNames.contains(schemeName))
   753             if (!schemeName.isNull() && !predefSchemesNames.contains(schemeName))
   751             {
   754             {
   752                 QList<QVariant> scheme;
   755                 QList<QVariant> scheme;
   753                 QSettings file(directory + "/" + schemeName + ".hwg", QSettings::IniFormat);
   756                 QFile file(directory + "/" + schemeName + ".hwg");
   754 
   757 
   755                 for (int k = 0; k < spNames.size(); ++k) {
   758                 // Add keys to scheme info and create file
   756                     scheme << fileConfig.value(spNames[k], defaultScheme[k]);
   759                 if (file.open(QIODevice::WriteOnly)) {
   757                     file.setValue(spNames[k], fileConfig.value(spNames[k], defaultScheme[k]));
   760                     QTextStream stream(&file);
       
   761 
       
   762                     for (int k = 0; k < spNames.size(); ++k) {
       
   763                         scheme << fileConfig.value(spNames[k], defaultScheme[k]);
       
   764 
       
   765                         // File handling
       
   766                         // We skip the name key (k==0), it is not stored redundantly in file.
       
   767                         // The file name is used for that already.
       
   768                         if(k != 0) {
       
   769                             // The file is just a list of key=value pairs
       
   770                             stream << spNames[k] << "=" << fileConfig.value(spNames[k], defaultScheme[k]).toString();
       
   771                             stream << endl;
       
   772                         }
       
   773                     }
       
   774                     file.close();
   758                 }
   775                 }
   759                 file.sync();
       
   760                 imported++;
   776                 imported++;
   761 
   777 
   762                 schemes.append(scheme);
   778                 schemes.append(scheme);
   763             }
   779             }
   764         }
   780         }
   765         qDebug("%d game scheme(s) imported.", imported);
   781         qDebug("%d game scheme(s) imported.", imported);
   766         fileConfig.endArray();
   782         fileConfig.endArray();
   767     } else {
   783     } else {
   768         QStringList scheme_dir = QDir(directory).entryList();
   784         QStringList scheme_dir = QDir(directory).entryList(QDir::Files);
   769 
   785 
   770         for(int i = 0; i < scheme_dir.size(); i++)
   786         for(int i = 0; i < scheme_dir.size(); i++)
   771         {
   787         {
   772             if (scheme_dir[i] == "." || scheme_dir[i] == "..") continue;
       
   773             QList<QVariant> scheme;
   788             QList<QVariant> scheme;
   774             QSettings file(directory + "/" + scheme_dir[i], QSettings::IniFormat);
   789             QFile file(directory + "/" + scheme_dir[i]);
   775 
   790 
   776             for (int k = 0; k < spNames.size(); ++k)
   791             // Chop off file name suffix
   777                 scheme << file.value(spNames[k], defaultScheme[k]);
   792             QString schemeName = scheme_dir[i];
   778 
   793             if (schemeName.endsWith(".hwg", Qt::CaseInsensitive)) {
   779             schemes.append(scheme);
   794                 schemeName.chop(4);
       
   795             }
       
   796             // Parse game scheme file
       
   797             if (file.open(QIODevice::ReadOnly)) {
       
   798                 QTextStream stream(&file);
       
   799                 QString line, key, value;
       
   800                 QHash<QString, QString> fileKeyValues;
       
   801                 do {
       
   802                     // Read line and get key and value
       
   803                     line = stream.readLine();
       
   804                     key = line.section(QChar('='), 0, 0);
       
   805                     value = line.section(QChar('='), 1);
       
   806                     if(!key.isNull() && !value.isNull()) {
       
   807                         fileKeyValues[key] = value;
       
   808                     }
       
   809                 } while (!line.isNull());
       
   810 
       
   811                 // Add scheme name manually
       
   812                 scheme << schemeName;
       
   813                 // Add other keys from the QHash.
       
   814                 for (int k = 1; k < spNames.size(); ++k) {
       
   815                     key = spNames[k];
       
   816                     if (fileKeyValues.contains(key)) {
       
   817                         scheme << fileKeyValues.value(key);
       
   818                     } else {
       
   819                         // Use default value in case the key is not set
       
   820                         scheme << defaultScheme[k];
       
   821                     }
       
   822                 }
       
   823                 schemes.append(scheme);
       
   824 
       
   825                 file.close();
       
   826             }
   780         }
   827         }
   781     }
   828     }
   782 }
   829 }
   783 
   830 
   784 QVariant AmmoSchemeModel::headerData(int section, Qt::Orientation orientation, int role) const
   831 QVariant AmmoSchemeModel::headerData(int section, Qt::Orientation orientation, int role) const
   918     fileConfig.beginWriteArray("schemes");
   965     fileConfig.beginWriteArray("schemes");
   919     for (int i = 0; i < schemes.size() - numberOfDefaultSchemes; ++i)
   966     for (int i = 0; i < schemes.size() - numberOfDefaultSchemes; ++i)
   920     {
   967     {
   921         QList<QVariant> scheme = schemes[i + numberOfDefaultSchemes];
   968         QList<QVariant> scheme = schemes[i + numberOfDefaultSchemes];
   922         int j = spNames.indexOf("name");
   969         int j = spNames.indexOf("name");
   923         QSettings file(cfgdir->absolutePath() + "/Schemes/Game/" + scheme[j].toString() + ".hwg", QSettings::IniFormat);
   970 
   924 
   971         QString schemeName = scheme[j].toString();
   925         for (int k = 0; k < scheme.size(); ++k)
   972         QFile file(cfgdir->absolutePath() + "/Schemes/Game/" + schemeName + ".hwg");
   926             file.setValue(spNames[k], scheme[k]);
   973 
   927 
   974         if (file.open(QIODevice::WriteOnly)) {
   928         file.sync();
   975             QTextStream stream(&file);
       
   976             for (int k = 0; k < spNames.size(); ++k) {
       
   977                 // We skip the name key
       
   978                 if(k != j) {
       
   979                     // The file is just a list of key=value pairs
       
   980                     stream << spNames[k] << "=" << scheme[k].toString();
       
   981                     stream << endl;
       
   982                 }
       
   983             }
       
   984             file.close();
       
   985         }
   929     }
   986     }
   930     fileConfig.endArray();
   987     fileConfig.endArray();
   931 }
   988 }
   932 
   989 
   933 
   990