annotate tools/duic/d/dwriteicondata.cpp @ 391:4d17d96480db

Fixed generation of size policies ? QSizePolicy is a class.
author David Nadlinger <code@klickverbot.at>
date Fri, 27 Aug 2010 15:06:38 +0200
parents e78566595089
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
e78566595089 initial import
mandel
parents:
diff changeset
1 /****************************************************************************
e78566595089 initial import
mandel
parents:
diff changeset
2 **
e78566595089 initial import
mandel
parents:
diff changeset
3 ** Copyright (C) 2008 Nokia Corporation and/or its subsidiary(-ies).
e78566595089 initial import
mandel
parents:
diff changeset
4 ** Contact: Qt Software Information (qt-info@nokia.com)
e78566595089 initial import
mandel
parents:
diff changeset
5 **
e78566595089 initial import
mandel
parents:
diff changeset
6 ** This file is part of the tools applications of the Qt Toolkit.
e78566595089 initial import
mandel
parents:
diff changeset
7 **
e78566595089 initial import
mandel
parents:
diff changeset
8 ** Commercial Usage
e78566595089 initial import
mandel
parents:
diff changeset
9 ** Licensees holding valid Qt Commercial licenses may use this file in
e78566595089 initial import
mandel
parents:
diff changeset
10 ** accordance with the Qt Commercial License Agreement provided with the
e78566595089 initial import
mandel
parents:
diff changeset
11 ** Software or, alternatively, in accordance with the terms contained in
e78566595089 initial import
mandel
parents:
diff changeset
12 ** a written agreement between you and Nokia.
e78566595089 initial import
mandel
parents:
diff changeset
13 **
e78566595089 initial import
mandel
parents:
diff changeset
14 **
e78566595089 initial import
mandel
parents:
diff changeset
15 ** GNU General Public License Usage
e78566595089 initial import
mandel
parents:
diff changeset
16 ** Alternatively, this file may be used under the terms of the GNU
e78566595089 initial import
mandel
parents:
diff changeset
17 ** General Public License versions 2.0 or 3.0 as published by the Free
e78566595089 initial import
mandel
parents:
diff changeset
18 ** Software Foundation and appearing in the file LICENSE.GPL included in
e78566595089 initial import
mandel
parents:
diff changeset
19 ** the packaging of this file. Please review the following information
e78566595089 initial import
mandel
parents:
diff changeset
20 ** to ensure GNU General Public Licensing requirements will be met:
e78566595089 initial import
mandel
parents:
diff changeset
21 ** http://www.fsf.org/licensing/licenses/info/GPLv2.html and
e78566595089 initial import
mandel
parents:
diff changeset
22 ** http://www.gnu.org/copyleft/gpl.html. In addition, as a special
e78566595089 initial import
mandel
parents:
diff changeset
23 ** exception, Nokia gives you certain additional rights. These rights
e78566595089 initial import
mandel
parents:
diff changeset
24 ** are described in the Nokia Qt GPL Exception version 1.3, included in
e78566595089 initial import
mandel
parents:
diff changeset
25 ** the file GPL_EXCEPTION.txt in this package.
e78566595089 initial import
mandel
parents:
diff changeset
26 **
e78566595089 initial import
mandel
parents:
diff changeset
27 ** Qt for Windows(R) Licensees
e78566595089 initial import
mandel
parents:
diff changeset
28 ** As a special exception, Nokia, as the sole copyright holder for Qt
e78566595089 initial import
mandel
parents:
diff changeset
29 ** Designer, grants users of the Qt/Eclipse Integration plug-in the
e78566595089 initial import
mandel
parents:
diff changeset
30 ** right for the Qt/Eclipse Integration to link to functionality
e78566595089 initial import
mandel
parents:
diff changeset
31 ** provided by Qt Designer and its related libraries.
e78566595089 initial import
mandel
parents:
diff changeset
32 **
e78566595089 initial import
mandel
parents:
diff changeset
33 ** If you are unsure which license is appropriate for your use, please
e78566595089 initial import
mandel
parents:
diff changeset
34 ** contact the sales department at qt-sales@nokia.com.
e78566595089 initial import
mandel
parents:
diff changeset
35 **
e78566595089 initial import
mandel
parents:
diff changeset
36 ****************************************************************************/
e78566595089 initial import
mandel
parents:
diff changeset
37
e78566595089 initial import
mandel
parents:
diff changeset
38 #include "dwriteicondata.h"
e78566595089 initial import
mandel
parents:
diff changeset
39 #include "driver.h"
e78566595089 initial import
mandel
parents:
diff changeset
40 #include "ui4.h"
e78566595089 initial import
mandel
parents:
diff changeset
41 #include "uic.h"
e78566595089 initial import
mandel
parents:
diff changeset
42
e78566595089 initial import
mandel
parents:
diff changeset
43 #include <QtCore/QTextStream>
e78566595089 initial import
mandel
parents:
diff changeset
44
e78566595089 initial import
mandel
parents:
diff changeset
45 QT_BEGIN_NAMESPACE
e78566595089 initial import
mandel
parents:
diff changeset
46
e78566595089 initial import
mandel
parents:
diff changeset
47 namespace D {
e78566595089 initial import
mandel
parents:
diff changeset
48
e78566595089 initial import
mandel
parents:
diff changeset
49 static QByteArray transformImageData(QString data)
e78566595089 initial import
mandel
parents:
diff changeset
50 {
e78566595089 initial import
mandel
parents:
diff changeset
51 int baSize = data.length() / 2;
e78566595089 initial import
mandel
parents:
diff changeset
52 uchar *ba = new uchar[baSize];
e78566595089 initial import
mandel
parents:
diff changeset
53 for (int i = 0; i < baSize; ++i) {
e78566595089 initial import
mandel
parents:
diff changeset
54 char h = data[2 * (i)].toLatin1();
e78566595089 initial import
mandel
parents:
diff changeset
55 char l = data[2 * (i) + 1].toLatin1();
e78566595089 initial import
mandel
parents:
diff changeset
56 uchar r = 0;
e78566595089 initial import
mandel
parents:
diff changeset
57 if (h <= '9')
e78566595089 initial import
mandel
parents:
diff changeset
58 r += h - '0';
e78566595089 initial import
mandel
parents:
diff changeset
59 else
e78566595089 initial import
mandel
parents:
diff changeset
60 r += h - 'a' + 10;
e78566595089 initial import
mandel
parents:
diff changeset
61 r = r << 4;
e78566595089 initial import
mandel
parents:
diff changeset
62 if (l <= '9')
e78566595089 initial import
mandel
parents:
diff changeset
63 r += l - '0';
e78566595089 initial import
mandel
parents:
diff changeset
64 else
e78566595089 initial import
mandel
parents:
diff changeset
65 r += l - 'a' + 10;
e78566595089 initial import
mandel
parents:
diff changeset
66 ba[i] = r;
e78566595089 initial import
mandel
parents:
diff changeset
67 }
e78566595089 initial import
mandel
parents:
diff changeset
68 QByteArray ret(reinterpret_cast<const char *>(ba), baSize);
e78566595089 initial import
mandel
parents:
diff changeset
69 delete [] ba;
e78566595089 initial import
mandel
parents:
diff changeset
70 return ret;
e78566595089 initial import
mandel
parents:
diff changeset
71 }
e78566595089 initial import
mandel
parents:
diff changeset
72
e78566595089 initial import
mandel
parents:
diff changeset
73 static QByteArray unzipXPM(QString data, ulong& length)
e78566595089 initial import
mandel
parents:
diff changeset
74 {
e78566595089 initial import
mandel
parents:
diff changeset
75 #ifndef QT_NO_COMPRESS
e78566595089 initial import
mandel
parents:
diff changeset
76 const int lengthOffset = 4;
e78566595089 initial import
mandel
parents:
diff changeset
77 QByteArray ba(lengthOffset, ' ');
e78566595089 initial import
mandel
parents:
diff changeset
78
e78566595089 initial import
mandel
parents:
diff changeset
79 // qUncompress() expects the first 4 bytes to be the expected length of the
e78566595089 initial import
mandel
parents:
diff changeset
80 // uncompressed data
e78566595089 initial import
mandel
parents:
diff changeset
81 ba[0] = (length & 0xff000000) >> 24;
e78566595089 initial import
mandel
parents:
diff changeset
82 ba[1] = (length & 0x00ff0000) >> 16;
e78566595089 initial import
mandel
parents:
diff changeset
83 ba[2] = (length & 0x0000ff00) >> 8;
e78566595089 initial import
mandel
parents:
diff changeset
84 ba[3] = (length & 0x000000ff);
e78566595089 initial import
mandel
parents:
diff changeset
85 ba.append(transformImageData(data));
e78566595089 initial import
mandel
parents:
diff changeset
86 QByteArray baunzip = qUncompress(ba);
e78566595089 initial import
mandel
parents:
diff changeset
87 return baunzip;
e78566595089 initial import
mandel
parents:
diff changeset
88 #else
e78566595089 initial import
mandel
parents:
diff changeset
89 Q_UNUSED(data);
e78566595089 initial import
mandel
parents:
diff changeset
90 Q_UNUSED(length);
e78566595089 initial import
mandel
parents:
diff changeset
91 return QByteArray();
e78566595089 initial import
mandel
parents:
diff changeset
92 #endif
e78566595089 initial import
mandel
parents:
diff changeset
93 }
e78566595089 initial import
mandel
parents:
diff changeset
94
e78566595089 initial import
mandel
parents:
diff changeset
95
e78566595089 initial import
mandel
parents:
diff changeset
96 WriteIconData::WriteIconData(Uic *uic)
e78566595089 initial import
mandel
parents:
diff changeset
97 : driver(uic->driver()), output(uic->output()), option(uic->option())
e78566595089 initial import
mandel
parents:
diff changeset
98 {
e78566595089 initial import
mandel
parents:
diff changeset
99 }
e78566595089 initial import
mandel
parents:
diff changeset
100
e78566595089 initial import
mandel
parents:
diff changeset
101 void WriteIconData::acceptUI(DomUI *node)
e78566595089 initial import
mandel
parents:
diff changeset
102 {
e78566595089 initial import
mandel
parents:
diff changeset
103 TreeWalker::acceptUI(node);
e78566595089 initial import
mandel
parents:
diff changeset
104 }
e78566595089 initial import
mandel
parents:
diff changeset
105
e78566595089 initial import
mandel
parents:
diff changeset
106 void WriteIconData::acceptImages(DomImages *images)
e78566595089 initial import
mandel
parents:
diff changeset
107 {
e78566595089 initial import
mandel
parents:
diff changeset
108 TreeWalker::acceptImages(images);
e78566595089 initial import
mandel
parents:
diff changeset
109 }
e78566595089 initial import
mandel
parents:
diff changeset
110
e78566595089 initial import
mandel
parents:
diff changeset
111 void WriteIconData::acceptImage(DomImage *image)
e78566595089 initial import
mandel
parents:
diff changeset
112 {
e78566595089 initial import
mandel
parents:
diff changeset
113 writeImage(output, option.indent, image);
e78566595089 initial import
mandel
parents:
diff changeset
114 }
e78566595089 initial import
mandel
parents:
diff changeset
115
e78566595089 initial import
mandel
parents:
diff changeset
116 void WriteIconData::writeImage(QTextStream &output, const QString &indent, DomImage *image)
e78566595089 initial import
mandel
parents:
diff changeset
117 {
e78566595089 initial import
mandel
parents:
diff changeset
118 QString img = image->attributeName() + QLatin1String("_data");
e78566595089 initial import
mandel
parents:
diff changeset
119 QString data = image->elementData()->text();
e78566595089 initial import
mandel
parents:
diff changeset
120 QString fmt = image->elementData()->attributeFormat();
e78566595089 initial import
mandel
parents:
diff changeset
121 int size = image->elementData()->attributeLength();
e78566595089 initial import
mandel
parents:
diff changeset
122
e78566595089 initial import
mandel
parents:
diff changeset
123 if (fmt == QLatin1String("XPM.GZ")) {
e78566595089 initial import
mandel
parents:
diff changeset
124 ulong length = size;
e78566595089 initial import
mandel
parents:
diff changeset
125 QByteArray baunzip = unzipXPM(data, length);
e78566595089 initial import
mandel
parents:
diff changeset
126 length = baunzip.size();
e78566595089 initial import
mandel
parents:
diff changeset
127 // shouldn't we test the initial 'length' against the
e78566595089 initial import
mandel
parents:
diff changeset
128 // resulting 'length' to catch corrupt UIC files?
e78566595089 initial import
mandel
parents:
diff changeset
129 int a = 0;
e78566595089 initial import
mandel
parents:
diff changeset
130 int column = 0;
e78566595089 initial import
mandel
parents:
diff changeset
131 bool inQuote = false;
e78566595089 initial import
mandel
parents:
diff changeset
132 output << indent << "static const char* const " << img << "[] = { \n";
e78566595089 initial import
mandel
parents:
diff changeset
133 while (baunzip[a] != '\"')
e78566595089 initial import
mandel
parents:
diff changeset
134 a++;
e78566595089 initial import
mandel
parents:
diff changeset
135 for (; a < (int) length; a++) {
e78566595089 initial import
mandel
parents:
diff changeset
136 output << baunzip[a];
e78566595089 initial import
mandel
parents:
diff changeset
137 if (baunzip[a] == '\n') {
e78566595089 initial import
mandel
parents:
diff changeset
138 column = 0;
e78566595089 initial import
mandel
parents:
diff changeset
139 } else if (baunzip[a] == '"') {
e78566595089 initial import
mandel
parents:
diff changeset
140 inQuote = !inQuote;
e78566595089 initial import
mandel
parents:
diff changeset
141 }
e78566595089 initial import
mandel
parents:
diff changeset
142
e78566595089 initial import
mandel
parents:
diff changeset
143 if (column++ >= 511 && inQuote) {
e78566595089 initial import
mandel
parents:
diff changeset
144 output << "\"\n\""; // be nice with MSVC & Co.
e78566595089 initial import
mandel
parents:
diff changeset
145 column = 1;
e78566595089 initial import
mandel
parents:
diff changeset
146 }
e78566595089 initial import
mandel
parents:
diff changeset
147 }
e78566595089 initial import
mandel
parents:
diff changeset
148
e78566595089 initial import
mandel
parents:
diff changeset
149 if (! baunzip.trimmed ().endsWith ("};"))
e78566595089 initial import
mandel
parents:
diff changeset
150 output << "};";
e78566595089 initial import
mandel
parents:
diff changeset
151
e78566595089 initial import
mandel
parents:
diff changeset
152 output << "\n\n";
e78566595089 initial import
mandel
parents:
diff changeset
153 } else {
e78566595089 initial import
mandel
parents:
diff changeset
154 output << indent << "static const unsigned char " << img << "[] = { \n";
e78566595089 initial import
mandel
parents:
diff changeset
155 output << indent;
e78566595089 initial import
mandel
parents:
diff changeset
156 int a ;
e78566595089 initial import
mandel
parents:
diff changeset
157 for (a = 0; a < (int) (data.length()/2)-1; a++) {
e78566595089 initial import
mandel
parents:
diff changeset
158 output << "0x" << QString(data[2*a]) << QString(data[2*a+1]) << ',';
e78566595089 initial import
mandel
parents:
diff changeset
159 if (a % 12 == 11)
e78566595089 initial import
mandel
parents:
diff changeset
160 output << "\n" << indent;
e78566595089 initial import
mandel
parents:
diff changeset
161 else
e78566595089 initial import
mandel
parents:
diff changeset
162 output << " ";
e78566595089 initial import
mandel
parents:
diff changeset
163 }
e78566595089 initial import
mandel
parents:
diff changeset
164 output << "0x" << QString(data[2*a]) << QString(data[2*a+1]) << '\n';
e78566595089 initial import
mandel
parents:
diff changeset
165 output << "};\n\n";
e78566595089 initial import
mandel
parents:
diff changeset
166 }
e78566595089 initial import
mandel
parents:
diff changeset
167 }
e78566595089 initial import
mandel
parents:
diff changeset
168
e78566595089 initial import
mandel
parents:
diff changeset
169 void WriteIconData::writeImage(QIODevice &output, DomImage *image)
e78566595089 initial import
mandel
parents:
diff changeset
170 {
e78566595089 initial import
mandel
parents:
diff changeset
171 QByteArray array = transformImageData(image->elementData()->text());
e78566595089 initial import
mandel
parents:
diff changeset
172 output.write(array, array.size());
e78566595089 initial import
mandel
parents:
diff changeset
173 }
e78566595089 initial import
mandel
parents:
diff changeset
174
e78566595089 initial import
mandel
parents:
diff changeset
175 } // namespace D
e78566595089 initial import
mandel
parents:
diff changeset
176
e78566595089 initial import
mandel
parents:
diff changeset
177 QT_END_NAMESPACE