Line | Source Code | Coverage |
---|
1 | /**************************************************************************** | - |
2 | ** | - |
3 | ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). | - |
4 | ** Contact: http://www.qt-project.org/legal | - |
5 | ** | - |
6 | ** This file is part of the QtGui module of the Qt Toolkit. | - |
7 | ** | - |
8 | ** $QT_BEGIN_LICENSE:LGPL$ | - |
9 | ** Commercial License Usage | - |
10 | ** Licensees holding valid commercial Qt licenses may use this file in | - |
11 | ** accordance with the commercial license agreement provided with the | - |
12 | ** Software or, alternatively, in accordance with the terms contained in | - |
13 | ** a written agreement between you and Digia. For licensing terms and | - |
14 | ** conditions see http://qt.digia.com/licensing. For further information | - |
15 | ** use the contact form at http://qt.digia.com/contact-us. | - |
16 | ** | - |
17 | ** GNU Lesser General Public License Usage | - |
18 | ** Alternatively, this file may be used under the terms of the GNU Lesser | - |
19 | ** General Public License version 2.1 as published by the Free Software | - |
20 | ** Foundation and appearing in the file LICENSE.LGPL included in the | - |
21 | ** packaging of this file. Please review the following information to | - |
22 | ** ensure the GNU Lesser General Public License version 2.1 requirements | - |
23 | ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. | - |
24 | ** | - |
25 | ** In addition, as a special exception, Digia gives you certain additional | - |
26 | ** rights. These rights are described in the Digia Qt LGPL Exception | - |
27 | ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. | - |
28 | ** | - |
29 | ** GNU General Public License Usage | - |
30 | ** Alternatively, this file may be used under the terms of the GNU | - |
31 | ** General Public License version 3.0 as published by the Free Software | - |
32 | ** Foundation and appearing in the file LICENSE.GPL included in the | - |
33 | ** packaging of this file. Please review the following information to | - |
34 | ** ensure the GNU General Public License version 3.0 requirements will be | - |
35 | ** met: http://www.gnu.org/copyleft/gpl.html. | - |
36 | ** | - |
37 | ** | - |
38 | ** $QT_END_LICENSE$ | - |
39 | ** | - |
40 | ****************************************************************************/ | - |
41 | | - |
42 | #include "qicon.h" | - |
43 | #include "qicon_p.h" | - |
44 | #include "qiconengine.h" | - |
45 | #include "qiconengineplugin.h" | - |
46 | #include "private/qfactoryloader_p.h" | - |
47 | #include "private/qiconloader_p.h" | - |
48 | #include "qpainter.h" | - |
49 | #include "qfileinfo.h" | - |
50 | #include "qpixmapcache.h" | - |
51 | #include "qvariant.h" | - |
52 | #include "qcache.h" | - |
53 | #include "qdebug.h" | - |
54 | #include "qpalette.h" | - |
55 | | - |
56 | #ifdef Q_WS_MAC | - |
57 | #include <private/qt_mac_p.h> | - |
58 | #include <private/qt_cocoa_helpers_mac_p.h> | - |
59 | #endif | - |
60 | | - |
61 | #include "private/qhexstring_p.h" | - |
62 | #include "private/qguiapplication_p.h" | - |
63 | | - |
64 | #ifndef QT_NO_ICON | - |
65 | QT_BEGIN_NAMESPACE | - |
66 | | - |
67 | /*! | - |
68 | \enum QIcon::Mode | - |
69 | | - |
70 | This enum type describes the mode for which a pixmap is intended | - |
71 | to be used. The currently defined modes are: | - |
72 | | - |
73 | \value Normal | - |
74 | Display the pixmap when the user is | - |
75 | not interacting with the icon, but the | - |
76 | functionality represented by the icon is available. | - |
77 | \value Disabled | - |
78 | Display the pixmap when the | - |
79 | functionality represented by the icon is not available. | - |
80 | \value Active | - |
81 | Display the pixmap when the | - |
82 | functionality represented by the icon is available and | - |
83 | the user is interacting with the icon, for example, moving the | - |
84 | mouse over it or clicking it. | - |
85 | \value Selected | - |
86 | Display the pixmap when the item represented by the icon is | - |
87 | selected. | - |
88 | */ | - |
89 | | - |
90 | /*! | - |
91 | \enum QIcon::State | - |
92 | | - |
93 | This enum describes the state for which a pixmap is intended to be | - |
94 | used. The \e state can be: | - |
95 | | - |
96 | \value Off Display the pixmap when the widget is in an "off" state | - |
97 | \value On Display the pixmap when the widget is in an "on" state | - |
98 | */ | - |
99 | | - |
100 | static QBasicAtomicInt serialNumCounter = Q_BASIC_ATOMIC_INITIALIZER(1); | - |
101 | | - |
102 | static void qt_cleanup_icon_cache(); | - |
103 | namespace { | - |
104 | struct IconCache : public QCache<QString, QIcon> | - |
105 | { | - |
106 | IconCache() | - |
107 | { | - |
108 | // ### note: won't readd if QApplication is re-created! | - |
109 | qAddPostRoutine(qt_cleanup_icon_cache); executed (the execution status of this line is deduced): qAddPostRoutine(qt_cleanup_icon_cache); | - |
110 | } executed: } Execution Count:1 | 1 |
111 | }; | - |
112 | } | - |
113 | | - |
114 | Q_GLOBAL_STATIC(IconCache, qtIconCache) never executed: delete x; executed: return thisGlobalStatic.pointer.load(); Execution Count:21 partially evaluated: !thisGlobalStatic.pointer.testAndSetOrdered(0, x) no Evaluation Count:0 | yes Evaluation Count:1 |
evaluated: !thisGlobalStatic.pointer.load() yes Evaluation Count:1 | yes Evaluation Count:20 |
partially evaluated: !thisGlobalStatic.destroyed yes Evaluation Count:1 | no Evaluation Count:0 |
| 0-21 |
115 | | - |
116 | static void qt_cleanup_icon_cache() | - |
117 | { | - |
118 | qtIconCache()->clear(); executed (the execution status of this line is deduced): qtIconCache()->clear(); | - |
119 | } executed: } Execution Count:1 | 1 |
120 | | - |
121 | QIconPrivate::QIconPrivate() | - |
122 | : engine(0), ref(1), | - |
123 | serialNum(serialNumCounter.fetchAndAddRelaxed(1)), | - |
124 | detach_no(0) | - |
125 | { | - |
126 | } executed: } Execution Count:4542 | 4542 |
127 | | - |
128 | QPixmapIconEngine::QPixmapIconEngine() | - |
129 | { | - |
130 | } | - |
131 | | - |
132 | QPixmapIconEngine::QPixmapIconEngine(const QPixmapIconEngine &other) | - |
133 | : QIconEngine(other), pixmaps(other.pixmaps) | - |
134 | { | - |
135 | } executed: } Execution Count:5 | 5 |
136 | | - |
137 | QPixmapIconEngine::~QPixmapIconEngine() | - |
138 | { | - |
139 | } | - |
140 | | - |
141 | void QPixmapIconEngine::paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) | - |
142 | { | - |
143 | QSize pixmapSize = rect.size(); executed (the execution status of this line is deduced): QSize pixmapSize = rect.size(); | - |
144 | #if defined(Q_WS_MAC) | - |
145 | pixmapSize *= qt_mac_get_scalefactor(); | - |
146 | #endif | - |
147 | painter->drawPixmap(rect, pixmap(pixmapSize, mode, state)); executed (the execution status of this line is deduced): painter->drawPixmap(rect, pixmap(pixmapSize, mode, state)); | - |
148 | } executed: } Execution Count:2587 | 2587 |
149 | | - |
150 | static inline int area(const QSize &s) { return s.width() * s.height(); } executed: return s.width() * s.height(); Execution Count:211485 | 211485 |
151 | | - |
152 | // returns the smallest of the two that is still larger than or equal to size. | - |
153 | static QPixmapIconEngineEntry *bestSizeMatch( const QSize &size, QPixmapIconEngineEntry *pa, QPixmapIconEngineEntry *pb) | - |
154 | { | - |
155 | int s = area(size); executed (the execution status of this line is deduced): int s = area(size); | - |
156 | if (pa->size == QSize() && pa->pixmap.isNull()) { partially evaluated: pa->size == QSize() no Evaluation Count:0 | yes Evaluation Count:70495 |
never evaluated: pa->pixmap.isNull() | 0-70495 |
157 | pa->pixmap = QPixmap(pa->fileName); never executed (the execution status of this line is deduced): pa->pixmap = QPixmap(pa->fileName); | - |
158 | pa->size = pa->pixmap.size(); never executed (the execution status of this line is deduced): pa->size = pa->pixmap.size(); | - |
159 | } | 0 |
160 | int a = area(pa->size); executed (the execution status of this line is deduced): int a = area(pa->size); | - |
161 | if (pb->size == QSize() && pb->pixmap.isNull()) { partially evaluated: pb->size == QSize() no Evaluation Count:0 | yes Evaluation Count:70495 |
never evaluated: pb->pixmap.isNull() | 0-70495 |
162 | pb->pixmap = QPixmap(pb->fileName); never executed (the execution status of this line is deduced): pb->pixmap = QPixmap(pb->fileName); | - |
163 | pb->size = pb->pixmap.size(); never executed (the execution status of this line is deduced): pb->size = pb->pixmap.size(); | - |
164 | } | 0 |
165 | int b = area(pb->size); executed (the execution status of this line is deduced): int b = area(pb->size); | - |
166 | int res = a; executed (the execution status of this line is deduced): int res = a; | - |
167 | if (qMin(a,b) >= s) evaluated: qMin(a,b) >= s yes Evaluation Count:69486 | yes Evaluation Count:1009 |
| 1009-69486 |
168 | res = qMin(a,b); executed: res = qMin(a,b); Execution Count:69486 | 69486 |
169 | else | - |
170 | res = qMax(a,b); executed: res = qMax(a,b); Execution Count:1009 | 1009 |
171 | if (res == a) evaluated: res == a yes Evaluation Count:1015 | yes Evaluation Count:69480 |
| 1015-69480 |
172 | return pa; executed: return pa; Execution Count:1015 | 1015 |
173 | return pb; executed: return pb; Execution Count:69480 | 69480 |
174 | } | - |
175 | | - |
176 | QPixmapIconEngineEntry *QPixmapIconEngine::tryMatch(const QSize &size, QIcon::Mode mode, QIcon::State state) | - |
177 | { | - |
178 | QPixmapIconEngineEntry *pe = 0; executed (the execution status of this line is deduced): QPixmapIconEngineEntry *pe = 0; | - |
179 | for (int i = 0; i < pixmaps.count(); ++i) evaluated: i < pixmaps.count() yes Evaluation Count:132733 | yes Evaluation Count:47108 |
| 47108-132733 |
180 | if (pixmaps.at(i).mode == mode && pixmaps.at(i).state == state) { evaluated: pixmaps.at(i).mode == mode yes Evaluation Count:131168 | yes Evaluation Count:1565 |
evaluated: pixmaps.at(i).state == state yes Evaluation Count:114691 | yes Evaluation Count:16477 |
| 1565-131168 |
181 | if (pe) evaluated: pe yes Evaluation Count:70495 | yes Evaluation Count:44196 |
| 44196-70495 |
182 | pe = bestSizeMatch(size, &pixmaps[i], pe); executed: pe = bestSizeMatch(size, &pixmaps[i], pe); Execution Count:70495 | 70495 |
183 | else | - |
184 | pe = &pixmaps[i]; executed: pe = &pixmaps[i]; Execution Count:44196 | 44196 |
185 | } | - |
186 | return pe; executed: return pe; Execution Count:47108 | 47108 |
187 | } | - |
188 | | - |
189 | | - |
190 | QPixmapIconEngineEntry *QPixmapIconEngine::bestMatch(const QSize &size, QIcon::Mode mode, QIcon::State state, bool sizeOnly) | - |
191 | { | - |
192 | QPixmapIconEngineEntry *pe = tryMatch(size, mode, state); executed (the execution status of this line is deduced): QPixmapIconEngineEntry *pe = tryMatch(size, mode, state); | - |
193 | while (!pe){ evaluated: !pe yes Evaluation Count:227 | yes Evaluation Count:43962 |
| 227-43962 |
194 | QIcon::State oppositeState = (state == QIcon::On) ? QIcon::Off : QIcon::On; evaluated: (state == QIcon::On) yes Evaluation Count:58 | yes Evaluation Count:169 |
| 58-169 |
195 | if (mode == QIcon::Disabled || mode == QIcon::Selected) { evaluated: mode == QIcon::Disabled yes Evaluation Count:81 | yes Evaluation Count:146 |
evaluated: mode == QIcon::Selected yes Evaluation Count:85 | yes Evaluation Count:61 |
| 61-146 |
196 | QIcon::Mode oppositeMode = (mode == QIcon::Disabled) ? QIcon::Selected : QIcon::Disabled; evaluated: (mode == QIcon::Disabled) yes Evaluation Count:81 | yes Evaluation Count:85 |
| 81-85 |
197 | if ((pe = tryMatch(size, QIcon::Normal, state))) evaluated: (pe = tryMatch(size, QIcon::Normal, state)) yes Evaluation Count:142 | yes Evaluation Count:24 |
| 24-142 |
198 | break; executed: break; Execution Count:142 | 142 |
199 | if ((pe = tryMatch(size, QIcon::Active, state))) evaluated: (pe = tryMatch(size, QIcon::Active, state)) yes Evaluation Count:4 | yes Evaluation Count:20 |
| 4-20 |
200 | break; executed: break; Execution Count:4 | 4 |
201 | if ((pe = tryMatch(size, mode, oppositeState))) evaluated: (pe = tryMatch(size, mode, oppositeState)) yes Evaluation Count:4 | yes Evaluation Count:16 |
| 4-16 |
202 | break; executed: break; Execution Count:4 | 4 |
203 | if ((pe = tryMatch(size, QIcon::Normal, oppositeState))) evaluated: (pe = tryMatch(size, QIcon::Normal, oppositeState)) yes Evaluation Count:4 | yes Evaluation Count:12 |
| 4-12 |
204 | break; executed: break; Execution Count:4 | 4 |
205 | if ((pe = tryMatch(size, QIcon::Active, oppositeState))) evaluated: (pe = tryMatch(size, QIcon::Active, oppositeState)) yes Evaluation Count:4 | yes Evaluation Count:8 |
| 4-8 |
206 | break; executed: break; Execution Count:4 | 4 |
207 | if ((pe = tryMatch(size, oppositeMode, state))) evaluated: (pe = tryMatch(size, oppositeMode, state)) yes Evaluation Count:4 | yes Evaluation Count:4 |
| 4 |
208 | break; executed: break; Execution Count:4 | 4 |
209 | if ((pe = tryMatch(size, oppositeMode, oppositeState))) partially evaluated: (pe = tryMatch(size, oppositeMode, oppositeState)) yes Evaluation Count:4 | no Evaluation Count:0 |
| 0-4 |
210 | break; executed: break; Execution Count:4 | 4 |
211 | } else { | 0 |
212 | QIcon::Mode oppositeMode = (mode == QIcon::Normal) ? QIcon::Active : QIcon::Normal; evaluated: (mode == QIcon::Normal) yes Evaluation Count:44 | yes Evaluation Count:17 |
| 17-44 |
213 | if ((pe = tryMatch(size, oppositeMode, state))) evaluated: (pe = tryMatch(size, oppositeMode, state)) yes Evaluation Count:7 | yes Evaluation Count:54 |
| 7-54 |
214 | break; executed: break; Execution Count:7 | 7 |
215 | if ((pe = tryMatch(size, mode, oppositeState))) evaluated: (pe = tryMatch(size, mode, oppositeState)) yes Evaluation Count:34 | yes Evaluation Count:20 |
| 20-34 |
216 | break; executed: break; Execution Count:34 | 34 |
217 | if ((pe = tryMatch(size, oppositeMode, oppositeState))) evaluated: (pe = tryMatch(size, oppositeMode, oppositeState)) yes Evaluation Count:4 | yes Evaluation Count:16 |
| 4-16 |
218 | break; executed: break; Execution Count:4 | 4 |
219 | if ((pe = tryMatch(size, QIcon::Disabled, state))) evaluated: (pe = tryMatch(size, QIcon::Disabled, state)) yes Evaluation Count:4 | yes Evaluation Count:12 |
| 4-12 |
220 | break; executed: break; Execution Count:4 | 4 |
221 | if ((pe = tryMatch(size, QIcon::Selected, state))) evaluated: (pe = tryMatch(size, QIcon::Selected, state)) yes Evaluation Count:4 | yes Evaluation Count:8 |
| 4-8 |
222 | break; executed: break; Execution Count:4 | 4 |
223 | if ((pe = tryMatch(size, QIcon::Disabled, oppositeState))) evaluated: (pe = tryMatch(size, QIcon::Disabled, oppositeState)) yes Evaluation Count:4 | yes Evaluation Count:4 |
| 4 |
224 | break; executed: break; Execution Count:4 | 4 |
225 | if ((pe = tryMatch(size, QIcon::Selected, oppositeState))) partially evaluated: (pe = tryMatch(size, QIcon::Selected, oppositeState)) yes Evaluation Count:4 | no Evaluation Count:0 |
| 0-4 |
226 | break; executed: break; Execution Count:4 | 4 |
227 | } | 0 |
228 | | - |
229 | if (!pe) | 0 |
230 | return pe; never executed: return pe; | 0 |
231 | } | 0 |
232 | | - |
233 | if (sizeOnly ? (pe->size.isNull() || !pe->size.isValid()) : pe->pixmap.isNull()) { evaluated: sizeOnly yes Evaluation Count:39985 | yes Evaluation Count:4204 |
| 4204-39985 |
234 | pe->pixmap = QPixmap(pe->fileName); executed (the execution status of this line is deduced): pe->pixmap = QPixmap(pe->fileName); | - |
235 | if (!pe->pixmap.isNull()) evaluated: !pe->pixmap.isNull() yes Evaluation Count:330 | yes Evaluation Count:6 |
| 6-330 |
236 | pe->size = pe->pixmap.size(); executed: pe->size = pe->pixmap.size(); Execution Count:330 | 330 |
237 | } executed: } Execution Count:336 | 336 |
238 | | - |
239 | return pe; executed: return pe; Execution Count:44189 | 44189 |
240 | } | - |
241 | | - |
242 | QPixmap QPixmapIconEngine::pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) | - |
243 | { | - |
244 | QPixmap pm; executed (the execution status of this line is deduced): QPixmap pm; | - |
245 | QPixmapIconEngineEntry *pe = bestMatch(size, mode, state, false); executed (the execution status of this line is deduced): QPixmapIconEngineEntry *pe = bestMatch(size, mode, state, false); | - |
246 | if (pe) partially evaluated: pe yes Evaluation Count:4204 | no Evaluation Count:0 |
| 0-4204 |
247 | pm = pe->pixmap; executed: pm = pe->pixmap; Execution Count:4204 | 4204 |
248 | | - |
249 | if (pm.isNull()) { evaluated: pm.isNull() yes Evaluation Count:2 | yes Evaluation Count:4202 |
| 2-4202 |
250 | int idx = pixmaps.count(); executed (the execution status of this line is deduced): int idx = pixmaps.count(); | - |
251 | while (--idx >= 0) { partially evaluated: --idx >= 0 yes Evaluation Count:2 | no Evaluation Count:0 |
| 0-2 |
252 | if (pe == &pixmaps[idx]) { partially evaluated: pe == &pixmaps[idx] yes Evaluation Count:2 | no Evaluation Count:0 |
| 0-2 |
253 | pixmaps.remove(idx); executed (the execution status of this line is deduced): pixmaps.remove(idx); | - |
254 | break; executed: break; Execution Count:2 | 2 |
255 | } | - |
256 | } | 0 |
257 | if (pixmaps.isEmpty()) evaluated: pixmaps.isEmpty() yes Evaluation Count:1 | yes Evaluation Count:1 |
| 1 |
258 | return pm; executed: return pm; Execution Count:1 | 1 |
259 | else | - |
260 | return pixmap(size, mode, state); executed: return pixmap(size, mode, state); Execution Count:1 | 1 |
261 | } | - |
262 | | - |
263 | QSize actualSize = pm.size(); executed (the execution status of this line is deduced): QSize actualSize = pm.size(); | - |
264 | if (!actualSize.isNull() && (actualSize.width() > size.width() || actualSize.height() > size.height())) partially evaluated: !actualSize.isNull() yes Evaluation Count:4202 | no Evaluation Count:0 |
evaluated: actualSize.width() > size.width() yes Evaluation Count:305 | yes Evaluation Count:3897 |
evaluated: actualSize.height() > size.height() yes Evaluation Count:5 | yes Evaluation Count:3892 |
| 0-4202 |
265 | actualSize.scale(size, Qt::KeepAspectRatio); executed: actualSize.scale(size, Qt::KeepAspectRatio); Execution Count:310 | 310 |
266 | | - |
267 | QString key = QLatin1String("qt_") executed (the execution status of this line is deduced): QString key = QLatin1String("qt_") | - |
268 | % HexString<quint64>(pm.cacheKey()) executed (the execution status of this line is deduced): % HexString<quint64>(pm.cacheKey()) | - |
269 | % HexString<uint>(pe->mode) executed (the execution status of this line is deduced): % HexString<uint>(pe->mode) | - |
270 | % HexString<quint64>(QGuiApplication::palette().cacheKey()) executed (the execution status of this line is deduced): % HexString<quint64>(QGuiApplication::palette().cacheKey()) | - |
271 | % HexString<uint>(actualSize.width()) executed (the execution status of this line is deduced): % HexString<uint>(actualSize.width()) | - |
272 | % HexString<uint>(actualSize.height()); executed (the execution status of this line is deduced): % HexString<uint>(actualSize.height()); | - |
273 | | - |
274 | if (mode == QIcon::Active) { evaluated: mode == QIcon::Active yes Evaluation Count:19 | yes Evaluation Count:4183 |
| 19-4183 |
275 | if (QPixmapCache::find(key % HexString<uint>(mode), pm)) evaluated: QPixmapCache::find(key % HexString<uint>(mode), pm) yes Evaluation Count:4 | yes Evaluation Count:15 |
| 4-15 |
276 | return pm; // horray executed: return pm; Execution Count:4 | 4 |
277 | if (QPixmapCache::find(key % HexString<uint>(QIcon::Normal), pm)) { evaluated: QPixmapCache::find(key % HexString<uint>(QIcon::Normal), pm) yes Evaluation Count:11 | yes Evaluation Count:4 |
| 4-11 |
278 | QPixmap active = pm; executed (the execution status of this line is deduced): QPixmap active = pm; | - |
279 | if (QGuiApplication *guiApp = qobject_cast<QGuiApplication *>(qApp)) partially evaluated: QGuiApplication *guiApp = qobject_cast<QGuiApplication *>((static_cast<QGuiApplication *>(QCoreApplication::instance()))) yes Evaluation Count:11 | no Evaluation Count:0 |
| 0-11 |
280 | active = static_cast<QGuiApplicationPrivate*>(QObjectPrivate::get(guiApp))->applyQIconStyleHelper(QIcon::Active, pm); executed: active = static_cast<QGuiApplicationPrivate*>(QObjectPrivate::get(guiApp))->applyQIconStyleHelper(QIcon::Active, pm); Execution Count:11 | 11 |
281 | if (pm.cacheKey() == active.cacheKey()) partially evaluated: pm.cacheKey() == active.cacheKey() yes Evaluation Count:11 | no Evaluation Count:0 |
| 0-11 |
282 | return pm; executed: return pm; Execution Count:11 | 11 |
283 | } | 0 |
284 | } executed: } Execution Count:4 | 4 |
285 | | - |
286 | if (!QPixmapCache::find(key % HexString<uint>(mode), pm)) { evaluated: !QPixmapCache::find(key % HexString<uint>(mode), pm) yes Evaluation Count:1168 | yes Evaluation Count:3019 |
| 1168-3019 |
287 | if (pm.size() != actualSize) evaluated: pm.size() != actualSize yes Evaluation Count:87 | yes Evaluation Count:1081 |
| 87-1081 |
288 | pm = pm.scaled(actualSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); executed: pm = pm.scaled(actualSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation); Execution Count:87 | 87 |
289 | if (pe->mode != mode && mode != QIcon::Normal) { evaluated: pe->mode != mode yes Evaluation Count:40 | yes Evaluation Count:1128 |
evaluated: mode != QIcon::Normal yes Evaluation Count:34 | yes Evaluation Count:6 |
| 6-1128 |
290 | QPixmap generated = pm; executed (the execution status of this line is deduced): QPixmap generated = pm; | - |
291 | if (QGuiApplication *guiApp = qobject_cast<QGuiApplication *>(qApp)) partially evaluated: QGuiApplication *guiApp = qobject_cast<QGuiApplication *>((static_cast<QGuiApplication *>(QCoreApplication::instance()))) yes Evaluation Count:34 | no Evaluation Count:0 |
| 0-34 |
292 | generated = static_cast<QGuiApplicationPrivate*>(QObjectPrivate::get(guiApp))->applyQIconStyleHelper(mode, pm); executed: generated = static_cast<QGuiApplicationPrivate*>(QObjectPrivate::get(guiApp))->applyQIconStyleHelper(mode, pm); Execution Count:34 | 34 |
293 | if (!generated.isNull()) partially evaluated: !generated.isNull() yes Evaluation Count:34 | no Evaluation Count:0 |
| 0-34 |
294 | pm = generated; executed: pm = generated; Execution Count:34 | 34 |
295 | } executed: } Execution Count:34 | 34 |
296 | QPixmapCache::insert(key % HexString<uint>(mode), pm); executed (the execution status of this line is deduced): QPixmapCache::insert(key % HexString<uint>(mode), pm); | - |
297 | } executed: } Execution Count:1168 | 1168 |
298 | return pm; executed: return pm; Execution Count:4187 | 4187 |
299 | } | - |
300 | | - |
301 | QSize QPixmapIconEngine::actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state) | - |
302 | { | - |
303 | QSize actualSize; executed (the execution status of this line is deduced): QSize actualSize; | - |
304 | if (QPixmapIconEngineEntry *pe = bestMatch(size, mode, state, true)) partially evaluated: QPixmapIconEngineEntry *pe = bestMatch(size, mode, state, true) yes Evaluation Count:39985 | no Evaluation Count:0 |
| 0-39985 |
305 | actualSize = pe->size; executed: actualSize = pe->size; Execution Count:39985 | 39985 |
306 | | - |
307 | if (actualSize.isNull()) partially evaluated: actualSize.isNull() no Evaluation Count:0 | yes Evaluation Count:39985 |
| 0-39985 |
308 | return actualSize; never executed: return actualSize; | 0 |
309 | | - |
310 | if (!actualSize.isNull() && (actualSize.width() > size.width() || actualSize.height() > size.height())) partially evaluated: !actualSize.isNull() yes Evaluation Count:39985 | no Evaluation Count:0 |
evaluated: actualSize.width() > size.width() yes Evaluation Count:479 | yes Evaluation Count:39506 |
evaluated: actualSize.height() > size.height() yes Evaluation Count:5 | yes Evaluation Count:39501 |
| 0-39985 |
311 | actualSize.scale(size, Qt::KeepAspectRatio); executed: actualSize.scale(size, Qt::KeepAspectRatio); Execution Count:484 | 484 |
312 | return actualSize; executed: return actualSize; Execution Count:39985 | 39985 |
313 | } | - |
314 | | - |
315 | void QPixmapIconEngine::addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state) | - |
316 | { | - |
317 | if (!pixmap.isNull()) { partially evaluated: !pixmap.isNull() yes Evaluation Count:2494 | no Evaluation Count:0 |
| 0-2494 |
318 | QPixmapIconEngineEntry *pe = tryMatch(pixmap.size(), mode, state); executed (the execution status of this line is deduced): QPixmapIconEngineEntry *pe = tryMatch(pixmap.size(), mode, state); | - |
319 | if(pe && pe->size == pixmap.size()) { evaluated: pe yes Evaluation Count:7 | yes Evaluation Count:2487 |
partially evaluated: pe->size == pixmap.size() no Evaluation Count:0 | yes Evaluation Count:7 |
| 0-2487 |
320 | pe->pixmap = pixmap; never executed (the execution status of this line is deduced): pe->pixmap = pixmap; | - |
321 | pe->fileName.clear(); never executed (the execution status of this line is deduced): pe->fileName.clear(); | - |
322 | } else { | 0 |
323 | pixmaps += QPixmapIconEngineEntry(pixmap, mode, state); executed (the execution status of this line is deduced): pixmaps += QPixmapIconEngineEntry(pixmap, mode, state); | - |
324 | } executed: } Execution Count:2494 | 2494 |
325 | } | - |
326 | } executed: } Execution Count:2494 | 2494 |
327 | | - |
328 | void QPixmapIconEngine::addFile(const QString &fileName, const QSize &_size, QIcon::Mode mode, QIcon::State state) | - |
329 | { | - |
330 | if (!fileName.isEmpty()) { partially evaluated: !fileName.isEmpty() yes Evaluation Count:6980 | no Evaluation Count:0 |
| 0-6980 |
331 | QSize size = _size; executed (the execution status of this line is deduced): QSize size = _size; | - |
332 | QPixmap pixmap; executed (the execution status of this line is deduced): QPixmap pixmap; | - |
333 | | - |
334 | QString abs = fileName; executed (the execution status of this line is deduced): QString abs = fileName; | - |
335 | if (fileName.at(0) != QLatin1Char(':')) evaluated: fileName.at(0) != QLatin1Char(':') yes Evaluation Count:26 | yes Evaluation Count:6954 |
| 26-6954 |
336 | abs = QFileInfo(fileName).absoluteFilePath(); executed: abs = QFileInfo(fileName).absoluteFilePath(); Execution Count:26 | 26 |
337 | | - |
338 | for (int i = 0; i < pixmaps.count(); ++i) { evaluated: i < pixmaps.count() yes Evaluation Count:10705 | yes Evaluation Count:6980 |
| 6980-10705 |
339 | if (pixmaps.at(i).mode == mode && pixmaps.at(i).state == state) { evaluated: pixmaps.at(i).mode == mode yes Evaluation Count:10692 | yes Evaluation Count:13 |
evaluated: pixmaps.at(i).state == state yes Evaluation Count:6657 | yes Evaluation Count:4035 |
| 13-10692 |
340 | QPixmapIconEngineEntry *pe = &pixmaps[i]; executed (the execution status of this line is deduced): QPixmapIconEngineEntry *pe = &pixmaps[i]; | - |
341 | if(size == QSize()) { evaluated: size == QSize() yes Evaluation Count:5 | yes Evaluation Count:6652 |
| 5-6652 |
342 | pixmap = QPixmap(abs); executed (the execution status of this line is deduced): pixmap = QPixmap(abs); | - |
343 | size = pixmap.size(); executed (the execution status of this line is deduced): size = pixmap.size(); | - |
344 | } executed: } Execution Count:5 | 5 |
345 | if (pe->size == QSize() && pe->pixmap.isNull()) { evaluated: pe->size == QSize() yes Evaluation Count:900 | yes Evaluation Count:5757 |
partially evaluated: pe->pixmap.isNull() yes Evaluation Count:900 | no Evaluation Count:0 |
| 0-5757 |
346 | pe->pixmap = QPixmap(pe->fileName); executed (the execution status of this line is deduced): pe->pixmap = QPixmap(pe->fileName); | - |
347 | pe->size = pe->pixmap.size(); executed (the execution status of this line is deduced): pe->size = pe->pixmap.size(); | - |
348 | } executed: } Execution Count:900 | 900 |
349 | if(pe->size == size) { partially evaluated: pe->size == size no Evaluation Count:0 | yes Evaluation Count:6657 |
| 0-6657 |
350 | pe->pixmap = pixmap; never executed (the execution status of this line is deduced): pe->pixmap = pixmap; | - |
351 | pe->fileName = abs; never executed (the execution status of this line is deduced): pe->fileName = abs; | - |
352 | return; | 0 |
353 | } | - |
354 | } executed: } Execution Count:6657 | 6657 |
355 | } executed: } Execution Count:10705 | 10705 |
356 | QPixmapIconEngineEntry e(abs, size, mode, state); executed (the execution status of this line is deduced): QPixmapIconEngineEntry e(abs, size, mode, state); | - |
357 | e.pixmap = pixmap; executed (the execution status of this line is deduced): e.pixmap = pixmap; | - |
358 | pixmaps += e; executed (the execution status of this line is deduced): pixmaps += e; | - |
359 | } executed: } Execution Count:6980 | 6980 |
360 | } executed: } Execution Count:6980 | 6980 |
361 | | - |
362 | QString QPixmapIconEngine::key() const | - |
363 | { | - |
364 | return QLatin1String("QPixmapIconEngine"); executed: return QLatin1String("QPixmapIconEngine"); Execution Count:10 | 10 |
365 | } | - |
366 | | - |
367 | QIconEngine *QPixmapIconEngine::clone() const | - |
368 | { | - |
369 | return new QPixmapIconEngine(*this); executed: return new QPixmapIconEngine(*this); Execution Count:5 | 5 |
370 | } | - |
371 | | - |
372 | bool QPixmapIconEngine::read(QDataStream &in) | - |
373 | { | - |
374 | int num_entries; executed (the execution status of this line is deduced): int num_entries; | - |
375 | QPixmap pm; executed (the execution status of this line is deduced): QPixmap pm; | - |
376 | QString fileName; executed (the execution status of this line is deduced): QString fileName; | - |
377 | QSize sz; executed (the execution status of this line is deduced): QSize sz; | - |
378 | uint mode; executed (the execution status of this line is deduced): uint mode; | - |
379 | uint state; executed (the execution status of this line is deduced): uint state; | - |
380 | | - |
381 | in >> num_entries; executed (the execution status of this line is deduced): in >> num_entries; | - |
382 | for (int i=0; i < num_entries; ++i) { evaluated: i < num_entries yes Evaluation Count:16 | yes Evaluation Count:10 |
| 10-16 |
383 | if (in.atEnd()) { partially evaluated: in.atEnd() no Evaluation Count:0 | yes Evaluation Count:16 |
| 0-16 |
384 | pixmaps.clear(); never executed (the execution status of this line is deduced): pixmaps.clear(); | - |
385 | return false; never executed: return false; | 0 |
386 | } | - |
387 | in >> pm; executed (the execution status of this line is deduced): in >> pm; | - |
388 | in >> fileName; executed (the execution status of this line is deduced): in >> fileName; | - |
389 | in >> sz; executed (the execution status of this line is deduced): in >> sz; | - |
390 | in >> mode; executed (the execution status of this line is deduced): in >> mode; | - |
391 | in >> state; executed (the execution status of this line is deduced): in >> state; | - |
392 | if (pm.isNull()) { partially evaluated: pm.isNull() no Evaluation Count:0 | yes Evaluation Count:16 |
| 0-16 |
393 | addFile(fileName, sz, QIcon::Mode(mode), QIcon::State(state)); never executed (the execution status of this line is deduced): addFile(fileName, sz, QIcon::Mode(mode), QIcon::State(state)); | - |
394 | } else { | 0 |
395 | QPixmapIconEngineEntry pe(fileName, sz, QIcon::Mode(mode), QIcon::State(state)); executed (the execution status of this line is deduced): QPixmapIconEngineEntry pe(fileName, sz, QIcon::Mode(mode), QIcon::State(state)); | - |
396 | pe.pixmap = pm; executed (the execution status of this line is deduced): pe.pixmap = pm; | - |
397 | pixmaps += pe; executed (the execution status of this line is deduced): pixmaps += pe; | - |
398 | } executed: } Execution Count:16 | 16 |
399 | } | - |
400 | return true; executed: return true; Execution Count:10 | 10 |
401 | } | - |
402 | | - |
403 | bool QPixmapIconEngine::write(QDataStream &out) const | - |
404 | { | - |
405 | int num_entries = pixmaps.size(); executed (the execution status of this line is deduced): int num_entries = pixmaps.size(); | - |
406 | out << num_entries; executed (the execution status of this line is deduced): out << num_entries; | - |
407 | for (int i=0; i < num_entries; ++i) { evaluated: i < num_entries yes Evaluation Count:16 | yes Evaluation Count:10 |
| 10-16 |
408 | if (pixmaps.at(i).pixmap.isNull()) evaluated: pixmaps.at(i).pixmap.isNull() yes Evaluation Count:10 | yes Evaluation Count:6 |
| 6-10 |
409 | out << QPixmap(pixmaps.at(i).fileName); executed: out << QPixmap(pixmaps.at(i).fileName); Execution Count:10 | 10 |
410 | else | - |
411 | out << pixmaps.at(i).pixmap; executed: out << pixmaps.at(i).pixmap; Execution Count:6 | 6 |
412 | out << pixmaps.at(i).fileName; executed (the execution status of this line is deduced): out << pixmaps.at(i).fileName; | - |
413 | out << pixmaps.at(i).size; executed (the execution status of this line is deduced): out << pixmaps.at(i).size; | - |
414 | out << (uint) pixmaps.at(i).mode; executed (the execution status of this line is deduced): out << (uint) pixmaps.at(i).mode; | - |
415 | out << (uint) pixmaps.at(i).state; executed (the execution status of this line is deduced): out << (uint) pixmaps.at(i).state; | - |
416 | } executed: } Execution Count:16 | 16 |
417 | return true; executed: return true; Execution Count:10 | 10 |
418 | } | - |
419 | | - |
420 | void QPixmapIconEngine::virtual_hook(int id, void *data) | - |
421 | { | - |
422 | switch (id) { | - |
423 | case QIconEngine::AvailableSizesHook: { | - |
424 | QIconEngine::AvailableSizesArgument &arg = executed (the execution status of this line is deduced): QIconEngine::AvailableSizesArgument &arg = | - |
425 | *reinterpret_cast<QIconEngine::AvailableSizesArgument*>(data); executed (the execution status of this line is deduced): *reinterpret_cast<QIconEngine::AvailableSizesArgument*>(data); | - |
426 | arg.sizes.clear(); executed (the execution status of this line is deduced): arg.sizes.clear(); | - |
427 | for (int i = 0; i < pixmaps.size(); ++i) { evaluated: i < pixmaps.size() yes Evaluation Count:40 | yes Evaluation Count:16 |
| 16-40 |
428 | QPixmapIconEngineEntry &pe = pixmaps[i]; executed (the execution status of this line is deduced): QPixmapIconEngineEntry &pe = pixmaps[i]; | - |
429 | if (pe.size == QSize() && pe.pixmap.isNull()) { evaluated: pe.size == QSize() yes Evaluation Count:2 | yes Evaluation Count:38 |
partially evaluated: pe.pixmap.isNull() yes Evaluation Count:2 | no Evaluation Count:0 |
| 0-38 |
430 | pe.pixmap = QPixmap(pe.fileName); executed (the execution status of this line is deduced): pe.pixmap = QPixmap(pe.fileName); | - |
431 | pe.size = pe.pixmap.size(); executed (the execution status of this line is deduced): pe.size = pe.pixmap.size(); | - |
432 | } executed: } Execution Count:2 | 2 |
433 | if (pe.mode == arg.mode && pe.state == arg.state && !pe.size.isEmpty()) evaluated: pe.mode == arg.mode yes Evaluation Count:34 | yes Evaluation Count:6 |
evaluated: pe.state == arg.state yes Evaluation Count:30 | yes Evaluation Count:4 |
evaluated: !pe.size.isEmpty() yes Evaluation Count:29 | yes Evaluation Count:1 |
| 1-34 |
434 | arg.sizes.push_back(pe.size); executed: arg.sizes.push_back(pe.size); Execution Count:29 | 29 |
435 | } executed: } Execution Count:40 | 40 |
436 | break; executed: break; Execution Count:16 | 16 |
437 | } | - |
438 | default: | - |
439 | QIconEngine::virtual_hook(id, data); executed (the execution status of this line is deduced): QIconEngine::virtual_hook(id, data); | - |
440 | } executed: } Execution Count:1 | 1 |
441 | } executed: } Execution Count:17 | 17 |
442 | | - |
443 | #ifndef QT_NO_LIBRARY | - |
444 | Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, never executed: delete x; executed: return thisGlobalStatic.pointer.load(); Execution Count:2090 partially evaluated: !thisGlobalStatic.pointer.testAndSetOrdered(0, x) no Evaluation Count:0 | yes Evaluation Count:15 |
evaluated: !thisGlobalStatic.pointer.load() yes Evaluation Count:15 | yes Evaluation Count:2075 |
partially evaluated: !thisGlobalStatic.destroyed yes Evaluation Count:15 | no Evaluation Count:0 |
| 0-2090 |
445 | (QIconEngineFactoryInterface_iid, QLatin1String("/iconengines"), Qt::CaseInsensitive)) | - |
446 | #endif | - |
447 | | - |
448 | | - |
449 | | - |
450 | /*! | - |
451 | \class QIcon | - |
452 | | - |
453 | \brief The QIcon class provides scalable icons in different modes | - |
454 | and states. | - |
455 | | - |
456 | \ingroup painting | - |
457 | \ingroup shared | - |
458 | \inmodule QtGui | - |
459 | | - |
460 | A QIcon can generate smaller, larger, active, and disabled pixmaps | - |
461 | from the set of pixmaps it is given. Such pixmaps are used by Qt | - |
462 | widgets to show an icon representing a particular action. | - |
463 | | - |
464 | The simplest use of QIcon is to create one from a QPixmap file or | - |
465 | resource, and then use it, allowing Qt to work out all the required | - |
466 | icon styles and sizes. For example: | - |
467 | | - |
468 | \snippet code/src_gui_image_qicon.cpp 0 | - |
469 | | - |
470 | To undo a QIcon, simply set a null icon in its place: | - |
471 | | - |
472 | \snippet code/src_gui_image_qicon.cpp 1 | - |
473 | | - |
474 | Use the QImageReader::supportedImageFormats() and | - |
475 | QImageWriter::supportedImageFormats() functions to retrieve a | - |
476 | complete list of the supported file formats. | - |
477 | | - |
478 | When you retrieve a pixmap using pixmap(QSize, Mode, State), and no | - |
479 | pixmap for this given size, mode and state has been added with | - |
480 | addFile() or addPixmap(), then QIcon will generate one on the | - |
481 | fly. This pixmap generation happens in a QIconEngineV2. The default | - |
482 | engine scales pixmaps down if required, but never up, and it uses | - |
483 | the current style to calculate a disabled appearance. By using | - |
484 | custom icon engines, you can customize every aspect of generated | - |
485 | icons. With QIconEnginePluginV2 it is possible to register different | - |
486 | icon engines for different file suffixes, making it possible for | - |
487 | third parties to provide additional icon engines to those included | - |
488 | with Qt. | - |
489 | | - |
490 | \note Since Qt 4.2, an icon engine that supports SVG is included. | - |
491 | | - |
492 | \section1 Making Classes that Use QIcon | - |
493 | | - |
494 | If you write your own widgets that have an option to set a small | - |
495 | pixmap, consider allowing a QIcon to be set for that pixmap. The | - |
496 | Qt class QToolButton is an example of such a widget. | - |
497 | | - |
498 | Provide a method to set a QIcon, and when you draw the icon, choose | - |
499 | whichever pixmap is appropriate for the current state of your widget. | - |
500 | For example: | - |
501 | \snippet code/src_gui_image_qicon.cpp 2 | - |
502 | | - |
503 | You might also make use of the \c Active mode, perhaps making your | - |
504 | widget \c Active when the mouse is over the widget (see \l | - |
505 | QWidget::enterEvent()), while the mouse is pressed pending the | - |
506 | release that will activate the function, or when it is the currently | - |
507 | selected item. If the widget can be toggled, the "On" mode might be | - |
508 | used to draw a different icon. | - |
509 | | - |
510 | \image icon.png QIcon | - |
511 | | - |
512 | \sa {fowler}{GUI Design Handbook: Iconic Label}, {Icons Example} | - |
513 | */ | - |
514 | | - |
515 | | - |
516 | /*! | - |
517 | Constructs a null icon. | - |
518 | */ | - |
519 | QIcon::QIcon() | - |
520 | : d(0) | - |
521 | { | - |
522 | } executed: } Execution Count:510312 | 510312 |
523 | | - |
524 | /*! | - |
525 | Constructs an icon from a \a pixmap. | - |
526 | */ | - |
527 | QIcon::QIcon(const QPixmap &pixmap) | - |
528 | :d(0) | - |
529 | { | - |
530 | addPixmap(pixmap); executed (the execution status of this line is deduced): addPixmap(pixmap); | - |
531 | } executed: } Execution Count:26939 | 26939 |
532 | | - |
533 | /*! | - |
534 | Constructs a copy of \a other. This is very fast. | - |
535 | */ | - |
536 | QIcon::QIcon(const QIcon &other) | - |
537 | :d(other.d) | - |
538 | { | - |
539 | if (d) evaluated: d yes Evaluation Count:148121 | yes Evaluation Count:8583 |
| 8583-148121 |
540 | d->ref.ref(); executed: d->ref.ref(); Execution Count:148121 | 148121 |
541 | } executed: } Execution Count:156704 | 156704 |
542 | | - |
543 | /*! | - |
544 | Constructs an icon from the file with the given \a fileName. The | - |
545 | file will be loaded on demand. | - |
546 | | - |
547 | If \a fileName contains a relative path (e.g. the filename only) | - |
548 | the relevant file must be found relative to the runtime working | - |
549 | directory. | - |
550 | | - |
551 | The file name can be either refer to an actual file on disk or to | - |
552 | one of the application's embedded resources. See the | - |
553 | \l{resources.html}{Resource System} overview for details on how to | - |
554 | embed images and other resource files in the application's | - |
555 | executable. | - |
556 | | - |
557 | Use the QImageReader::supportedImageFormats() and | - |
558 | QImageWriter::supportedImageFormats() functions to retrieve a | - |
559 | complete list of the supported file formats. | - |
560 | */ | - |
561 | QIcon::QIcon(const QString &fileName) | - |
562 | : d(0) | - |
563 | { | - |
564 | addFile(fileName); executed (the execution status of this line is deduced): addFile(fileName); | - |
565 | } executed: } Execution Count:323 | 323 |
566 | | - |
567 | | - |
568 | /*! | - |
569 | Creates an icon with a specific icon \a engine. The icon takes | - |
570 | ownership of the engine. | - |
571 | */ | - |
572 | QIcon::QIcon(QIconEngine *engine) | - |
573 | :d(new QIconPrivate) | - |
574 | { | - |
575 | d->engine = engine; executed (the execution status of this line is deduced): d->engine = engine; | - |
576 | } executed: } Execution Count:5 | 5 |
577 | | - |
578 | /*! | - |
579 | Destroys the icon. | - |
580 | */ | - |
581 | QIcon::~QIcon() | - |
582 | { | - |
583 | if (d && !d->ref.deref()) evaluated: d yes Evaluation Count:194693 | yes Evaluation Count:499032 |
evaluated: !d->ref.deref() yes Evaluation Count:4413 | yes Evaluation Count:190280 |
| 4413-499032 |
584 | delete d; executed: delete d; Execution Count:4413 | 4413 |
585 | } executed: } Execution Count:693725 | 693725 |
586 | | - |
587 | /*! | - |
588 | Assigns the \a other icon to this icon and returns a reference to | - |
589 | this icon. | - |
590 | */ | - |
591 | QIcon &QIcon::operator=(const QIcon &other) | - |
592 | { | - |
593 | if (other.d) evaluated: other.d yes Evaluation Count:42658 | yes Evaluation Count:235039 |
| 42658-235039 |
594 | other.d->ref.ref(); executed: other.d->ref.ref(); Execution Count:42658 | 42658 |
595 | if (d && !d->ref.deref()) evaluated: d yes Evaluation Count:613 | yes Evaluation Count:277084 |
evaluated: !d->ref.deref() yes Evaluation Count:119 | yes Evaluation Count:494 |
| 119-277084 |
596 | delete d; executed: delete d; Execution Count:119 | 119 |
597 | d = other.d; executed (the execution status of this line is deduced): d = other.d; | - |
598 | return *this; executed: return *this; Execution Count:277697 | 277697 |
599 | } | - |
600 | | - |
601 | /*! | - |
602 | \fn void QIcon::swap(QIcon &other) | - |
603 | \since 4.8 | - |
604 | | - |
605 | Swaps icon \a other with this icon. This operation is very | - |
606 | fast and never fails. | - |
607 | */ | - |
608 | | - |
609 | /*! | - |
610 | Returns the icon as a QVariant. | - |
611 | */ | - |
612 | QIcon::operator QVariant() const | - |
613 | { | - |
614 | return QVariant(QVariant::Icon, this); executed: return QVariant(QVariant::Icon, this); Execution Count:31909 | 31909 |
615 | } | - |
616 | | - |
617 | /*! \fn int QIcon::serialNumber() const | - |
618 | \obsolete | - |
619 | | - |
620 | Returns a number that identifies the contents of this | - |
621 | QIcon object. Distinct QIcon objects can have | - |
622 | the same serial number if they refer to the same contents | - |
623 | (but they don't have to). Also, the serial number of | - |
624 | a QIcon object may change during its lifetime. | - |
625 | | - |
626 | Use cacheKey() instead. | - |
627 | | - |
628 | A null icon always has a serial number of 0. | - |
629 | | - |
630 | Serial numbers are mostly useful in conjunction with caching. | - |
631 | | - |
632 | \sa QPixmap::serialNumber() | - |
633 | */ | - |
634 | | - |
635 | /*! | - |
636 | Returns a number that identifies the contents of this QIcon | - |
637 | object. Distinct QIcon objects can have the same key if | - |
638 | they refer to the same contents. | - |
639 | \since 4.3 | - |
640 | | - |
641 | The cacheKey() will change when the icon is altered via | - |
642 | addPixmap() or addFile(). | - |
643 | | - |
644 | Cache keys are mostly useful in conjunction with caching. | - |
645 | | - |
646 | \sa QPixmap::cacheKey() | - |
647 | */ | - |
648 | qint64 QIcon::cacheKey() const | - |
649 | { | - |
650 | if (!d) partially evaluated: !d no Evaluation Count:0 | yes Evaluation Count:1296 |
| 0-1296 |
651 | return 0; never executed: return 0; | 0 |
652 | return (((qint64) d->serialNum) << 32) | ((qint64) (d->detach_no)); executed: return (((qint64) d->serialNum) << 32) | ((qint64) (d->detach_no)); Execution Count:1296 | 1296 |
653 | } | - |
654 | | - |
655 | /*! | - |
656 | Returns a pixmap with the requested \a size, \a mode, and \a | - |
657 | state, generating one if necessary. The pixmap might be smaller than | - |
658 | requested, but never larger. | - |
659 | | - |
660 | \sa actualSize(), paint() | - |
661 | */ | - |
662 | QPixmap QIcon::pixmap(const QSize &size, Mode mode, State state) const | - |
663 | { | - |
664 | if (!d) evaluated: !d yes Evaluation Count:47 | yes Evaluation Count:1620 |
| 47-1620 |
665 | return QPixmap(); executed: return QPixmap(); Execution Count:47 | 47 |
666 | return d->engine->pixmap(size, mode, state); executed: return d->engine->pixmap(size, mode, state); Execution Count:1620 | 1620 |
667 | } | - |
668 | | - |
669 | /*! | - |
670 | \fn QPixmap QIcon::pixmap(int w, int h, Mode mode = Normal, State state = Off) const | - |
671 | | - |
672 | \overload | - |
673 | | - |
674 | Returns a pixmap of size QSize(\a w, \a h). The pixmap might be smaller than | - |
675 | requested, but never larger. | - |
676 | */ | - |
677 | | - |
678 | /*! | - |
679 | \fn QPixmap QIcon::pixmap(int extent, Mode mode = Normal, State state = Off) const | - |
680 | | - |
681 | \overload | - |
682 | | - |
683 | Returns a pixmap of size QSize(\a extent, \a extent). The pixmap might be smaller | - |
684 | than requested, but never larger. | - |
685 | */ | - |
686 | | - |
687 | /*! Returns the actual size of the icon for the requested \a size, \a | - |
688 | mode, and \a state. The result might be smaller than requested, but | - |
689 | never larger. | - |
690 | | - |
691 | \sa pixmap(), paint() | - |
692 | */ | - |
693 | QSize QIcon::actualSize(const QSize &size, Mode mode, State state) const | - |
694 | { | - |
695 | if (!d) evaluated: !d yes Evaluation Count:2 | yes Evaluation Count:37398 |
| 2-37398 |
696 | return QSize(); executed: return QSize(); Execution Count:2 | 2 |
697 | return d->engine->actualSize(size, mode, state); executed: return d->engine->actualSize(size, mode, state); Execution Count:37398 | 37398 |
698 | } | - |
699 | | - |
700 | | - |
701 | /*! | - |
702 | Uses the \a painter to paint the icon with specified \a alignment, | - |
703 | required \a mode, and \a state into the rectangle \a rect. | - |
704 | | - |
705 | \sa actualSize(), pixmap() | - |
706 | */ | - |
707 | void QIcon::paint(QPainter *painter, const QRect &rect, Qt::Alignment alignment, Mode mode, State state) const | - |
708 | { | - |
709 | if (!d || !painter) evaluated: !d yes Evaluation Count:10914 | yes Evaluation Count:2587 |
partially evaluated: !painter no Evaluation Count:0 | yes Evaluation Count:2587 |
| 0-10914 |
710 | return; executed: return; Execution Count:10914 | 10914 |
711 | | - |
712 | // Copy of QStyle::alignedRect | - |
713 | const QSize size = d->engine->actualSize(rect.size(), mode, state); never executed (the execution status of this line is deduced): const QSize size = d->engine->actualSize(rect.size(), mode, state); | - |
714 | alignment = QGuiApplicationPrivate::visualAlignment(painter->layoutDirection(), alignment); never executed (the execution status of this line is deduced): alignment = QGuiApplicationPrivate::visualAlignment(painter->layoutDirection(), alignment); | - |
715 | int x = rect.x(); never executed (the execution status of this line is deduced): int x = rect.x(); | - |
716 | int y = rect.y(); never executed (the execution status of this line is deduced): int y = rect.y(); | - |
717 | int w = size.width(); never executed (the execution status of this line is deduced): int w = size.width(); | - |
718 | int h = size.height(); never executed (the execution status of this line is deduced): int h = size.height(); | - |
719 | if ((alignment & Qt::AlignVCenter) == Qt::AlignVCenter) partially evaluated: (alignment & Qt::AlignVCenter) == Qt::AlignVCenter yes Evaluation Count:2587 | no Evaluation Count:0 |
| 0-2587 |
720 | y += rect.size().height()/2 - h/2; executed: y += rect.size().height()/2 - h/2; Execution Count:2587 | 2587 |
721 | else if ((alignment & Qt::AlignBottom) == Qt::AlignBottom) never evaluated: (alignment & Qt::AlignBottom) == Qt::AlignBottom | 0 |
722 | y += rect.size().height() - h; never executed: y += rect.size().height() - h; | 0 |
723 | if ((alignment & Qt::AlignRight) == Qt::AlignRight) partially evaluated: (alignment & Qt::AlignRight) == Qt::AlignRight no Evaluation Count:0 | yes Evaluation Count:2587 |
| 0-2587 |
724 | x += rect.size().width() - w; never executed: x += rect.size().width() - w; | 0 |
725 | else if ((alignment & Qt::AlignHCenter) == Qt::AlignHCenter) partially evaluated: (alignment & Qt::AlignHCenter) == Qt::AlignHCenter yes Evaluation Count:2587 | no Evaluation Count:0 |
| 0-2587 |
726 | x += rect.size().width()/2 - w/2; executed: x += rect.size().width()/2 - w/2; Execution Count:2587 | 2587 |
727 | QRect alignedRect(x, y, w, h); executed (the execution status of this line is deduced): QRect alignedRect(x, y, w, h); | - |
728 | | - |
729 | d->engine->paint(painter, alignedRect, mode, state); executed (the execution status of this line is deduced): d->engine->paint(painter, alignedRect, mode, state); | - |
730 | } executed: } Execution Count:2587 | 2587 |
731 | | - |
732 | /*! | - |
733 | \fn void QIcon::paint(QPainter *painter, int x, int y, int w, int h, Qt::Alignment alignment, | - |
734 | Mode mode, State state) const | - |
735 | | - |
736 | \overload | - |
737 | | - |
738 | Paints the icon into the rectangle QRect(\a x, \a y, \a w, \a h). | - |
739 | */ | - |
740 | | - |
741 | /*! | - |
742 | Returns true if the icon is empty; otherwise returns false. | - |
743 | | - |
744 | An icon is empty if it has neither a pixmap nor a filename. | - |
745 | | - |
746 | Note: Even a non-null icon might not be able to create valid | - |
747 | pixmaps, eg. if the file does not exist or cannot be read. | - |
748 | */ | - |
749 | bool QIcon::isNull() const | - |
750 | { | - |
751 | return !d; executed: return !d; Execution Count:279532 | 279532 |
752 | } | - |
753 | | - |
754 | /*!\internal | - |
755 | */ | - |
756 | bool QIcon::isDetached() const | - |
757 | { | - |
758 | return !d || d->ref.load() == 1; never executed: return !d || d->ref.load() == 1; | 0 |
759 | } | - |
760 | | - |
761 | /*! \internal | - |
762 | */ | - |
763 | void QIcon::detach() | - |
764 | { | - |
765 | if (d) { partially evaluated: d yes Evaluation Count:4954 | no Evaluation Count:0 |
| 0-4954 |
766 | if (d->ref.load() != 1) { evaluated: d->ref.load() != 1 yes Evaluation Count:5 | yes Evaluation Count:4949 |
| 5-4949 |
767 | QIconPrivate *x = new QIconPrivate; executed (the execution status of this line is deduced): QIconPrivate *x = new QIconPrivate; | - |
768 | x->engine = d->engine->clone(); executed (the execution status of this line is deduced): x->engine = d->engine->clone(); | - |
769 | if (!d->ref.deref()) partially evaluated: !d->ref.deref() no Evaluation Count:0 | yes Evaluation Count:5 |
| 0-5 |
770 | delete d; never executed: delete d; | 0 |
771 | d = x; executed (the execution status of this line is deduced): d = x; | - |
772 | } executed: } Execution Count:5 | 5 |
773 | ++d->detach_no; executed (the execution status of this line is deduced): ++d->detach_no; | - |
774 | } executed: } Execution Count:4954 | 4954 |
775 | } executed: } Execution Count:4954 | 4954 |
776 | | - |
777 | /*! | - |
778 | Adds \a pixmap to the icon, as a specialization for \a mode and | - |
779 | \a state. | - |
780 | | - |
781 | Custom icon engines are free to ignore additionally added | - |
782 | pixmaps. | - |
783 | | - |
784 | \sa addFile() | - |
785 | */ | - |
786 | void QIcon::addPixmap(const QPixmap &pixmap, Mode mode, State state) | - |
787 | { | - |
788 | if (pixmap.isNull()) evaluated: pixmap.isNull() yes Evaluation Count:26722 | yes Evaluation Count:2494 |
| 2494-26722 |
789 | return; executed: return; Execution Count:26722 | 26722 |
790 | if (!d) { evaluated: !d yes Evaluation Count:2430 | yes Evaluation Count:64 |
| 64-2430 |
791 | d = new QIconPrivate; executed (the execution status of this line is deduced): d = new QIconPrivate; | - |
792 | d->engine = new QPixmapIconEngine; executed (the execution status of this line is deduced): d->engine = new QPixmapIconEngine; | - |
793 | } else { executed: } Execution Count:2430 | 2430 |
794 | detach(); executed (the execution status of this line is deduced): detach(); | - |
795 | } executed: } Execution Count:64 | 64 |
796 | d->engine->addPixmap(pixmap, mode, state); executed (the execution status of this line is deduced): d->engine->addPixmap(pixmap, mode, state); | - |
797 | } executed: } Execution Count:2494 | 2494 |
798 | | - |
799 | | - |
800 | /*! Adds an image from the file with the given \a fileName to the | - |
801 | icon, as a specialization for \a size, \a mode and \a state. The | - |
802 | file will be loaded on demand. Note: custom icon engines are free | - |
803 | to ignore additionally added pixmaps. | - |
804 | | - |
805 | If \a fileName contains a relative path (e.g. the filename only) | - |
806 | the relevant file must be found relative to the runtime working | - |
807 | directory. | - |
808 | | - |
809 | The file name can be either refer to an actual file on disk or to | - |
810 | one of the application's embedded resources. See the | - |
811 | \l{resources.html}{Resource System} overview for details on how to | - |
812 | embed images and other resource files in the application's | - |
813 | executable. | - |
814 | | - |
815 | Use the QImageReader::supportedImageFormats() and | - |
816 | QImageWriter::supportedImageFormats() functions to retrieve a | - |
817 | complete list of the supported file formats. | - |
818 | | - |
819 | Note: When you add a non-empty filename to a QIcon, the icon becomes | - |
820 | non-null, even if the file doesn't exist or points to a corrupt file. | - |
821 | | - |
822 | \sa addPixmap() | - |
823 | */ | - |
824 | void QIcon::addFile(const QString &fileName, const QSize &size, Mode mode, State state) | - |
825 | { | - |
826 | if (fileName.isEmpty()) evaluated: fileName.isEmpty() yes Evaluation Count:2 | yes Evaluation Count:6980 |
| 2-6980 |
827 | return; executed: return; Execution Count:2 | 2 |
828 | if (!d) { evaluated: !d yes Evaluation Count:2091 | yes Evaluation Count:4889 |
| 2091-4889 |
829 | #ifndef QT_NO_LIBRARY | - |
830 | QFileInfo info(fileName); executed (the execution status of this line is deduced): QFileInfo info(fileName); | - |
831 | QString suffix = info.suffix(); executed (the execution status of this line is deduced): QString suffix = info.suffix(); | - |
832 | if (!suffix.isEmpty()) { evaluated: !suffix.isEmpty() yes Evaluation Count:2090 | yes Evaluation Count:1 |
| 1-2090 |
833 | // first try version 2 engines.. | - |
834 | const int index = loader()->indexOf(suffix); executed (the execution status of this line is deduced): const int index = loader()->indexOf(suffix); | - |
835 | if (index != -1) { partially evaluated: index != -1 no Evaluation Count:0 | yes Evaluation Count:2090 |
| 0-2090 |
836 | if (QIconEnginePlugin *factory = qobject_cast<QIconEnginePlugin*>(loader()->instance(index))) { never evaluated: QIconEnginePlugin *factory = qobject_cast<QIconEnginePlugin*>(loader()->instance(index)) | 0 |
837 | if (QIconEngine *engine = factory->create(fileName)) { never evaluated: QIconEngine *engine = factory->create(fileName) | 0 |
838 | d = new QIconPrivate; never executed (the execution status of this line is deduced): d = new QIconPrivate; | - |
839 | d->engine = engine; never executed (the execution status of this line is deduced): d->engine = engine; | - |
840 | } | 0 |
841 | } | 0 |
842 | } | 0 |
843 | } executed: } Execution Count:2090 | 2090 |
844 | #endif | - |
845 | // ...then fall back to the default engine | - |
846 | if (!d) { partially evaluated: !d yes Evaluation Count:2091 | no Evaluation Count:0 |
| 0-2091 |
847 | d = new QIconPrivate; executed (the execution status of this line is deduced): d = new QIconPrivate; | - |
848 | d->engine = new QPixmapIconEngine; executed (the execution status of this line is deduced): d->engine = new QPixmapIconEngine; | - |
849 | } executed: } Execution Count:2091 | 2091 |
850 | } else { executed: } Execution Count:2091 | 2091 |
851 | detach(); executed (the execution status of this line is deduced): detach(); | - |
852 | } executed: } Execution Count:4889 | 4889 |
853 | d->engine->addFile(fileName, size, mode, state); executed (the execution status of this line is deduced): d->engine->addFile(fileName, size, mode, state); | - |
854 | } executed: } Execution Count:6980 | 6980 |
855 | | - |
856 | /*! | - |
857 | \since 4.5 | - |
858 | | - |
859 | Returns a list of available icon sizes for the specified \a mode and | - |
860 | \a state. | - |
861 | */ | - |
862 | QList<QSize> QIcon::availableSizes(Mode mode, State state) const | - |
863 | { | - |
864 | if (!d || !d->engine) evaluated: !d yes Evaluation Count:1 | yes Evaluation Count:33 |
partially evaluated: !d->engine no Evaluation Count:0 | yes Evaluation Count:33 |
| 0-33 |
865 | return QList<QSize>(); executed: return QList<QSize>(); Execution Count:1 | 1 |
866 | return d->engine->availableSizes(mode, state); executed: return d->engine->availableSizes(mode, state); Execution Count:33 | 33 |
867 | } | - |
868 | | - |
869 | /*! | - |
870 | \since 4.7 | - |
871 | | - |
872 | Returns the name used to create the icon, if available. | - |
873 | | - |
874 | Depending on the way the icon was created, it may have an associated | - |
875 | name. This is the case for icons created with fromTheme() or icons | - |
876 | using a QIconEngine which supports the QIconEngineV2::IconNameHook. | - |
877 | | - |
878 | \sa fromTheme(), QIconEngine | - |
879 | */ | - |
880 | QString QIcon::name() const | - |
881 | { | - |
882 | if (!d || !d->engine) evaluated: !d yes Evaluation Count:1 | yes Evaluation Count:2 |
partially evaluated: !d->engine no Evaluation Count:0 | yes Evaluation Count:2 |
| 0-2 |
883 | return QString(); executed: return QString(); Execution Count:1 | 1 |
884 | return d->engine->iconName(); executed: return d->engine->iconName(); Execution Count:2 | 2 |
885 | } | - |
886 | | - |
887 | /*! | - |
888 | \since 4.6 | - |
889 | | - |
890 | Sets the search paths for icon themes to \a paths. | - |
891 | \sa themeSearchPaths(), fromTheme(), setThemeName() | - |
892 | */ | - |
893 | void QIcon::setThemeSearchPaths(const QStringList &paths) | - |
894 | { | - |
895 | QIconLoader::instance()->setThemeSearchPath(paths); executed (the execution status of this line is deduced): QIconLoader::instance()->setThemeSearchPath(paths); | - |
896 | } executed: } Execution Count:2 | 2 |
897 | | - |
898 | /*! | - |
899 | \since 4.6 | - |
900 | | - |
901 | Returns the search paths for icon themes. | - |
902 | | - |
903 | The default value will depend on the platform: | - |
904 | | - |
905 | On X11, the search path will use the XDG_DATA_DIRS environment | - |
906 | variable if available. | - |
907 | | - |
908 | By default all platforms will have the resource directory | - |
909 | \c{:\icons} as a fallback. You can use "rcc -project" to generate a | - |
910 | resource file from your icon theme. | - |
911 | | - |
912 | \sa setThemeSearchPaths(), fromTheme(), setThemeName() | - |
913 | */ | - |
914 | QStringList QIcon::themeSearchPaths() | - |
915 | { | - |
916 | return QIconLoader::instance()->themeSearchPaths(); executed: return QIconLoader::instance()->themeSearchPaths(); Execution Count:23 | 23 |
917 | } | - |
918 | | - |
919 | /*! | - |
920 | \since 4.6 | - |
921 | | - |
922 | Sets the current icon theme to \a name. | - |
923 | | - |
924 | The \a name should correspond to a directory name in the | - |
925 | themeSearchPath() containing an index.theme | - |
926 | file describing it's contents. | - |
927 | | - |
928 | \sa themeSearchPaths(), themeName() | - |
929 | */ | - |
930 | void QIcon::setThemeName(const QString &name) | - |
931 | { | - |
932 | QIconLoader::instance()->setThemeName(name); executed (the execution status of this line is deduced): QIconLoader::instance()->setThemeName(name); | - |
933 | } executed: } Execution Count:3 | 3 |
934 | | - |
935 | /*! | - |
936 | \since 4.6 | - |
937 | | - |
938 | Returns the name of the current icon theme. | - |
939 | | - |
940 | On X11, the current icon theme depends on your desktop | - |
941 | settings. On other platforms it is not set by default. | - |
942 | | - |
943 | \sa setThemeName(), themeSearchPaths(), fromTheme(), | - |
944 | hasThemeIcon() | - |
945 | */ | - |
946 | QString QIcon::themeName() | - |
947 | { | - |
948 | return QIconLoader::instance()->themeName(); executed: return QIconLoader::instance()->themeName(); Execution Count:6856 | 6856 |
949 | } | - |
950 | | - |
951 | /*! | - |
952 | \since 4.6 | - |
953 | | - |
954 | Returns the QIcon corresponding to \a name in the current | - |
955 | icon theme. If no such icon is found in the current theme | - |
956 | \a fallback is returned instead. | - |
957 | | - |
958 | The latest version of the freedesktop icon specification and naming | - |
959 | specification can be obtained here: | - |
960 | | - |
961 | \list | - |
962 | \li \l{http://standards.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html} | - |
963 | \li \l{http://standards.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html} | - |
964 | \endlist | - |
965 | | - |
966 | To fetch an icon from the current icon theme: | - |
967 | | - |
968 | \snippet code/src_gui_image_qicon.cpp 3 | - |
969 | | - |
970 | Or if you want to provide a guaranteed fallback for platforms that | - |
971 | do not support theme icons, you can use the second argument: | - |
972 | | - |
973 | \snippet code/src_gui_image_qicon.cpp 4 | - |
974 | | - |
975 | \note By default, only X11 will support themed icons. In order to | - |
976 | use themed icons on Mac and Windows, you will have to bundle a | - |
977 | compliant theme in one of your themeSearchPaths() and set the | - |
978 | appropriate themeName(). | - |
979 | | - |
980 | \sa themeName(), setThemeName(), themeSearchPaths() | - |
981 | */ | - |
982 | QIcon QIcon::fromTheme(const QString &name, const QIcon &fallback) | - |
983 | { | - |
984 | QIcon icon; executed (the execution status of this line is deduced): QIcon icon; | - |
985 | | - |
986 | if (qtIconCache()->contains(name)) { evaluated: qtIconCache()->contains(name) yes Evaluation Count:5 | yes Evaluation Count:5 |
| 5 |
987 | icon = *qtIconCache()->object(name); executed (the execution status of this line is deduced): icon = *qtIconCache()->object(name); | - |
988 | } else { executed: } Execution Count:5 | 5 |
989 | QIcon *cachedIcon = new QIcon(new QIconLoaderEngine(name)); executed (the execution status of this line is deduced): QIcon *cachedIcon = new QIcon(new QIconLoaderEngine(name)); | - |
990 | qtIconCache()->insert(name, cachedIcon); executed (the execution status of this line is deduced): qtIconCache()->insert(name, cachedIcon); | - |
991 | icon = *cachedIcon; executed (the execution status of this line is deduced): icon = *cachedIcon; | - |
992 | } executed: } Execution Count:5 | 5 |
993 | | - |
994 | // Note the qapp check is to allow lazy loading of static icons | - |
995 | // Supporting fallbacks will not work for this case. | - |
996 | if (qApp && icon.availableSizes().isEmpty()) evaluated: (static_cast<QGuiApplication *>(QCoreApplication::instance())) yes Evaluation Count:9 | yes Evaluation Count:1 |
evaluated: icon.availableSizes().isEmpty() yes Evaluation Count:5 | yes Evaluation Count:4 |
| 1-9 |
997 | return fallback; executed: return fallback; Execution Count:5 | 5 |
998 | | - |
999 | return icon; executed: return icon; Execution Count:5 | 5 |
1000 | } | - |
1001 | | - |
1002 | /*! | - |
1003 | \since 4.6 | - |
1004 | | - |
1005 | Returns true if there is an icon available for \a name in the | - |
1006 | current icon theme, otherwise returns false. | - |
1007 | | - |
1008 | \sa themeSearchPaths(), fromTheme(), setThemeName() | - |
1009 | */ | - |
1010 | bool QIcon::hasThemeIcon(const QString &name) | - |
1011 | { | - |
1012 | QIcon icon = fromTheme(name); executed (the execution status of this line is deduced): QIcon icon = fromTheme(name); | - |
1013 | | - |
1014 | return !icon.isNull(); executed: return !icon.isNull(); Execution Count:2 | 2 |
1015 | } | - |
1016 | | - |
1017 | | - |
1018 | /***************************************************************************** | - |
1019 | QIcon stream functions | - |
1020 | *****************************************************************************/ | - |
1021 | #if !defined(QT_NO_DATASTREAM) | - |
1022 | /*! | - |
1023 | \fn QDataStream &operator<<(QDataStream &stream, const QIcon &icon) | - |
1024 | \relates QIcon | - |
1025 | \since 4.2 | - |
1026 | | - |
1027 | Writes the given \a icon to the given \a stream as a PNG | - |
1028 | image. If the icon contains more than one image, all images will | - |
1029 | be written to the stream. Note that writing the stream to a file | - |
1030 | will not produce a valid image file. | - |
1031 | */ | - |
1032 | | - |
1033 | QDataStream &operator<<(QDataStream &s, const QIcon &icon) | - |
1034 | { | - |
1035 | if (s.version() >= QDataStream::Qt_4_3) { partially evaluated: s.version() >= QDataStream::Qt_4_3 yes Evaluation Count:11 | no Evaluation Count:0 |
| 0-11 |
1036 | if (icon.isNull()) { partially evaluated: icon.isNull() no Evaluation Count:0 | yes Evaluation Count:11 |
| 0-11 |
1037 | s << QString(); never executed (the execution status of this line is deduced): s << QString(); | - |
1038 | } else { | 0 |
1039 | s << icon.d->engine->key(); executed (the execution status of this line is deduced): s << icon.d->engine->key(); | - |
1040 | icon.d->engine->write(s); executed (the execution status of this line is deduced): icon.d->engine->write(s); | - |
1041 | } executed: } Execution Count:11 | 11 |
1042 | } else if (s.version() == QDataStream::Qt_4_2) { never evaluated: s.version() == QDataStream::Qt_4_2 | 0 |
1043 | if (icon.isNull()) { never evaluated: icon.isNull() | 0 |
1044 | s << 0; never executed (the execution status of this line is deduced): s << 0; | - |
1045 | } else { | 0 |
1046 | QPixmapIconEngine *engine = static_cast<QPixmapIconEngine *>(icon.d->engine); never executed (the execution status of this line is deduced): QPixmapIconEngine *engine = static_cast<QPixmapIconEngine *>(icon.d->engine); | - |
1047 | int num_entries = engine->pixmaps.size(); never executed (the execution status of this line is deduced): int num_entries = engine->pixmaps.size(); | - |
1048 | s << num_entries; never executed (the execution status of this line is deduced): s << num_entries; | - |
1049 | for (int i=0; i < num_entries; ++i) { never evaluated: i < num_entries | 0 |
1050 | s << engine->pixmaps.at(i).pixmap; never executed (the execution status of this line is deduced): s << engine->pixmaps.at(i).pixmap; | - |
1051 | s << engine->pixmaps.at(i).fileName; never executed (the execution status of this line is deduced): s << engine->pixmaps.at(i).fileName; | - |
1052 | s << engine->pixmaps.at(i).size; never executed (the execution status of this line is deduced): s << engine->pixmaps.at(i).size; | - |
1053 | s << (uint) engine->pixmaps.at(i).mode; never executed (the execution status of this line is deduced): s << (uint) engine->pixmaps.at(i).mode; | - |
1054 | s << (uint) engine->pixmaps.at(i).state; never executed (the execution status of this line is deduced): s << (uint) engine->pixmaps.at(i).state; | - |
1055 | } | 0 |
1056 | } | 0 |
1057 | } else { | - |
1058 | s << QPixmap(icon.pixmap(22,22)); never executed (the execution status of this line is deduced): s << QPixmap(icon.pixmap(22,22)); | - |
1059 | } | 0 |
1060 | return s; executed: return s; Execution Count:11 | 11 |
1061 | } | - |
1062 | | - |
1063 | /*! | - |
1064 | \fn QDataStream &operator>>(QDataStream &stream, QIcon &icon) | - |
1065 | \relates QIcon | - |
1066 | \since 4.2 | - |
1067 | | - |
1068 | Reads an image, or a set of images, from the given \a stream into | - |
1069 | the given \a icon. | - |
1070 | */ | - |
1071 | | - |
1072 | QDataStream &operator>>(QDataStream &s, QIcon &icon) | - |
1073 | { | - |
1074 | if (s.version() >= QDataStream::Qt_4_3) { partially evaluated: s.version() >= QDataStream::Qt_4_3 yes Evaluation Count:11 | no Evaluation Count:0 |
| 0-11 |
1075 | icon = QIcon(); executed (the execution status of this line is deduced): icon = QIcon(); | - |
1076 | QString key; executed (the execution status of this line is deduced): QString key; | - |
1077 | s >> key; executed (the execution status of this line is deduced): s >> key; | - |
1078 | if (key == QLatin1String("QPixmapIconEngine")) { evaluated: key == QLatin1String("QPixmapIconEngine") yes Evaluation Count:10 | yes Evaluation Count:1 |
| 1-10 |
1079 | icon.d = new QIconPrivate; executed (the execution status of this line is deduced): icon.d = new QIconPrivate; | - |
1080 | QIconEngine *engine = new QPixmapIconEngine; executed (the execution status of this line is deduced): QIconEngine *engine = new QPixmapIconEngine; | - |
1081 | icon.d->engine = engine; executed (the execution status of this line is deduced): icon.d->engine = engine; | - |
1082 | engine->read(s); executed (the execution status of this line is deduced): engine->read(s); | - |
1083 | } else if (key == QLatin1String("QIconLoaderEngine")) { executed: } Execution Count:10 partially evaluated: key == QLatin1String("QIconLoaderEngine") yes Evaluation Count:1 | no Evaluation Count:0 |
| 0-10 |
1084 | icon.d = new QIconPrivate; executed (the execution status of this line is deduced): icon.d = new QIconPrivate; | - |
1085 | QIconEngine *engine = new QIconLoaderEngine(); executed (the execution status of this line is deduced): QIconEngine *engine = new QIconLoaderEngine(); | - |
1086 | icon.d->engine = engine; executed (the execution status of this line is deduced): icon.d->engine = engine; | - |
1087 | engine->read(s); executed (the execution status of this line is deduced): engine->read(s); | - |
1088 | #ifndef QT_NO_LIBRARY | - |
1089 | } else { executed: } Execution Count:1 | 1 |
1090 | const int index = loader()->indexOf(key); never executed (the execution status of this line is deduced): const int index = loader()->indexOf(key); | - |
1091 | if (index != -1) { never evaluated: index != -1 | 0 |
1092 | if (QIconEnginePlugin *factory = qobject_cast<QIconEnginePlugin*>(loader()->instance(index))) { never evaluated: QIconEnginePlugin *factory = qobject_cast<QIconEnginePlugin*>(loader()->instance(index)) | 0 |
1093 | if (QIconEngine *engine= factory->create()) { never evaluated: QIconEngine *engine= factory->create() | 0 |
1094 | icon.d = new QIconPrivate; never executed (the execution status of this line is deduced): icon.d = new QIconPrivate; | - |
1095 | icon.d->engine = engine; never executed (the execution status of this line is deduced): icon.d->engine = engine; | - |
1096 | engine->read(s); never executed (the execution status of this line is deduced): engine->read(s); | - |
1097 | } // factory | 0 |
1098 | } // instance | 0 |
1099 | } // index | 0 |
1100 | #endif | - |
1101 | } | 0 |
1102 | } else if (s.version() == QDataStream::Qt_4_2) { never evaluated: s.version() == QDataStream::Qt_4_2 | 0 |
1103 | icon = QIcon(); never executed (the execution status of this line is deduced): icon = QIcon(); | - |
1104 | int num_entries; never executed (the execution status of this line is deduced): int num_entries; | - |
1105 | QPixmap pm; never executed (the execution status of this line is deduced): QPixmap pm; | - |
1106 | QString fileName; never executed (the execution status of this line is deduced): QString fileName; | - |
1107 | QSize sz; never executed (the execution status of this line is deduced): QSize sz; | - |
1108 | uint mode; never executed (the execution status of this line is deduced): uint mode; | - |
1109 | uint state; never executed (the execution status of this line is deduced): uint state; | - |
1110 | | - |
1111 | s >> num_entries; never executed (the execution status of this line is deduced): s >> num_entries; | - |
1112 | for (int i=0; i < num_entries; ++i) { never evaluated: i < num_entries | 0 |
1113 | s >> pm; never executed (the execution status of this line is deduced): s >> pm; | - |
1114 | s >> fileName; never executed (the execution status of this line is deduced): s >> fileName; | - |
1115 | s >> sz; never executed (the execution status of this line is deduced): s >> sz; | - |
1116 | s >> mode; never executed (the execution status of this line is deduced): s >> mode; | - |
1117 | s >> state; never executed (the execution status of this line is deduced): s >> state; | - |
1118 | if (pm.isNull()) never evaluated: pm.isNull() | 0 |
1119 | icon.addFile(fileName, sz, QIcon::Mode(mode), QIcon::State(state)); never executed: icon.addFile(fileName, sz, QIcon::Mode(mode), QIcon::State(state)); | 0 |
1120 | else | - |
1121 | icon.addPixmap(pm, QIcon::Mode(mode), QIcon::State(state)); never executed: icon.addPixmap(pm, QIcon::Mode(mode), QIcon::State(state)); | 0 |
1122 | } | - |
1123 | } else { | 0 |
1124 | QPixmap pm; never executed (the execution status of this line is deduced): QPixmap pm; | - |
1125 | s >> pm; never executed (the execution status of this line is deduced): s >> pm; | - |
1126 | icon.addPixmap(pm); never executed (the execution status of this line is deduced): icon.addPixmap(pm); | - |
1127 | } | 0 |
1128 | return s; executed: return s; Execution Count:11 | 11 |
1129 | } | - |
1130 | | - |
1131 | #endif //QT_NO_DATASTREAM | - |
1132 | | - |
1133 | #ifndef QT_NO_DEBUG_STREAM | - |
1134 | QDebug operator<<(QDebug dbg, const QIcon &i) | - |
1135 | { | - |
1136 | dbg.nospace() << "QIcon(" << i.name() << ')'; executed (the execution status of this line is deduced): dbg.nospace() << "QIcon(" << i.name() << ')'; | - |
1137 | return dbg.space(); executed: return dbg.space(); Execution Count:1 | 1 |
1138 | } | - |
1139 | #endif | - |
1140 | | - |
1141 | /*! | - |
1142 | \fn DataPtr &QIcon::data_ptr() | - |
1143 | \internal | - |
1144 | */ | - |
1145 | | - |
1146 | /*! | - |
1147 | \typedef QIcon::DataPtr | - |
1148 | \internal | - |
1149 | */ | - |
1150 | | - |
1151 | QT_END_NAMESPACE | - |
1152 | #endif //QT_NO_ICON | - |
1153 | | - |
| | |