summaryrefslogtreecommitdiffstats
path: root/qmake/generators/symbian/symbiancommon.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qmake/generators/symbian/symbiancommon.cpp')
-rw-r--r--qmake/generators/symbian/symbiancommon.cpp77
1 files changed, 67 insertions, 10 deletions
diff --git a/qmake/generators/symbian/symbiancommon.cpp b/qmake/generators/symbian/symbiancommon.cpp
index b85f711..1de4b65 100644
--- a/qmake/generators/symbian/symbiancommon.cpp
+++ b/qmake/generators/symbian/symbiancommon.cpp
@@ -51,6 +51,12 @@
#define RSS_RULES_BASE "RSS_RULES."
#define RSS_TAG_NBROFICONS "number_of_icons"
#define RSS_TAG_ICONFILE "icon_file"
+#define RSS_TAG_HEADER "header"
+#define RSS_TAG_SERVICE_LIST "service_list"
+#define RSS_TAG_FILE_OWNERSHIP_LIST "file_ownership_list"
+#define RSS_TAG_DATATYPE_LIST "datatype_list"
+#define RSS_TAG_FOOTER "footer"
+#define RSS_TAG_DEFAULT "default_rules" // Same as just giving rules without tag
#define MANUFACTURER_NOTE_FILE "manufacturer_note.txt"
#define DEFAULT_MANUFACTURER_NOTE \
@@ -421,7 +427,7 @@ QString SymbianCommonGenerator::removePathSeparators(QString &file)
return ret;
}
-void SymbianCommonGenerator::writeRegRssFile(QStringList &userItems)
+void SymbianCommonGenerator::writeRegRssFile(QMap<QString, QStringList> &userItems)
{
QString filename(fixedTarget);
filename.append("_reg.rss");
@@ -440,6 +446,8 @@ void SymbianCommonGenerator::writeRegRssFile(QStringList &userItems)
t << endl;
t << "#include <" << fixedTarget << ".rsg>" << endl;
t << "#include <appinfo.rh>" << endl;
+ foreach(QString item, userItems[RSS_TAG_HEADER])
+ t << item << endl;
t << endl;
t << "UID2 KUidAppRegistrationResourceFile" << endl;
t << "UID3 " << uid3 << endl << endl;
@@ -447,16 +455,51 @@ void SymbianCommonGenerator::writeRegRssFile(QStringList &userItems)
t << "\t{" << endl;
t << "\tapp_file=\"" << fixedTarget << "\";" << endl;
t << "\tlocalisable_resource_file=\"" RESOURCE_DIRECTORY_RESOURCE << fixedTarget << "\";" << endl;
+
+ writeRegRssList(t, userItems[RSS_TAG_SERVICE_LIST],
+ QLatin1String(RSS_TAG_SERVICE_LIST),
+ QLatin1String("SERVICE_INFO"));
+ writeRegRssList(t, userItems[RSS_TAG_FILE_OWNERSHIP_LIST],
+ QLatin1String(RSS_TAG_FILE_OWNERSHIP_LIST),
+ QLatin1String("FILE_OWNERSHIP_INFO"));
+ writeRegRssList(t, userItems[RSS_TAG_DATATYPE_LIST],
+ QLatin1String(RSS_TAG_DATATYPE_LIST),
+ QLatin1String("DATATYPE"));
t << endl;
- foreach(QString item, userItems)
- t << "\t" << item << endl;
+ foreach(QString item, userItems[RSS_TAG_DEFAULT])
+ t << "\t" << item.replace("\n","\n\t") << endl;
t << "\t}" << endl;
+
+ foreach(QString item, userItems[RSS_TAG_FOOTER])
+ t << item << endl;
} else {
PRINT_FILE_CREATE_ERROR(filename)
}
}
+void SymbianCommonGenerator::writeRegRssList(QTextStream &t,
+ QStringList &userList,
+ const QString &listTag,
+ const QString &listItem)
+{
+ int itemCount = userList.count();
+ if (itemCount) {
+ t << "\t" << listTag << " ="<< endl;
+ t << "\t\t{" << endl;
+ foreach(QString item, userList) {
+ t << "\t\t" << listItem << endl;
+ t << "\t\t\t{" << endl;
+ t << "\t\t\t" << item.replace("\n","\n\t\t\t") << endl;
+ t << "\t\t\t}";
+ if (--itemCount)
+ t << ",";
+ t << endl;
+ }
+ t << "\t\t}; "<< endl;
+ }
+}
+
void SymbianCommonGenerator::writeRssFile(QString &numberOfIcons, QString &iconFile)
{
QString filename(fixedTarget);
@@ -539,7 +582,9 @@ void SymbianCommonGenerator::writeLocFile(QStringList &symbianLangCodes)
}
}
-void SymbianCommonGenerator::readRssRules(QString &numberOfIcons, QString &iconFile, QStringList &userRssRules)
+void SymbianCommonGenerator::readRssRules(QString &numberOfIcons,
+ QString &iconFile, QMap<QString,
+ QStringList> &userRssRules)
{
QMakeProject *project = generator->project;
for (QMap<QString, QStringList>::iterator it = project->variables().begin(); it != project->variables().end(); ++it) {
@@ -552,14 +597,16 @@ void SymbianCommonGenerator::readRssRules(QString &numberOfIcons, QString &iconF
QStringList newValues;
QStringList values = it.value();
foreach(QString item, values) {
- // If there is no stringlist defined for a rule, use rule name directly
+ // If there is no stringlist defined for a rule, use rule value directly
// This is convenience for defining single line statements
if (project->values(item).isEmpty()) {
newValues << item;
} else {
+ QStringList itemList;
foreach(QString itemRow, project->values(item)) {
- newValues << itemRow;
+ itemList << itemRow;
}
+ newValues << itemList.join("\n");
}
}
// Verify thet there is exactly one value in RSS_TAG_NBROFICONS
@@ -580,6 +627,14 @@ void SymbianCommonGenerator::readRssRules(QString &numberOfIcons, QString &iconF
RSS_RULES_BASE, RSS_TAG_ICONFILE);
continue;
}
+ } else if (newKey == RSS_TAG_HEADER
+ || newKey == RSS_TAG_SERVICE_LIST
+ || newKey == RSS_TAG_FILE_OWNERSHIP_LIST
+ || newKey == RSS_TAG_DATATYPE_LIST
+ || newKey == RSS_TAG_FOOTER
+ || newKey == RSS_TAG_DEFAULT) {
+ userRssRules[newKey] = newValues;
+ continue;
} else {
fprintf(stderr, "Warning: Unsupported key:'%s%s'\n",
RSS_RULES_BASE, newKey.toLatin1().constData());
@@ -588,15 +643,17 @@ void SymbianCommonGenerator::readRssRules(QString &numberOfIcons, QString &iconF
}
}
+ QStringList newValues;
foreach(QString item, project->values(RSS_RULES)) {
- // If there is no stringlist defined for a rule, use rule name directly
- // This is convenience for defining single line mmp statements
+ // If there is no stringlist defined for a rule, use rule value directly
+ // This is convenience for defining single line statements
if (project->values(item).isEmpty()) {
- userRssRules << item;
+ newValues << item;
} else {
- userRssRules << project->values(item);
+ newValues << project->values(item);
}
}
+ userRssRules[RSS_TAG_DEFAULT] << newValues;
// Validate that either both RSS_TAG_NBROFICONS and RSS_TAG_ICONFILE keys exist
// or neither of them exist