GUI: Implement writing project file data to disk from dialog.

This commit implements writing data in the project file dialog back to
project file.
This commit is contained in:
Kimmo Varis 2010-07-08 00:59:02 +03:00
parent 34d0ff73d8
commit 9d0c080697
5 changed files with 110 additions and 9 deletions

View File

@ -1,9 +1,12 @@
<?xml version="1.0"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="1">
<!-- cppcheck project file --> <includedir>
<dir name="../lib"/>
<project version="1"> <dir name="C:\"/>
<includedir> <dir name=""/>
<dir name="../lib" /> </includedir>
</includedir> <defines>
</project> <define name="WIN32"/>
<define name="UNICODE"/>
</defines>
</project>

View File

@ -19,10 +19,13 @@
#include <QObject> #include <QObject>
#include <QString> #include <QString>
#include <QXmlStreamReader> #include <QXmlStreamReader>
#include <QXmlStreamWriter>
#include <QFile> #include <QFile>
#include "projectfile.h" #include "projectfile.h"
static const char ProjectElementName[] = "project"; static const char ProjectElementName[] = "project";
static const char ProjectVersionAttrib[] = "version";
static const char ProjectFileVersion[] = "1";
static const char IncludDirElementName[] = "includedir"; static const char IncludDirElementName[] = "includedir";
static const char DirElementName[] = "dir"; static const char DirElementName[] = "dir";
static const char DirNameAttrib[] = "name"; static const char DirNameAttrib[] = "name";
@ -185,3 +188,55 @@ void ProjectFile::ReadDefines(QXmlStreamReader &reader)
} }
while (!allRead); while (!allRead);
} }
void ProjectFile::SetIncludes(QStringList includes)
{
mIncludeDirs = includes;
}
void ProjectFile::SetDefines(QStringList defines)
{
mDefines = defines;
}
bool ProjectFile::Write(const QString &filename)
{
QFile file(mFilename);
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
return false;
QXmlStreamWriter xmlWriter(&file);
xmlWriter.setAutoFormatting(true);
xmlWriter.writeStartDocument("1.0");
xmlWriter.writeStartElement(ProjectElementName);
xmlWriter.writeAttribute(ProjectVersionAttrib, ProjectFileVersion);
if (!mIncludeDirs.isEmpty())
{
xmlWriter.writeStartElement(IncludDirElementName);
QString incdir;
foreach(incdir, mIncludeDirs)
{
xmlWriter.writeStartElement(DirElementName);
xmlWriter.writeAttribute(DirNameAttrib, incdir);
xmlWriter.writeEndElement();
}
xmlWriter.writeEndElement();
}
if (!mDefines.isEmpty())
{
xmlWriter.writeStartElement(DefinesElementName);
QString define;
foreach(define, mDefines)
{
xmlWriter.writeStartElement(DefineName);
xmlWriter.writeAttribute(DefineNameAttrib, define);
xmlWriter.writeEndElement();
}
xmlWriter.writeEndElement();
}
xmlWriter.writeEndDocument();
file.close();
return true;
}

View File

@ -59,6 +59,24 @@ public:
*/ */
QStringList GetDefines() const; QStringList GetDefines() const;
/**
* @brief Set list of includes.
* @param includes List of defines.
*/
void SetIncludes(QStringList includes);
/**
* @brief Set list of defines.
* @param defines List of defines.
*/
void SetDefines(QStringList defines);
/**
* @brief Write project file (to disk).
* @param filename Filename to use.
*/
bool Write(const QString &filename = QString());
protected: protected:
/** /**
* @brief Read list of include directories from XML. * @brief Read list of include directories from XML.

View File

@ -50,4 +50,23 @@ ProjectFileDialog::ProjectFileDialog(const QString &path, QWidget *parent)
mUI.mEditDefines->setText(definestr); mUI.mEditDefines->setText(definestr);
connect(mUI.mButtons, SIGNAL(accepted()), this, SLOT(accept())); connect(mUI.mButtons, SIGNAL(accepted()), this, SLOT(accept()));
connect(this, SIGNAL(finished(int)), this, SLOT(DialogFinished(int)));
}
void ProjectFileDialog::DialogFinished(int result)
{
if (result == QDialog::Accepted)
{
UpdateProjectFileData();
mPFile->Write();
}
}
void ProjectFileDialog::UpdateProjectFileData()
{
QStringList includes = mUI.mEditIncludePaths->text().split(";");
mPFile->SetIncludes(includes);
QStringList defines = mUI.mEditDefines->text().split(";");
mPFile->SetDefines(defines);
} }

View File

@ -35,6 +35,12 @@ class ProjectFileDialog : public QDialog
public: public:
ProjectFileDialog(const QString &path, QWidget *parent = 0); ProjectFileDialog(const QString &path, QWidget *parent = 0);
protected slots:
void DialogFinished(int result);
protected:
void UpdateProjectFileData();
private: private:
Ui::ProjectFile mUI; Ui::ProjectFile mUI;
QString mFileName; QString mFileName;