forked from laumaya/GLC_Player
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAlbumFile.h
155 lines (115 loc) · 4.46 KB
/
AlbumFile.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/****************************************************************************
This file is part of GLC-Player.
Copyright (C) 2007-2008 Laurent Ribon (laumaya@users.sourceforge.net)
Version 2.2.0, packaged on July 2010.
http://www.glc-player.net
GLC-Player is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
GLC-Player is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with GLC-Player; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*****************************************************************************/
#ifndef SESSIONFILE_H_
#define SESSIONFILE_H_
#include "FileEntry.h"
#include <QFile>
#include <QList>
#include <QString>
#include <QXmlStreamWriter>
#include <QXmlStreamReader>
//////////////////////////////////////////////////////////////////////
//! \class Sessionfile
/*! \brief SessionFile : The session file reader and loader*/
//////////////////////////////////////////////////////////////////////
class AlbumFile
{
//////////////////////////////////////////////////////////////////////
/*! @name Constructor / Destructor */
//@{
//////////////////////////////////////////////////////////////////////
public:
//! Default constructor
AlbumFile();
//! Default destructor
virtual ~AlbumFile();
//@}
/////////////////////////////////////////////////////////////////////
// Public Interface
//////////////////////////////////////////////////////////////////////
public:
//! Load a session file
/* Return the file entry list as result
*/
QList<FileEntry> loadAlbumFile(QFile*);
//! Save a session file
/*
* The file must exist and be in write mode
*/
void saveAlbumFile(const QList<FileEntry>&, QFile*);
//! Return album suffix
static QString suffix();
//////////////////////////////////////////////////////////////////////
// Private services Functions
//////////////////////////////////////////////////////////////////////
private:
//! Write the header of xml document
void writeHeader() const;
//! Write a model in the current xml document
void writeModel(const FileEntry&);
//! Check if the Album file is valid
bool checkAlbumFileValidity();
//! Convert current model xml element to a FileEntry object
FileEntry currentModelToFileEnty();
//! Return a Set of GLC_Material
QSet<GLC_Material*> readSetOfMaterials();
//! Read the list of invisible instance
QList<QString> readTheListOfInvisibleInstance();
//! Read the list of shaded instance
QHash<QString, QList<QString> > readTheListOfShadedInstance();
//! Write the set of material
void writeSetOfMaterials(const FileEntry&);
//! Write the list of invisible instance
void writeTheListOfInvisibleInstance(const FileEntry&);
//! Write the list of shaded instance
void writeTheListOfShadedInstance(const FileEntry&);
//! Check validity of camera element
bool checkCameraElementValidity();
//! Check validity of materials element
bool checkMaterialsElementValidity();
//! Check validity of Invisible Instance element
bool checkInvisibleInstanceElementValidity();
//! Check validity of Shaded Instance element
bool checkShadedInstanceElementValidity();
//! Go to Element
void goToElement(const QString&);
//! Return true if the end of specified element is not reached
inline bool endElementNotReached(const QString& element)
{return !m_pStreamReader->atEnd() && !(m_pStreamReader->isEndElement() && (m_pStreamReader->name() == element));}
//////////////////////////////////////////////////////////////////////
// private member
//////////////////////////////////////////////////////////////////////
private:
//! Album suffix
static const QString m_Suffix;
//! Xml Reader
QXmlStreamWriter* m_pStreamWriter;
//! Xml Writer
QXmlStreamReader* m_pStreamReader;
//! The session Path Dir
QDir m_SessionPathDir;
//! The current Album version
const QString m_AlbumVersion;
//! The Readed Album Version
QString m_ReadedAlbumVersion;
//! The current model absolute Dir
QDir m_CurrentModelAbsoluteDir;
//! The current model real absolute Dir
QDir m_CurrentModelRealAbsoluteDir;
};
#endif /*SESSIONFILE_H_*/