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 |