Remove Qt Designer's dependency on rcc code from qtbase.
[qt:qttools.git] / src / designer / src / lib / shared / rcc_p.h
1 /****************************************************************************
2 **
3 ** Copyright (C) 2012 Nokia Corporation and/or its subsidiary(-ies).
4 ** Contact: http://www.qt-project.org/
5 **
6 ** This file is part of the Qt Designer of the Qt Toolkit.
7 **
8 ** $QT_BEGIN_LICENSE:LGPL$
9 ** GNU Lesser General Public License Usage
10 ** This file may be used under the terms of the GNU Lesser General Public
11 ** License version 2.1 as published by the Free Software Foundation and
12 ** appearing in the file LICENSE.LGPL included in the packaging of this
13 ** file. Please review the following information to ensure the GNU Lesser
14 ** General Public License version 2.1 requirements will be met:
15 ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
16 **
17 ** In addition, as a special exception, Nokia gives you certain additional
18 ** rights. These rights are described in the Nokia Qt LGPL Exception
19 ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
20 **
21 ** GNU General Public License Usage
22 ** Alternatively, this file may be used under the terms of the GNU General
23 ** Public License version 3.0 as published by the Free Software Foundation
24 ** and appearing in the file LICENSE.GPL included in the packaging of this
25 ** file. Please review the following information to ensure the GNU General
26 ** Public License version 3.0 requirements will be met:
27 ** http://www.gnu.org/copyleft/gpl.html.
28 **
29 ** Other Usage
30 ** Alternatively, this file may be used in accordance with the terms and
31 ** conditions contained in a signed written agreement between you and Nokia.
32 **
33 **
34 **
35 **
36 **
37 **
38 ** $QT_END_LICENSE$
39 **
40 ****************************************************************************/
41
42 //
43 //  W A R N I N G
44 //  -------------
45 //
46 // This file is not part of the Qt API.  It exists for the convenience
47 // of Qt Designer.  This header
48 // file may change from version to version without notice, or even be removed.
49 //
50 // We mean it.
51 // Note: This is a copy of qtbase/src/tools/rcc/rcc.h.
52
53 #ifndef RCC_H
54 #define RCC_H
55
56 #include <QtCore/QStringList>
57 #include <QtCore/QHash>
58 #include <QtCore/QString>
59
60 QT_BEGIN_NAMESPACE
61
62 class RCCFileInfo;
63 class QIODevice;
64 class QTextStream;
65
66
67 class RCCResourceLibrary
68 {
69     RCCResourceLibrary(const RCCResourceLibrary &);
70     RCCResourceLibrary &operator=(const RCCResourceLibrary &);
71
72 public:
73     RCCResourceLibrary();
74     ~RCCResourceLibrary();
75
76     bool output(QIODevice &out, QIODevice &errorDevice);
77
78     bool readFiles(bool ignoreErrors, QIODevice &errorDevice);
79
80     enum Format { Binary, C_Code };
81     void setFormat(Format f) { m_format = f; }
82     Format format() const { return m_format; }
83
84     void setInputFiles(const QStringList &files) { m_fileNames = files; }
85     QStringList inputFiles() const { return m_fileNames; }
86
87     QStringList dataFiles() const;
88
89     // Return a map of resource identifier (':/newPrefix/images/p1.png') to file.
90     typedef QHash<QString, QString> ResourceDataFileMap;
91     ResourceDataFileMap resourceDataFileMap() const;
92
93     void setVerbose(bool b) { m_verbose = b; }
94     bool verbose() const { return m_verbose; }
95
96     void setInitName(const QString &name) { m_initName = name; }
97     QString initName() const { return m_initName; }
98
99     void setCompressLevel(int c) { m_compressLevel = c; }
100     int compressLevel() const { return m_compressLevel; }
101
102     void setCompressThreshold(int t) { m_compressThreshold = t; }
103     int compressThreshold() const { return m_compressThreshold; }
104
105     void setResourceRoot(const QString &root) { m_resourceRoot = root; }
106     QString resourceRoot() const { return m_resourceRoot; }
107
108     void setUseNameSpace(bool v) { m_useNameSpace = v; }
109     bool useNameSpace() const { return m_useNameSpace; }
110
111     QStringList failedResources() const { return m_failedResources; }
112
113 private:
114     struct Strings {
115         Strings();
116         const QString TAG_RCC;
117         const QString TAG_RESOURCE;
118         const QString TAG_FILE;
119         const QString ATTRIBUTE_LANG;
120         const QString ATTRIBUTE_PREFIX;
121         const QString ATTRIBUTE_ALIAS;
122         const QString ATTRIBUTE_THRESHOLD;
123         const QString ATTRIBUTE_COMPRESS;
124     };
125     friend class RCCFileInfo;
126     void reset();
127     bool addFile(const QString &alias, const RCCFileInfo &file);
128     bool interpretResourceFile(QIODevice *inputDevice, const QString &file,
129         QString currentPath = QString(), bool ignoreErrors = false);
130     bool writeHeader();
131     bool writeDataBlobs();
132     bool writeDataNames();
133     bool writeDataStructure();
134     bool writeInitializer();
135     void writeMangleNamespaceFunction(const QByteArray &name);
136     void writeAddNamespaceFunction(const QByteArray &name);
137     void writeHex(quint8 number);
138     void writeNumber2(quint16 number);
139     void writeNumber4(quint32 number);
140     void writeChar(char c) { m_out.append(c); }
141     void writeByteArray(const QByteArray &);
142     void write(const char *, int len);
143
144     const Strings m_strings;
145     RCCFileInfo *m_root;
146     QStringList m_fileNames;
147     QString m_resourceRoot;
148     QString m_initName;
149     Format m_format;
150     bool m_verbose;
151     int m_compressLevel;
152     int m_compressThreshold;
153     int m_treeOffset;
154     int m_namesOffset;
155     int m_dataOffset;
156     bool m_useNameSpace;
157     QStringList m_failedResources;
158     QIODevice *m_errorDevice;
159     QByteArray m_out;
160 };
161
162 QT_END_NAMESPACE
163
164 #endif // RCC_H