summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorCasper van Donderen <casper.vandonderen@nokia.com>2011-08-31 07:37:17 (GMT)
committerCasper van Donderen <casper.vandonderen@nokia.com>2011-08-31 07:37:17 (GMT)
commit76d680844382ea24d40caaf9e0349e7b5af69ada (patch)
tree624744baeccc3948b4583d812d77bce4a0879110 /tools
parent5cd6323211aac99599f38a6c7363ae52b2b5bd02 (diff)
parentd448205c2e7ae31ae0814696c2c1d38ff56385bd (diff)
downloadQt-76d680844382ea24d40caaf9e0349e7b5af69ada.zip
Qt-76d680844382ea24d40caaf9e0349e7b5af69ada.tar.gz
Qt-76d680844382ea24d40caaf9e0349e7b5af69ada.tar.bz2
Merge remote branch 'qt-doc-review/master'
Conflicts: doc/src/declarative/righttoleft.qdoc tools/qdoc3/generator.h
Diffstat (limited to 'tools')
-rw-r--r--tools/qdoc3/cppcodemarker.cpp2
-rw-r--r--tools/qdoc3/cppcodeparser.cpp4
-rw-r--r--tools/qdoc3/ditaxmlgenerator.cpp64
-rw-r--r--tools/qdoc3/ditaxmlgenerator.h11
-rw-r--r--tools/qdoc3/doc.cpp2
-rw-r--r--tools/qdoc3/generator.cpp142
-rw-r--r--tools/qdoc3/generator.h6
-rw-r--r--tools/qdoc3/htmlgenerator.cpp84
-rw-r--r--tools/qdoc3/htmlgenerator.h11
-rw-r--r--tools/qdoc3/node.cpp13
-rw-r--r--tools/qdoc3/node.h2
-rw-r--r--tools/runonphone/main.cpp32
12 files changed, 185 insertions, 188 deletions
diff --git a/tools/qdoc3/cppcodemarker.cpp b/tools/qdoc3/cppcodemarker.cpp
index f3ec6fd..0fc30bc 100644
--- a/tools/qdoc3/cppcodemarker.cpp
+++ b/tools/qdoc3/cppcodemarker.cpp
@@ -957,7 +957,7 @@ QString CppCodeMarker::addMarkUp(const QString &in,
ident += ch;
finish = i;
readChar();
- } while (ch >= 0 && isalnum(ch) || ch == '_');
+ } while (isalnum(ch) || ch == '_');
if (classRegExp.exactMatch(ident)) {
tag = QLatin1String("type");
diff --git a/tools/qdoc3/cppcodeparser.cpp b/tools/qdoc3/cppcodeparser.cpp
index 5efbcfd..1a4c344 100644
--- a/tools/qdoc3/cppcodeparser.cpp
+++ b/tools/qdoc3/cppcodeparser.cpp
@@ -2349,8 +2349,8 @@ void CppCodeParser::createExampleFileNodes(FakeNode *fake)
proFileName,
userFriendlyFilePath);
if (fullPath.isEmpty()) {
- fake->doc().location().warning(
- tr("Cannot find file '%1' or '%2'").arg(tmp).arg(proFileName));
+ fake->doc().location().warning(tr("Cannot find file '%1' or '%2'").arg(tmp).arg(proFileName));
+ fake->doc().location().warning(tr("EXAMPLE PATH DOES NOT EXIST: %1").arg(examplePath));
return;
}
}
diff --git a/tools/qdoc3/ditaxmlgenerator.cpp b/tools/qdoc3/ditaxmlgenerator.cpp
index ff58733..4393e8d 100644
--- a/tools/qdoc3/ditaxmlgenerator.cpp
+++ b/tools/qdoc3/ditaxmlgenerator.cpp
@@ -3954,6 +3954,70 @@ void DitaXmlGenerator::findAllClasses(const InnerNode* node)
}
}
+/*!
+ For generating the "New Classes... in 4.x" section on the
+ What's New in 4.x" page.
+ */
+void DitaXmlGenerator::findAllSince(const InnerNode* node)
+{
+ NodeList::const_iterator child = node->childNodes().constBegin();
+ while (child != node->childNodes().constEnd()) {
+ QString sinceVersion = (*child)->since();
+ if (((*child)->access() != Node::Private) && !sinceVersion.isEmpty()) {
+ NewSinceMaps::iterator nsmap = newSinceMaps.find(sinceVersion);
+ if (nsmap == newSinceMaps.end())
+ nsmap = newSinceMaps.insert(sinceVersion,NodeMultiMap());
+ NewClassMaps::iterator ncmap = newClassMaps.find(sinceVersion);
+ if (ncmap == newClassMaps.end())
+ ncmap = newClassMaps.insert(sinceVersion,NodeMap());
+ NewClassMaps::iterator nqcmap = newQmlClassMaps.find(sinceVersion);
+ if (nqcmap == newQmlClassMaps.end())
+ nqcmap = newQmlClassMaps.insert(sinceVersion,NodeMap());
+
+ if ((*child)->type() == Node::Function) {
+ FunctionNode *func = static_cast<FunctionNode *>(*child);
+ if ((func->status() > Node::Obsolete) &&
+ (func->metaness() != FunctionNode::Ctor) &&
+ (func->metaness() != FunctionNode::Dtor)) {
+ nsmap.value().insert(func->name(),(*child));
+ }
+ }
+ else if ((*child)->url().isEmpty()) {
+ if ((*child)->type() == Node::Class && !(*child)->doc().isEmpty()) {
+ QString className = (*child)->name();
+ if ((*child)->parent() &&
+ (*child)->parent()->type() == Node::Namespace &&
+ !(*child)->parent()->name().isEmpty())
+ className = (*child)->parent()->name()+"::"+className;
+ nsmap.value().insert(className,(*child));
+ ncmap.value().insert(className,(*child));
+ }
+ else if ((*child)->subType() == Node::QmlClass) {
+ QString className = (*child)->name();
+ if ((*child)->parent() &&
+ (*child)->parent()->type() == Node::Namespace &&
+ !(*child)->parent()->name().isEmpty())
+ className = (*child)->parent()->name()+"::"+className;
+ nsmap.value().insert(className,(*child));
+ nqcmap.value().insert(className,(*child));
+ }
+ }
+ else {
+ QString name = (*child)->name();
+ if ((*child)->parent() &&
+ (*child)->parent()->type() == Node::Namespace &&
+ !(*child)->parent()->name().isEmpty())
+ name = (*child)->parent()->name()+"::"+name;
+ nsmap.value().insert(name,(*child));
+ }
+ if ((*child)->isInnerNode()) {
+ findAllSince(static_cast<InnerNode *>(*child));
+ }
+ }
+ ++child;
+ }
+}
+
void DitaXmlGenerator::findAllFunctions(const InnerNode* node)
{
NodeList::ConstIterator c = node->childNodes().begin();
diff --git a/tools/qdoc3/ditaxmlgenerator.h b/tools/qdoc3/ditaxmlgenerator.h
index d8d3563..408f46c 100644
--- a/tools/qdoc3/ditaxmlgenerator.h
+++ b/tools/qdoc3/ditaxmlgenerator.h
@@ -51,6 +51,12 @@
QT_BEGIN_NAMESPACE
+typedef QMultiMap<QString, Node*> NodeMultiMap;
+typedef QMap<QString, NodeMultiMap> NewSinceMaps;
+typedef QMap<Node*, NodeMultiMap> ParentMaps;
+typedef QMap<QString, const Node*> NodeMap;
+typedef QMap<QString, NodeMap> NewClassMaps;
+
typedef QMap<QString, QString> GuidMap;
typedef QMap<QString, GuidMap*> GuidMaps;
@@ -412,6 +418,7 @@ class DitaXmlGenerator : public PageGenerator
void findAllFunctions(const InnerNode *node);
void findAllLegaleseTexts(const InnerNode *node);
void findAllNamespaces(const InnerNode *node);
+ void findAllSince(const InnerNode *node);
static int hOffset(const Node *node);
static bool isThreeColumnEnumValueTable(const Atom *atom);
virtual QString getLink(const Atom *atom,
@@ -508,6 +515,10 @@ class DitaXmlGenerator : public PageGenerator
#endif
QMap<QString, NodeMap > funcIndex;
QMap<Text, const Node*> legaleseTexts;
+ NewSinceMaps newSinceMaps;
+ static QString sinceTitles[];
+ NewClassMaps newClassMaps;
+ NewClassMaps newQmlClassMaps;
static int id;
static QString ditaTags[];
QStack<QXmlStreamWriter*> xmlWriterStack;
diff --git a/tools/qdoc3/doc.cpp b/tools/qdoc3/doc.cpp
index f1f1418..f0c4264 100644
--- a/tools/qdoc3/doc.cpp
+++ b/tools/qdoc3/doc.cpp
@@ -828,7 +828,7 @@ void DocParser::parse(const QString& source,
append(Atom::AnnotatedList, getArgument());
break;
case CMD_SINCELIST:
- append(Atom::SinceList, getRestOfLine().simplified());
+ append(Atom::SinceList, getArgument());
break;
case CMD_GENERATELIST:
append(Atom::GeneratedList, getArgument());
diff --git a/tools/qdoc3/generator.cpp b/tools/qdoc3/generator.cpp
index c20d2b4..3367301 100644
--- a/tools/qdoc3/generator.cpp
+++ b/tools/qdoc3/generator.cpp
@@ -77,25 +77,6 @@ QString Generator::outDir;
QString Generator::project;
QHash<QString, QString> Generator::outputPrefixes;
-QString Generator::sinceTitles[] =
- {
- " New Namespaces",
- " New Classes",
- " New Member Functions",
- " New Functions in Namespaces",
- " New Global Functions",
- " New Macros",
- " New Enum Types",
- " New Typedefs",
- " New Properties",
- " New Variables",
- " New QML Elements",
- " New QML Properties",
- " New QML Signals",
- " New QML Methods",
- ""
- };
-
static void singularPlural(Text& text, const NodeList& nodes)
{
if (nodes.count() == 1)
@@ -779,18 +760,8 @@ QString Generator::typeString(const Node *node)
case Node::Class:
return "class";
case Node::Fake:
- {
- switch (node->subType()) {
- case Node::QmlClass:
- return "element";
- case Node::QmlPropertyGroup:
- return "property group";
- case Node::QmlBasicType:
- return "type";
- default:
- return "documentation";
- }
- }
+ default:
+ return "documentation";
case Node::Enum:
return "enum";
case Node::Typedef:
@@ -799,8 +770,6 @@ QString Generator::typeString(const Node *node)
return "function";
case Node::Property:
return "property";
- default:
- return "documentation";
}
}
@@ -1122,21 +1091,11 @@ void Generator::generateSince(const Node *node, CodeMarker *marker)
text << " was introduced or modified in ";
else
text << " was introduced in ";
-
- QStringList since = node->since().split(" ");
- if (since.count() == 1) {
- // Handle legacy use of \since <version>.
- if (project.isEmpty())
- text << "version";
- else
- text << project;
- text << " " << since[0];
- } else {
- // Reconstruct the <project> <version> string.
- text << " " << since.join(" ");
- }
-
- text << "." << Atom::ParaRight;
+ if (project.isEmpty())
+ text << "version";
+ else
+ text << project;
+ text << " " << node->since() << "." << Atom::ParaRight;
generateText(text, node, marker);
}
}
@@ -1387,91 +1346,4 @@ QStringList Generator::getMetadataElements(const InnerNode* inner, const QString
return s;
}
-/*!
- For generating the "New Classes... in 4.6" section on the
- What's New in 4.6" page.
- */
-void Generator::findAllSince(const InnerNode *node)
-{
- NodeList::const_iterator child = node->childNodes().constBegin();
-
- // Traverse the tree, starting at the node supplied.
-
- while (child != node->childNodes().constEnd()) {
-
- QString sinceString = (*child)->since();
-
- if (((*child)->access() != Node::Private) && !sinceString.isEmpty()) {
-
- // Insert a new entry into each map for each new since string found.
- NewSinceMaps::iterator nsmap = newSinceMaps.find(sinceString);
- if (nsmap == newSinceMaps.end())
- nsmap = newSinceMaps.insert(sinceString,NodeMultiMap());
-
- NewClassMaps::iterator ncmap = newClassMaps.find(sinceString);
- if (ncmap == newClassMaps.end())
- ncmap = newClassMaps.insert(sinceString,NodeMap());
-
- NewClassMaps::iterator nqcmap = newQmlClassMaps.find(sinceString);
- if (nqcmap == newQmlClassMaps.end())
- nqcmap = newQmlClassMaps.insert(sinceString,NodeMap());
-
- if ((*child)->type() == Node::Function) {
- // Insert functions into the general since map.
- FunctionNode *func = static_cast<FunctionNode *>(*child);
- if ((func->status() > Node::Obsolete) &&
- (func->metaness() != FunctionNode::Ctor) &&
- (func->metaness() != FunctionNode::Dtor)) {
- nsmap.value().insert(func->name(),(*child));
- }
- }
- else if ((*child)->url().isEmpty()) {
- if ((*child)->type() == Node::Class && !(*child)->doc().isEmpty()) {
- // Insert classes into the since and class maps.
- QString className = (*child)->name();
- if ((*child)->parent() &&
- (*child)->parent()->type() == Node::Namespace &&
- !(*child)->parent()->name().isEmpty())
- className = (*child)->parent()->name()+"::"+className;
-
- nsmap.value().insert(className,(*child));
- ncmap.value().insert(className,(*child));
- }
- else if ((*child)->subType() == Node::QmlClass) {
- // Insert QML elements into the since and element maps.
- QString className = (*child)->name();
- if ((*child)->parent() &&
- (*child)->parent()->type() == Node::Namespace &&
- !(*child)->parent()->name().isEmpty())
- className = (*child)->parent()->name()+"::"+className;
-
- nsmap.value().insert(className,(*child));
- nqcmap.value().insert(className,(*child));
- }
- else if ((*child)->type() == Node::QmlProperty) {
- // Insert QML properties into the since map.
- QString propertyName = (*child)->name();
- nsmap.value().insert(propertyName,(*child));
- }
- }
- else {
- // Insert external documents into the general since map.
- QString name = (*child)->name();
- if ((*child)->parent() &&
- (*child)->parent()->type() == Node::Namespace &&
- !(*child)->parent()->name().isEmpty())
- name = (*child)->parent()->name()+"::"+name;
-
- nsmap.value().insert(name,(*child));
- }
-
- // Find child nodes with since commands.
- if ((*child)->isInnerNode()) {
- findAllSince(static_cast<InnerNode *>(*child));
- }
- }
- ++child;
- }
-}
-
QT_END_NAMESPACE
diff --git a/tools/qdoc3/generator.h b/tools/qdoc3/generator.h
index e66915b..bac7c61 100644
--- a/tools/qdoc3/generator.h
+++ b/tools/qdoc3/generator.h
@@ -158,7 +158,6 @@ class Generator
QString getMetadataElement(const InnerNode* inner, const QString& t);
QStringList getMetadataElements(const InnerNode* inner, const QString& t);
- void findAllSince(const InnerNode *node);
private:
void generateReimplementedFrom(const FunctionNode *func,
@@ -187,11 +186,6 @@ class Generator
const NodeList& subs,
CodeMarker *marker);
- static QString sinceTitles[];
- NewSinceMaps newSinceMaps;
- NewClassMaps newClassMaps;
- NewClassMaps newQmlClassMaps;
-
private:
QString amp;
QString lt;
diff --git a/tools/qdoc3/htmlgenerator.cpp b/tools/qdoc3/htmlgenerator.cpp
index a6ba981..e79e180 100644
--- a/tools/qdoc3/htmlgenerator.cpp
+++ b/tools/qdoc3/htmlgenerator.cpp
@@ -612,18 +612,14 @@ int HtmlGenerator::generateAtom(const Atom *atom,
ncmap = newClassMaps.find(atom->string());
NewClassMaps::const_iterator nqcmap;
nqcmap = newQmlClassMaps.find(atom->string());
-
if ((nsmap != newSinceMaps.constEnd()) && !nsmap.value().isEmpty()) {
QList<Section> sections;
QList<Section>::ConstIterator s;
-
for (int i=0; i<LastSinceType; ++i)
sections.append(Section(sinceTitle(i),QString(),QString(),QString()));
NodeMultiMap::const_iterator n = nsmap.value().constBegin();
-
while (n != nsmap.value().constEnd()) {
-
const Node* node = n.value();
switch (node->type()) {
case Node::Fake:
@@ -1365,7 +1361,6 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker)
// Generate brief text and status for modules.
generateBrief(fake, marker);
generateStatus(fake, marker);
- generateSince(fake, marker);
if (moduleNamespaceMap.contains(fake->name())) {
out() << "<a name=\"" << registerRef("namespaces") << "\"></a>" << divNavTop << "\n";
@@ -1382,7 +1377,6 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker)
// Generate brief text and status for modules.
generateBrief(fake, marker);
generateStatus(fake, marker);
- generateSince(fake, marker);
out() << "<ul>\n";
@@ -1414,7 +1408,6 @@ void HtmlGenerator::generateFakeNode(const FakeNode *fake, CodeMarker *marker)
generateQmlInherits(qml_cn, marker);
generateQmlInheritedBy(qml_cn, marker);
generateQmlInstantiates(qml_cn, marker);
- generateSince(qml_cn, marker);
QString allQmlMembersLink = generateAllQmlMembersFile(qml_cn, marker);
if (!allQmlMembersLink.isEmpty()) {
@@ -2265,6 +2258,9 @@ void HtmlGenerator::generateCompactList(const Node *relative,
for (int i=0; i<NumParagraphs; i++) // i = 0..36
paragraphOffset[i+1] = paragraphOffset[i] + paragraph[i].count();
+ int curParNr = 0;
+ int curParOffset = 0;
+
/*
Output the alphabet as a row of links.
*/
@@ -2282,12 +2278,8 @@ void HtmlGenerator::generateCompactList(const Node *relative,
Output a <div> element to contain all the <dl> elements.
*/
out() << "<div class=\"flowListDiv\">\n";
- numTableRows = 0;
- int curParNr = 0;
- int curParOffset = 0;
-
- for (int i=0; i<classMap.count(); i++) {
+ for (int i=0; i<classMap.count()-1; i++) {
while ((curParNr < NumParagraphs) &&
(curParOffset == paragraph[curParNr].count())) {
++curParNr;
@@ -2348,9 +2340,7 @@ void HtmlGenerator::generateCompactList(const Node *relative,
out() << "</dd>\n";
curParOffset++;
}
- if (classMap.count() > 0)
- out() << "</dl>\n";
-
+ out() << "</dl>\n";
out() << "</div>\n";
}
@@ -3383,6 +3373,70 @@ void HtmlGenerator::findAllClasses(const InnerNode *node)
}
}
+/*!
+ For generating the "New Classes... in 4.6" section on the
+ What's New in 4.6" page.
+ */
+void HtmlGenerator::findAllSince(const InnerNode *node)
+{
+ NodeList::const_iterator child = node->childNodes().constBegin();
+ while (child != node->childNodes().constEnd()) {
+ QString sinceVersion = (*child)->since();
+ if (((*child)->access() != Node::Private) && !sinceVersion.isEmpty()) {
+ NewSinceMaps::iterator nsmap = newSinceMaps.find(sinceVersion);
+ if (nsmap == newSinceMaps.end())
+ nsmap = newSinceMaps.insert(sinceVersion,NodeMultiMap());
+ NewClassMaps::iterator ncmap = newClassMaps.find(sinceVersion);
+ if (ncmap == newClassMaps.end())
+ ncmap = newClassMaps.insert(sinceVersion,NodeMap());
+ NewClassMaps::iterator nqcmap = newQmlClassMaps.find(sinceVersion);
+ if (nqcmap == newQmlClassMaps.end())
+ nqcmap = newQmlClassMaps.insert(sinceVersion,NodeMap());
+
+ if ((*child)->type() == Node::Function) {
+ FunctionNode *func = static_cast<FunctionNode *>(*child);
+ if ((func->status() > Node::Obsolete) &&
+ (func->metaness() != FunctionNode::Ctor) &&
+ (func->metaness() != FunctionNode::Dtor)) {
+ nsmap.value().insert(func->name(),(*child));
+ }
+ }
+ else if ((*child)->url().isEmpty()) {
+ if ((*child)->type() == Node::Class && !(*child)->doc().isEmpty()) {
+ QString className = (*child)->name();
+ if ((*child)->parent() &&
+ (*child)->parent()->type() == Node::Namespace &&
+ !(*child)->parent()->name().isEmpty())
+ className = (*child)->parent()->name()+"::"+className;
+ nsmap.value().insert(className,(*child));
+ ncmap.value().insert(className,(*child));
+ }
+ else if ((*child)->subType() == Node::QmlClass) {
+ QString className = (*child)->name();
+ if ((*child)->parent() &&
+ (*child)->parent()->type() == Node::Namespace &&
+ !(*child)->parent()->name().isEmpty())
+ className = (*child)->parent()->name()+"::"+className;
+ nsmap.value().insert(className,(*child));
+ nqcmap.value().insert(className,(*child));
+ }
+ }
+ else {
+ QString name = (*child)->name();
+ if ((*child)->parent() &&
+ (*child)->parent()->type() == Node::Namespace &&
+ !(*child)->parent()->name().isEmpty())
+ name = (*child)->parent()->name()+"::"+name;
+ nsmap.value().insert(name,(*child));
+ }
+ if ((*child)->isInnerNode()) {
+ findAllSince(static_cast<InnerNode *>(*child));
+ }
+ }
+ ++child;
+ }
+}
+
void HtmlGenerator::findAllFunctions(const InnerNode *node)
{
NodeList::ConstIterator c = node->childNodes().begin();
diff --git a/tools/qdoc3/htmlgenerator.h b/tools/qdoc3/htmlgenerator.h
index 62a7f605..70508a0 100644
--- a/tools/qdoc3/htmlgenerator.h
+++ b/tools/qdoc3/htmlgenerator.h
@@ -56,6 +56,12 @@
QT_BEGIN_NAMESPACE
+typedef QMultiMap<QString, Node*> NodeMultiMap;
+typedef QMap<QString, NodeMultiMap> NewSinceMaps;
+typedef QMap<Node*, NodeMultiMap> ParentMaps;
+typedef QMap<QString, const Node*> NodeMap;
+typedef QMap<QString, NodeMap> NewClassMaps;
+
class HelpProjectWriter;
class HtmlGenerator : public PageGenerator
@@ -221,6 +227,7 @@ class HtmlGenerator : public PageGenerator
void findAllFunctions(const InnerNode *node);
void findAllLegaleseTexts(const InnerNode *node);
void findAllNamespaces(const InnerNode *node);
+ void findAllSince(const InnerNode *node);
static int hOffset(const Node *node);
static bool isThreeColumnEnumValueTable(const Atom *atom);
virtual QString getLink(const Atom *atom,
@@ -289,6 +296,10 @@ class HtmlGenerator : public PageGenerator
NodeMap qmlClasses;
QMap<QString, NodeMap > funcIndex;
QMap<Text, const Node *> legaleseTexts;
+ NewSinceMaps newSinceMaps;
+ static QString sinceTitles[];
+ NewClassMaps newClassMaps;
+ NewClassMaps newQmlClassMaps;
static int id;
public:
static bool debugging_on;
diff --git a/tools/qdoc3/node.cpp b/tools/qdoc3/node.cpp
index e8ef397..b1d94e2 100644
--- a/tools/qdoc3/node.cpp
+++ b/tools/qdoc3/node.cpp
@@ -155,16 +155,6 @@ void Node::setLink(LinkType linkType, const QString &link, const QString &desc)
}
/*!
- Sets the information about the project and version a node was introduced
- in. The string is simplified, removing excess whitespace before being
- stored.
-*/
-void Node::setSince(const QString &since)
-{
- sinc = since.simplified();
-}
-
-/*!
Returns a string representing the access specifier.
*/
QString Node::accessString() const
@@ -585,7 +575,8 @@ void InnerNode::removeFromRelated()
*/
void InnerNode::deleteChildren()
{
- qDeleteAll(children);
+ NodeList childrenCopy = children; // `children` will be changed in ~Node()
+ qDeleteAll(childrenCopy);
}
/*!
diff --git a/tools/qdoc3/node.h b/tools/qdoc3/node.h
index a08151a..3b031b6 100644
--- a/tools/qdoc3/node.h
+++ b/tools/qdoc3/node.h
@@ -159,7 +159,7 @@ class Node
void setDoc(const Doc& doc, bool replace = false);
void setStatus(Status status) { sta = status; }
void setThreadSafeness(ThreadSafeness safeness) { saf = safeness; }
- void setSince(const QString &since);
+ void setSince(const QString &since) { sinc = since; }
void setRelates(InnerNode* pseudoParent);
void setModuleName(const QString &module) { mod = module; }
void setLink(LinkType linkType, const QString &link, const QString &desc);
diff --git a/tools/runonphone/main.cpp b/tools/runonphone/main.cpp
index 868a2a8..af349eb 100644
--- a/tools/runonphone/main.cpp
+++ b/tools/runonphone/main.cpp
@@ -65,7 +65,7 @@ void printUsage(QTextStream& outstream, QString exeName)
<< "-t, --timeout <milliseconds> terminate test if timeout occurs" << endl
<< "-v, --verbose show debugging output" << endl
<< "-q, --quiet hide progress messages" << endl
- << "-u, --upload <local file> upload executable file to phone" << endl
+ << "-u, --upload <local file> <remote file> upload file to phone" << endl
<< "-d, --download <remote file> <local file> copy file from phone to PC after running test" << endl
<< "--nocrashlog Don't capture call stack if test crashes" << endl
<< "--crashlogpath <dir> Path to save crash logs (default=working dir)" << endl
@@ -91,6 +91,7 @@ int main(int argc, char *argv[])
QTextStream outstream(stdout);
QTextStream errstream(stderr);
QString uploadLocalFile;
+ QString uploadRemoteFile;
QString downloadRemoteFile;
QString downloadLocalFile;
int loglevel=1;
@@ -127,10 +128,8 @@ int main(int argc, char *argv[])
errstream << "Executable file (" << uploadLocalFile << ") doesn't exist" << endl;
return 1;
}
- if (!(QFileInfo(uploadLocalFile).suffix() == "exe")) {
- errstream << "File (" << uploadLocalFile << ") must be an executable" << endl;
- return 1;
- }
+ CHECK_PARAMETER_EXISTS
+ uploadRemoteFile = it.next();
}
else if (arg == "--download" || arg == "-d") {
CHECK_PARAMETER_EXISTS
@@ -174,7 +173,8 @@ int main(int argc, char *argv[])
}
}
- if (exeFile.isEmpty() && sisFile.isEmpty() && uploadLocalFile.isEmpty() &&
+ if (exeFile.isEmpty() && sisFile.isEmpty() &&
+ (uploadLocalFile.isEmpty() || uploadRemoteFile.isEmpty()) &&
(downloadLocalFile.isEmpty() || downloadRemoteFile.isEmpty())) {
printUsage(outstream, args[0]);
return 1;
@@ -230,8 +230,7 @@ int main(int argc, char *argv[])
}
else if (!uploadLocalFile.isEmpty() && uploadInfo.exists()) {
codaHandler.setActionType(ActionCopy);
- QString dstName = QString("c:\\sys\\bin\\") + uploadInfo.fileName();
- codaHandler.setCopyFileName(uploadLocalFile, dstName);
+ codaHandler.setCopyFileName(uploadLocalFile, uploadRemoteFile);
}
if (!exeFile.isEmpty()) {
codaHandler.setActionType(ActionRun);
@@ -254,19 +253,20 @@ int main(int argc, char *argv[])
} else {
launcher.reset(new trk::Launcher(trk::Launcher::ActionPingOnly));
+ QStringList srcNames, dstNames;
if (!sisFile.isEmpty()) {
launcher->addStartupActions(trk::Launcher::ActionCopyInstall);
- QStringList srcName(sisFile);
- QStringList dstName("c:\\data\\testtemp.sis");
- launcher->setCopyFileNames(srcName, dstName);
- launcher->setInstallFileNames(dstName);
+ srcNames.append(sisFile);
+ QLatin1String dstName("c:\\data\\testtemp.sis");
+ dstNames.append(dstName);
+ launcher->setInstallFileNames(QStringList(dstName));
}
- else if (!uploadLocalFile.isEmpty() && uploadInfo.exists()) {
+ if (!uploadLocalFile.isEmpty() && uploadInfo.exists()) {
launcher->addStartupActions(trk::Launcher::ActionCopy);
- QStringList srcName(uploadLocalFile);
- QStringList dstName(QString("c:\\sys\\bin\\") + uploadInfo.fileName());
- launcher->setCopyFileNames(srcName, dstName);
+ srcNames.append(uploadLocalFile);
+ dstNames.append(uploadRemoteFile);
}
+ launcher->setCopyFileNames(srcNames, dstNames);
if (!exeFile.isEmpty()) {
launcher->addStartupActions(trk::Launcher::ActionRun);
launcher->setFileName(QString("c:\\sys\\bin\\") + info.fileName());