forked from qt-creator/qt-creator
When adding a form file to a project add also its qrc files
Extract qrc paths from ui file by simple xml parsing. Reviewed-by: dt <qtc-committer@nokia.com> Reviewed-by: Friedemann Kleint <qtc-committer@nokia.com> Task-number: QTCREATORBUG-42
This commit is contained in:
@@ -59,6 +59,7 @@
|
|||||||
#include <QtCore/QFile>
|
#include <QtCore/QFile>
|
||||||
#include <QtCore/QFileInfo>
|
#include <QtCore/QFileInfo>
|
||||||
#include <QtCore/QCoreApplication>
|
#include <QtCore/QCoreApplication>
|
||||||
|
#include <QtCore/QXmlStreamReader>
|
||||||
|
|
||||||
#include <QtGui/QPainter>
|
#include <QtGui/QPainter>
|
||||||
#include <QtGui/QMainWindow>
|
#include <QtGui/QMainWindow>
|
||||||
@@ -597,6 +598,22 @@ bool Qt4PriFileNode::addFiles(const FileType fileType, const QStringList &filePa
|
|||||||
accept(&visitor);
|
accept(&visitor);
|
||||||
const QStringList &allFiles = visitor.filePaths();
|
const QStringList &allFiles = visitor.filePaths();
|
||||||
|
|
||||||
|
QStringList qrcFiles; // the list of qrc files referenced from ui files
|
||||||
|
if (fileType == ProjectExplorer::FormType) {
|
||||||
|
foreach (const QString &formFile, filePaths) {
|
||||||
|
QStringList resourceFiles = formResources(formFile);
|
||||||
|
foreach (const QString &resourceFile, resourceFiles)
|
||||||
|
if (!qrcFiles.contains(resourceFile))
|
||||||
|
qrcFiles.append(resourceFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList uniqueQrcFiles;
|
||||||
|
foreach (const QString &file, qrcFiles) {
|
||||||
|
if (!allFiles.contains(file))
|
||||||
|
uniqueQrcFiles.append(file);
|
||||||
|
}
|
||||||
|
|
||||||
QStringList uniqueFilePaths;
|
QStringList uniqueFilePaths;
|
||||||
foreach (const QString &file, filePaths) {
|
foreach (const QString &file, filePaths) {
|
||||||
if (!allFiles.contains(file))
|
if (!allFiles.contains(file))
|
||||||
@@ -607,6 +624,9 @@ bool Qt4PriFileNode::addFiles(const FileType fileType, const QStringList &filePa
|
|||||||
changeFiles(fileType, uniqueFilePaths, &failedFiles, AddToProFile);
|
changeFiles(fileType, uniqueFilePaths, &failedFiles, AddToProFile);
|
||||||
if (notAdded)
|
if (notAdded)
|
||||||
*notAdded = failedFiles;
|
*notAdded = failedFiles;
|
||||||
|
changeFiles(ProjectExplorer::ResourceType, uniqueQrcFiles, &failedFiles, AddToProFile);
|
||||||
|
if (notAdded)
|
||||||
|
*notAdded += failedFiles;
|
||||||
return failedFiles.isEmpty();
|
return failedFiles.isEmpty();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -699,6 +719,39 @@ bool Qt4PriFileNode::saveModifiedEditors()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QStringList Qt4PriFileNode::formResources(const QString &formFile) const
|
||||||
|
{
|
||||||
|
QStringList resourceFiles;
|
||||||
|
QFile file(formFile);
|
||||||
|
file.open(QIODevice::ReadOnly);
|
||||||
|
QXmlStreamReader reader(&file);
|
||||||
|
|
||||||
|
QFileInfo fi(formFile);
|
||||||
|
QDir formDir = fi.absoluteDir();
|
||||||
|
while (!reader.atEnd()) {
|
||||||
|
reader.readNext();
|
||||||
|
if (reader.isStartElement()) {
|
||||||
|
if (reader.name() == QLatin1String("iconset")) {
|
||||||
|
const QXmlStreamAttributes attributes = reader.attributes();
|
||||||
|
if (attributes.hasAttribute(QLatin1String("resource")))
|
||||||
|
resourceFiles.append(QDir::cleanPath(formDir.absoluteFilePath(
|
||||||
|
attributes.value(QLatin1String("resource")).toString())));
|
||||||
|
} else if (reader.name() == QLatin1String("include")) {
|
||||||
|
const QXmlStreamAttributes attributes = reader.attributes();
|
||||||
|
if (attributes.hasAttribute(QLatin1String("location")))
|
||||||
|
resourceFiles.append(QDir::cleanPath(formDir.absoluteFilePath(
|
||||||
|
attributes.value(QLatin1String("location")).toString())));
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reader.hasError())
|
||||||
|
qWarning() << "Could not read form file:" << formFile;
|
||||||
|
|
||||||
|
return resourceFiles;
|
||||||
|
}
|
||||||
|
|
||||||
void Qt4PriFileNode::changeFiles(const FileType fileType,
|
void Qt4PriFileNode::changeFiles(const FileType fileType,
|
||||||
const QStringList &filePaths,
|
const QStringList &filePaths,
|
||||||
QStringList *notChanged,
|
QStringList *notChanged,
|
||||||
|
|||||||
@@ -173,6 +173,7 @@ private:
|
|||||||
void save(const QStringList &lines);
|
void save(const QStringList &lines);
|
||||||
bool priFileWritable(const QString &path);
|
bool priFileWritable(const QString &path);
|
||||||
bool saveModifiedEditors();
|
bool saveModifiedEditors();
|
||||||
|
QStringList formResources(const QString &formFile) const;
|
||||||
QStringList baseVPaths(ProFileReader *reader, const QString &projectDir);
|
QStringList baseVPaths(ProFileReader *reader, const QString &projectDir);
|
||||||
QStringList fullVPaths(const QStringList &baseVPaths, ProFileReader *reader, FileType type, const QString &qmakeVariable, const QString &projectDir);
|
QStringList fullVPaths(const QStringList &baseVPaths, ProFileReader *reader, FileType type, const QString &qmakeVariable, const QString &projectDir);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user