Skip to content

Commit 9d0c080

Browse files
committed
GUI: Implement writing project file data to disk from dialog.
This commit implements writing data in the project file dialog back to project file.
1 parent 34d0ff7 commit 9d0c080

File tree

5 files changed

+110
-9
lines changed

5 files changed

+110
-9
lines changed

gui/gui.cppcheck

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
1-
<?xml version="1.0"?>
2-
3-
<!-- cppcheck project file -->
4-
5-
<project version="1">
6-
<includedir>
7-
<dir name="../lib" />
8-
</includedir>
9-
</project>
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<project version="1">
3+
<includedir>
4+
<dir name="../lib"/>
5+
<dir name="C:\"/>
6+
<dir name=""/>
7+
</includedir>
8+
<defines>
9+
<define name="WIN32"/>
10+
<define name="UNICODE"/>
11+
</defines>
12+
</project>

gui/projectfile.cpp

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,13 @@
1919
#include <QObject>
2020
#include <QString>
2121
#include <QXmlStreamReader>
22+
#include <QXmlStreamWriter>
2223
#include <QFile>
2324
#include "projectfile.h"
2425

2526
static const char ProjectElementName[] = "project";
27+
static const char ProjectVersionAttrib[] = "version";
28+
static const char ProjectFileVersion[] = "1";
2629
static const char IncludDirElementName[] = "includedir";
2730
static const char DirElementName[] = "dir";
2831
static const char DirNameAttrib[] = "name";
@@ -185,3 +188,55 @@ void ProjectFile::ReadDefines(QXmlStreamReader &reader)
185188
}
186189
while (!allRead);
187190
}
191+
192+
void ProjectFile::SetIncludes(QStringList includes)
193+
{
194+
mIncludeDirs = includes;
195+
}
196+
197+
void ProjectFile::SetDefines(QStringList defines)
198+
{
199+
mDefines = defines;
200+
}
201+
202+
bool ProjectFile::Write(const QString &filename)
203+
{
204+
QFile file(mFilename);
205+
if (!file.open(QIODevice::WriteOnly | QIODevice::Text))
206+
return false;
207+
208+
QXmlStreamWriter xmlWriter(&file);
209+
xmlWriter.setAutoFormatting(true);
210+
xmlWriter.writeStartDocument("1.0");
211+
xmlWriter.writeStartElement(ProjectElementName);
212+
xmlWriter.writeAttribute(ProjectVersionAttrib, ProjectFileVersion);
213+
214+
if (!mIncludeDirs.isEmpty())
215+
{
216+
xmlWriter.writeStartElement(IncludDirElementName);
217+
QString incdir;
218+
foreach(incdir, mIncludeDirs)
219+
{
220+
xmlWriter.writeStartElement(DirElementName);
221+
xmlWriter.writeAttribute(DirNameAttrib, incdir);
222+
xmlWriter.writeEndElement();
223+
}
224+
xmlWriter.writeEndElement();
225+
}
226+
227+
if (!mDefines.isEmpty())
228+
{
229+
xmlWriter.writeStartElement(DefinesElementName);
230+
QString define;
231+
foreach(define, mDefines)
232+
{
233+
xmlWriter.writeStartElement(DefineName);
234+
xmlWriter.writeAttribute(DefineNameAttrib, define);
235+
xmlWriter.writeEndElement();
236+
}
237+
xmlWriter.writeEndElement();
238+
}
239+
xmlWriter.writeEndDocument();
240+
file.close();
241+
return true;
242+
}

gui/projectfile.h

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,24 @@ class ProjectFile : public QObject
5959
*/
6060
QStringList GetDefines() const;
6161

62+
/**
63+
* @brief Set list of includes.
64+
* @param includes List of defines.
65+
*/
66+
void SetIncludes(QStringList includes);
67+
68+
/**
69+
* @brief Set list of defines.
70+
* @param defines List of defines.
71+
*/
72+
void SetDefines(QStringList defines);
73+
74+
/**
75+
* @brief Write project file (to disk).
76+
* @param filename Filename to use.
77+
*/
78+
bool Write(const QString &filename = QString());
79+
6280
protected:
6381
/**
6482
* @brief Read list of include directories from XML.

gui/projectfiledialog.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,23 @@ ProjectFileDialog::ProjectFileDialog(const QString &path, QWidget *parent)
5050
mUI.mEditDefines->setText(definestr);
5151

5252
connect(mUI.mButtons, SIGNAL(accepted()), this, SLOT(accept()));
53+
connect(this, SIGNAL(finished(int)), this, SLOT(DialogFinished(int)));
54+
}
55+
56+
void ProjectFileDialog::DialogFinished(int result)
57+
{
58+
if (result == QDialog::Accepted)
59+
{
60+
UpdateProjectFileData();
61+
mPFile->Write();
62+
}
63+
}
64+
65+
void ProjectFileDialog::UpdateProjectFileData()
66+
{
67+
QStringList includes = mUI.mEditIncludePaths->text().split(";");
68+
mPFile->SetIncludes(includes);
69+
70+
QStringList defines = mUI.mEditDefines->text().split(";");
71+
mPFile->SetDefines(defines);
5372
}

gui/projectfiledialog.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@ class ProjectFileDialog : public QDialog
3535
public:
3636
ProjectFileDialog(const QString &path, QWidget *parent = 0);
3737

38+
protected slots:
39+
void DialogFinished(int result);
40+
41+
protected:
42+
void UpdateProjectFileData();
43+
3844
private:
3945
Ui::ProjectFile mUI;
4046
QString mFileName;

0 commit comments

Comments
 (0)