Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/widgets/widgets/qfontcombobox.cpp |
Switch to Source code | Preprocessed file |
Line | Source | Count | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | - | |||||||||||||||||||
2 | - | |||||||||||||||||||
3 | - | |||||||||||||||||||
4 | - | |||||||||||||||||||
5 | - | |||||||||||||||||||
6 | - | |||||||||||||||||||
7 | static QFontDatabase::WritingSystem writingSystemFromScript(QLocale::Script script) | - | ||||||||||||||||||
8 | { | - | ||||||||||||||||||
9 | switch (script) { | - | ||||||||||||||||||
10 | case QLocale::ArabicScript: | - | ||||||||||||||||||
11 | return QFontDatabase::Arabic; | - | ||||||||||||||||||
12 | case QLocale::CyrillicScript: | - | ||||||||||||||||||
13 | return QFontDatabase::Cyrillic; | - | ||||||||||||||||||
14 | case QLocale::GurmukhiScript: | - | ||||||||||||||||||
15 | return QFontDatabase::Gurmukhi; | - | ||||||||||||||||||
16 | case QLocale::SimplifiedHanScript: | - | ||||||||||||||||||
17 | return QFontDatabase::SimplifiedChinese; | - | ||||||||||||||||||
18 | case QLocale::TraditionalHanScript: | - | ||||||||||||||||||
19 | return QFontDatabase::TraditionalChinese; | - | ||||||||||||||||||
20 | case QLocale::LatinScript: | - | ||||||||||||||||||
21 | return QFontDatabase::Latin; | - | ||||||||||||||||||
22 | case QLocale::ArmenianScript: | - | ||||||||||||||||||
23 | return QFontDatabase::Armenian; | - | ||||||||||||||||||
24 | case QLocale::BengaliScript: | - | ||||||||||||||||||
25 | return QFontDatabase::Bengali; | - | ||||||||||||||||||
26 | case QLocale::DevanagariScript: | - | ||||||||||||||||||
27 | return QFontDatabase::Devanagari; | - | ||||||||||||||||||
28 | case QLocale::GeorgianScript: | - | ||||||||||||||||||
29 | return QFontDatabase::Georgian; | - | ||||||||||||||||||
30 | case QLocale::GreekScript: | - | ||||||||||||||||||
31 | return QFontDatabase::Greek; | - | ||||||||||||||||||
32 | case QLocale::GujaratiScript: | - | ||||||||||||||||||
33 | return QFontDatabase::Gujarati; | - | ||||||||||||||||||
34 | case QLocale::HebrewScript: | - | ||||||||||||||||||
35 | return QFontDatabase::Hebrew; | - | ||||||||||||||||||
36 | case QLocale::JapaneseScript: | - | ||||||||||||||||||
37 | return QFontDatabase::Japanese; | - | ||||||||||||||||||
38 | case QLocale::KhmerScript: | - | ||||||||||||||||||
39 | return QFontDatabase::Khmer; | - | ||||||||||||||||||
40 | case QLocale::KannadaScript: | - | ||||||||||||||||||
41 | return QFontDatabase::Kannada; | - | ||||||||||||||||||
42 | case QLocale::KoreanScript: | - | ||||||||||||||||||
43 | return QFontDatabase::Korean; | - | ||||||||||||||||||
44 | case QLocale::LaoScript: | - | ||||||||||||||||||
45 | return QFontDatabase::Lao; | - | ||||||||||||||||||
46 | case QLocale::MalayalamScript: | - | ||||||||||||||||||
47 | return QFontDatabase::Malayalam; | - | ||||||||||||||||||
48 | case QLocale::MyanmarScript: | - | ||||||||||||||||||
49 | return QFontDatabase::Myanmar; | - | ||||||||||||||||||
50 | case QLocale::TamilScript: | - | ||||||||||||||||||
51 | return QFontDatabase::Tamil; | - | ||||||||||||||||||
52 | case QLocale::TeluguScript: | - | ||||||||||||||||||
53 | return QFontDatabase::Telugu; | - | ||||||||||||||||||
54 | case QLocale::ThaanaScript: | - | ||||||||||||||||||
55 | return QFontDatabase::Thaana; | - | ||||||||||||||||||
56 | case QLocale::ThaiScript: | - | ||||||||||||||||||
57 | return QFontDatabase::Thai; | - | ||||||||||||||||||
58 | case QLocale::TibetanScript: | - | ||||||||||||||||||
59 | return QFontDatabase::Tibetan; | - | ||||||||||||||||||
60 | case QLocale::SinhalaScript: | - | ||||||||||||||||||
61 | return QFontDatabase::Sinhala; | - | ||||||||||||||||||
62 | case QLocale::SyriacScript: | - | ||||||||||||||||||
63 | return QFontDatabase::Syriac; | - | ||||||||||||||||||
64 | case QLocale::OriyaScript: | - | ||||||||||||||||||
65 | return QFontDatabase::Oriya; | - | ||||||||||||||||||
66 | case QLocale::OghamScript: | - | ||||||||||||||||||
67 | return QFontDatabase::Ogham; | - | ||||||||||||||||||
68 | case QLocale::RunicScript: | - | ||||||||||||||||||
69 | return QFontDatabase::Runic; | - | ||||||||||||||||||
70 | case QLocale::NkoScript: | - | ||||||||||||||||||
71 | return QFontDatabase::Nko; | - | ||||||||||||||||||
72 | default: | - | ||||||||||||||||||
73 | return QFontDatabase::Any; | - | ||||||||||||||||||
74 | } | - | ||||||||||||||||||
75 | } | - | ||||||||||||||||||
76 | - | |||||||||||||||||||
77 | static QFontDatabase::WritingSystem writingSystemFromLocale() | - | ||||||||||||||||||
78 | { | - | ||||||||||||||||||
79 | QStringList uiLanguages = QLocale::system().uiLanguages(); | - | ||||||||||||||||||
80 | QLocale::Script script; | - | ||||||||||||||||||
81 | if (!uiLanguages.isEmpty()) | - | ||||||||||||||||||
82 | script = QLocale(uiLanguages.at(0)).script(); | - | ||||||||||||||||||
83 | else | - | ||||||||||||||||||
84 | script = QLocale::system().script(); | - | ||||||||||||||||||
85 | - | |||||||||||||||||||
86 | return writingSystemFromScript(script); | - | ||||||||||||||||||
87 | } | - | ||||||||||||||||||
88 | - | |||||||||||||||||||
89 | static QFontDatabase::WritingSystem writingSystemForFont(const QFont &font, bool *hasLatin) | - | ||||||||||||||||||
90 | { | - | ||||||||||||||||||
91 | QList<QFontDatabase::WritingSystem> writingSystems = QFontDatabase().writingSystems(font.family()); | - | ||||||||||||||||||
92 | - | |||||||||||||||||||
93 | - | |||||||||||||||||||
94 | - | |||||||||||||||||||
95 | writingSystems.removeOne(QFontDatabase::Vietnamese); | - | ||||||||||||||||||
96 | *hasLatin = writingSystems.removeOne(QFontDatabase::Latin); | - | ||||||||||||||||||
97 | - | |||||||||||||||||||
98 | if (writingSystems.isEmpty()
| 0 | ||||||||||||||||||
99 | return never executed: QFontDatabase::Any;return QFontDatabase::Any; never executed: return QFontDatabase::Any; | 0 | ||||||||||||||||||
100 | - | |||||||||||||||||||
101 | QFontDatabase::WritingSystem system = writingSystemFromLocale(); | - | ||||||||||||||||||
102 | - | |||||||||||||||||||
103 | if (writingSystems.contains(system)
| 0 | ||||||||||||||||||
104 | return never executed: system;return system; never executed: return system; | 0 | ||||||||||||||||||
105 | - | |||||||||||||||||||
106 | if (system == QFontDatabase::TraditionalChinese
| 0 | ||||||||||||||||||
107 | && writingSystems.contains(QFontDatabase::SimplifiedChinese)
| 0 | ||||||||||||||||||
108 | return never executed: QFontDatabase::SimplifiedChinese;return QFontDatabase::SimplifiedChinese; never executed: return QFontDatabase::SimplifiedChinese; | 0 | ||||||||||||||||||
109 | } | - | ||||||||||||||||||
110 | - | |||||||||||||||||||
111 | if (system == QFontDatabase::SimplifiedChinese
| 0 | ||||||||||||||||||
112 | && writingSystems.contains(QFontDatabase::TraditionalChinese)
| 0 | ||||||||||||||||||
113 | return never executed: QFontDatabase::TraditionalChinese;return QFontDatabase::TraditionalChinese; never executed: return QFontDatabase::TraditionalChinese; | 0 | ||||||||||||||||||
114 | } | - | ||||||||||||||||||
115 | - | |||||||||||||||||||
116 | system = writingSystems.lastconstLast(); | - | ||||||||||||||||||
117 | - | |||||||||||||||||||
118 | if (!*hasLatin
| 0 | ||||||||||||||||||
119 | - | |||||||||||||||||||
120 | return never executed: system;return system; never executed: return system; | 0 | ||||||||||||||||||
121 | } | - | ||||||||||||||||||
122 | - | |||||||||||||||||||
123 | if (writingSystems.count() == 1
| 0 | ||||||||||||||||||
124 | return never executed: system;return system; never executed: return system; | 0 | ||||||||||||||||||
125 | - | |||||||||||||||||||
126 | if (writingSystems.count() <= 2
| 0 | ||||||||||||||||||
127 | return never executed: system;return system; never executed: return system; | 0 | ||||||||||||||||||
128 | - | |||||||||||||||||||
129 | if (writingSystems.count() <= 5
| 0 | ||||||||||||||||||
130 | return never executed: system;return system; never executed: return system; | 0 | ||||||||||||||||||
131 | - | |||||||||||||||||||
132 | return never executed: QFontDatabase::Any;return QFontDatabase::Any; never executed: return QFontDatabase::Any; | 0 | ||||||||||||||||||
133 | } | - | ||||||||||||||||||
134 | - | |||||||||||||||||||
135 | class QFontFamilyDelegate : public QAbstractItemDelegate | - | ||||||||||||||||||
136 | { | - | ||||||||||||||||||
137 | public: template <typename ThisObject> inline void qt_check_for_QOBJECT_macro(const ThisObject &_q_argument) const { int i = qYouForgotTheQ_OBJECT_Macro(this, &_q_argument); i = i + 1; } | - | ||||||||||||||||||
138 | #pragma GCC diagnostic push | - | ||||||||||||||||||
139 | static const QMetaObject staticMetaObject; virtual const QMetaObject *metaObject() const; virtual void *qt_metacast(const char *); virtual int qt_metacall(QMetaObject::Call, int, void **); static inline QString tr(const char *s, const char *c = nullptr, int n = -1) { return staticMetaObject.tr(s, c, n); } __attribute__ ((__deprecated__)) static inline QString trUtf8(const char *s, const char *c = nullptr, int n = -1) { return staticMetaObject.tr(s, c, n); } private: __attribute__((visibility("hidden"))) static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); | - | ||||||||||||||||||
140 | #pragma GCC diagnostic pop | - | ||||||||||||||||||
141 | struct QPrivateSignal {}; | - | ||||||||||||||||||
142 | public: | - | ||||||||||||||||||
143 | explicit QFontFamilyDelegate(QObject *parent); | - | ||||||||||||||||||
144 | - | |||||||||||||||||||
145 | - | |||||||||||||||||||
146 | void paint(QPainter *painter, | - | ||||||||||||||||||
147 | const QStyleOptionViewItem &option, | - | ||||||||||||||||||
148 | const QModelIndex &index) const override; | - | ||||||||||||||||||
149 | - | |||||||||||||||||||
150 | QSize sizeHint(const QStyleOptionViewItem &option, | - | ||||||||||||||||||
151 | const QModelIndex &index) const override; | - | ||||||||||||||||||
152 | - | |||||||||||||||||||
153 | const QIcon truetype; | - | ||||||||||||||||||
154 | const QIcon bitmap; | - | ||||||||||||||||||
155 | QFontDatabase::WritingSystem writingSystem; | - | ||||||||||||||||||
156 | }; | - | ||||||||||||||||||
157 | - | |||||||||||||||||||
158 | QFontFamilyDelegate::QFontFamilyDelegate(QObject *parent) | - | ||||||||||||||||||
159 | : QAbstractItemDelegate(parent) | - | ||||||||||||||||||
{), | ||||||||||||||||||||
160 | truetype(([]() -> QString { enum { Size = QIconsizeof(QLatin1Stringu"" ":/qt-project.org/styles/commonstyle/images/fonttruetype-16.png")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData) }, u"" ":/qt-project.org/styles/commonstyle/images/fonttruetype-16.png" ));}; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }())), | - | ||||||||||||||||||
161 | bitmap(([]() -> QString { enum { Size = QIconsizeof(QLatin1Stringu"" ":/qt-project.org/styles/commonstyle/images/fontbitmap-16.png")/2 - 1 }; static const QStaticStringData<Size> qstring_literal = { { { { -1 } }, Size, 0, 0, sizeof(QStringData) }, u"" ":/qt-project.org/styles/commonstyle/images/fontbitmap-16.png" )); | - | ||||||||||||||||||
writingSystem}; QStringDataPtr holder = { qstring_literal.data_ptr() }; const QString qstring_literal_temp(holder); return qstring_literal_temp; }())), | ||||||||||||||||||||
162 | writingSystem(QFontDatabase::Any;) | - | ||||||||||||||||||
163 | { | - | ||||||||||||||||||
164 | } never executed: end of block | 0 | ||||||||||||||||||
165 | - | |||||||||||||||||||
166 | void QFontFamilyDelegate::paint(QPainter *painter, | - | ||||||||||||||||||
167 | const QStyleOptionViewItem &option, | - | ||||||||||||||||||
168 | const QModelIndex &index) const | - | ||||||||||||||||||
169 | { | - | ||||||||||||||||||
170 | QString text = index.data(Qt::DisplayRole).toString(); | - | ||||||||||||||||||
171 | QFont font(option.font); | - | ||||||||||||||||||
172 | font.setPointSize(QFontInfo(font).pointSize() * 3 / 2); | - | ||||||||||||||||||
173 | QFont font2 = font; | - | ||||||||||||||||||
174 | font2.setFamily(text); | - | ||||||||||||||||||
175 | - | |||||||||||||||||||
176 | bool hasLatin; | - | ||||||||||||||||||
177 | QFontDatabase::WritingSystem system = writingSystemForFont(font2, &hasLatin); | - | ||||||||||||||||||
178 | if (hasLatin) | - | ||||||||||||||||||
179 | font = font2; | - | ||||||||||||||||||
180 | - | |||||||||||||||||||
181 | QRect r = option.rect; | - | ||||||||||||||||||
182 | - | |||||||||||||||||||
183 | if (option.state & QStyle::State_Selected) { | - | ||||||||||||||||||
184 | painter->save(); | - | ||||||||||||||||||
185 | painter->setBrush(option.palette.highlight()); | - | ||||||||||||||||||
186 | painter->setPen(Qt::NoPen); | - | ||||||||||||||||||
187 | painter->drawRect(option.rect); | - | ||||||||||||||||||
188 | painter->setPen(QPen(option.palette.highlightedText(), 0)); | - | ||||||||||||||||||
189 | } | - | ||||||||||||||||||
190 | - | |||||||||||||||||||
191 | const QIcon *icon = &bitmap; | - | ||||||||||||||||||
192 | if (QFontDatabase().isSmoothlyScalable(text)) { | - | ||||||||||||||||||
193 | icon = &truetype; | - | ||||||||||||||||||
194 | } | - | ||||||||||||||||||
195 | QSize actualSize = icon->actualSize(r.size()); | - | ||||||||||||||||||
196 | - | |||||||||||||||||||
197 | icon->paint(painter, r, Qt::AlignLeft|Qt::AlignVCenter); | - | ||||||||||||||||||
198 | if (option.direction == Qt::RightToLeft) | - | ||||||||||||||||||
199 | r.setRight(r.right() - actualSize.width() - 4); | - | ||||||||||||||||||
200 | else | - | ||||||||||||||||||
201 | r.setLeft(r.left() + actualSize.width() + 4); | - | ||||||||||||||||||
202 | - | |||||||||||||||||||
203 | QFont old = painter->font(); | - | ||||||||||||||||||
204 | painter->setFont(font); | - | ||||||||||||||||||
205 | - | |||||||||||||||||||
206 | - | |||||||||||||||||||
207 | - | |||||||||||||||||||
208 | - | |||||||||||||||||||
209 | - | |||||||||||||||||||
210 | QFontMetricsF fontMetrics(font); | - | ||||||||||||||||||
211 | if (fontMetrics.ascent() > r.height()) { | - | ||||||||||||||||||
212 | QRectF tbr = fontMetrics.tightBoundingRect(text); | - | ||||||||||||||||||
213 | painter->drawText(r.x(), r.y() + (r.height() + tbr.height()) / 2.0, text); | - | ||||||||||||||||||
214 | } else { | - | ||||||||||||||||||
215 | painter->drawText(r, Qt::AlignVCenter|Qt::AlignLeading|Qt::TextSingleLine, text); | - | ||||||||||||||||||
216 | } | - | ||||||||||||||||||
217 | - | |||||||||||||||||||
218 | if (writingSystem != QFontDatabase::Any) | - | ||||||||||||||||||
219 | system = writingSystem; | - | ||||||||||||||||||
220 | - | |||||||||||||||||||
221 | if (system != QFontDatabase::Any) { | - | ||||||||||||||||||
222 | int w = painter->fontMetrics().width(text + QLatin1String(" ")); | - | ||||||||||||||||||
223 | painter->setFont(font2); | - | ||||||||||||||||||
224 | QString sample = QFontDatabase().writingSystemSample(system); | - | ||||||||||||||||||
225 | if (option.direction == Qt::RightToLeft) | - | ||||||||||||||||||
226 | r.setRight(r.right() - w); | - | ||||||||||||||||||
227 | else | - | ||||||||||||||||||
228 | r.setLeft(r.left() + w); | - | ||||||||||||||||||
229 | painter->drawText(r, Qt::AlignVCenter|Qt::AlignLeading|Qt::TextSingleLine, sample); | - | ||||||||||||||||||
230 | } | - | ||||||||||||||||||
231 | painter->setFont(old); | - | ||||||||||||||||||
232 | - | |||||||||||||||||||
233 | if (option.state & QStyle::State_Selected) | - | ||||||||||||||||||
234 | painter->restore(); | - | ||||||||||||||||||
235 | - | |||||||||||||||||||
236 | } | - | ||||||||||||||||||
237 | - | |||||||||||||||||||
238 | QSize QFontFamilyDelegate::sizeHint(const QStyleOptionViewItem &option, | - | ||||||||||||||||||
239 | const QModelIndex &index) const | - | ||||||||||||||||||
240 | { | - | ||||||||||||||||||
241 | QString text = index.data(Qt::DisplayRole).toString(); | - | ||||||||||||||||||
242 | QFont font(option.font); | - | ||||||||||||||||||
243 | - | |||||||||||||||||||
244 | font.setPointSize(QFontInfo(font).pointSize() * 3/2); | - | ||||||||||||||||||
245 | QFontMetrics fontMetrics(font); | - | ||||||||||||||||||
246 | return QSize(fontMetrics.width(text), fontMetrics.height()); | - | ||||||||||||||||||
247 | } | - | ||||||||||||||||||
248 | - | |||||||||||||||||||
249 | - | |||||||||||||||||||
250 | class QFontComboBoxPrivate : public QComboBoxPrivate | - | ||||||||||||||||||
251 | { | - | ||||||||||||||||||
252 | public: | - | ||||||||||||||||||
253 | inline QFontComboBoxPrivate() { filters = QFontComboBox::AllFonts; } | - | ||||||||||||||||||
254 | - | |||||||||||||||||||
255 | QFontComboBox::FontFilters filters; | - | ||||||||||||||||||
256 | QFont currentFont; | - | ||||||||||||||||||
257 | - | |||||||||||||||||||
258 | void _q_updateModel(); | - | ||||||||||||||||||
259 | void _q_currentChanged(const QString &); | - | ||||||||||||||||||
260 | - | |||||||||||||||||||
261 | inline QFontComboBox* q_func() { return static_cast<QFontComboBox *>(q_ptr); } inline const QFontComboBox* q_func() const { return static_cast<const QFontComboBox *>(q_ptr); } friend class QFontComboBox; | - | ||||||||||||||||||
262 | }; | - | ||||||||||||||||||
263 | - | |||||||||||||||||||
264 | - | |||||||||||||||||||
265 | void QFontComboBoxPrivate::_q_updateModel() | - | ||||||||||||||||||
266 | { | - | ||||||||||||||||||
267 | QFontComboBox * const q = q_func(); | - | ||||||||||||||||||
268 | const int scalableMask = (QFontComboBox::ScalableFonts | QFontComboBox::NonScalableFonts); | - | ||||||||||||||||||
269 | const int spacingMask = (QFontComboBox::ProportionalFonts | QFontComboBox::MonospacedFonts); | - | ||||||||||||||||||
270 | - | |||||||||||||||||||
271 | QStringListModel *m = qobject_cast<QStringListModel *>(q->model()); | - | ||||||||||||||||||
272 | if (!m) | - | ||||||||||||||||||
273 | return; | - | ||||||||||||||||||
274 | QFontFamilyDelegate *delegate = qobject_cast<QFontFamilyDelegate *>(q->view()->itemDelegate()); | - | ||||||||||||||||||
275 | QFontDatabase::WritingSystem system = delegate ? delegate->writingSystem : QFontDatabase::Any; | - | ||||||||||||||||||
276 | - | |||||||||||||||||||
277 | QFontDatabase fdb; | - | ||||||||||||||||||
278 | QStringList list = fdb.families(system); | - | ||||||||||||||||||
279 | QStringList result; | - | ||||||||||||||||||
280 | - | |||||||||||||||||||
281 | int offset = 0; | - | ||||||||||||||||||
282 | QFontInfo fi(currentFont); | - | ||||||||||||||||||
283 | - | |||||||||||||||||||
284 | for (int i = 0; i < list.size(); ++i) { | - | ||||||||||||||||||
285 | if (fdb.isPrivateFamily(list.at(i))) | - | ||||||||||||||||||
286 | continue; | - | ||||||||||||||||||
287 | - | |||||||||||||||||||
288 | if ((filters & scalableMask) && (filters & scalableMask) != scalableMask) { | - | ||||||||||||||||||
289 | if (bool(filters & QFontComboBox::ScalableFonts) != fdb.isSmoothlyScalable(list.at(i))) | - | ||||||||||||||||||
290 | continue; | - | ||||||||||||||||||
291 | } | - | ||||||||||||||||||
292 | if ((filters & spacingMask) && (filters & spacingMask) != spacingMask) { | - | ||||||||||||||||||
293 | if (bool(filters & QFontComboBox::MonospacedFonts) != fdb.isFixedPitch(list.at(i))) | - | ||||||||||||||||||
294 | continue; | - | ||||||||||||||||||
295 | } | - | ||||||||||||||||||
296 | result += list.at(i); | - | ||||||||||||||||||
297 | if (list.at(i) == fi.family() || list.at(i).startsWith(fi.family() + QLatin1String(" ["))) | - | ||||||||||||||||||
298 | offset = result.count() - 1; | - | ||||||||||||||||||
299 | } | - | ||||||||||||||||||
300 | list = result; | - | ||||||||||||||||||
301 | - | |||||||||||||||||||
302 | - | |||||||||||||||||||
303 | - | |||||||||||||||||||
304 | - | |||||||||||||||||||
305 | - | |||||||||||||||||||
306 | { | - | ||||||||||||||||||
307 | const QSignalBlocker blocker(m); | - | ||||||||||||||||||
308 | m->setStringList(list); | - | ||||||||||||||||||
309 | } | - | ||||||||||||||||||
310 | - | |||||||||||||||||||
311 | if (list.isEmpty()) { | - | ||||||||||||||||||
312 | if (currentFont != QFont()) { | - | ||||||||||||||||||
313 | currentFont = QFont(); | - | ||||||||||||||||||
314 | q->currentFontChanged(currentFont); | - | ||||||||||||||||||
315 | } | - | ||||||||||||||||||
316 | } else { | - | ||||||||||||||||||
317 | q->setCurrentIndex(offset); | - | ||||||||||||||||||
318 | } | - | ||||||||||||||||||
319 | } | - | ||||||||||||||||||
320 | - | |||||||||||||||||||
321 | - | |||||||||||||||||||
322 | void QFontComboBoxPrivate::_q_currentChanged(const QString &text) | - | ||||||||||||||||||
323 | { | - | ||||||||||||||||||
324 | QFontComboBox * const q = q_func(); | - | ||||||||||||||||||
325 | if (currentFont.family() != text) { | - | ||||||||||||||||||
326 | currentFont.setFamily(text); | - | ||||||||||||||||||
327 | q->currentFontChanged(currentFont); | - | ||||||||||||||||||
328 | } | - | ||||||||||||||||||
329 | } | - | ||||||||||||||||||
330 | QFontComboBox::QFontComboBox(QWidget *parent) | - | ||||||||||||||||||
331 | : QComboBox(*new QFontComboBoxPrivate, parent) | - | ||||||||||||||||||
332 | { | - | ||||||||||||||||||
333 | QFontComboBoxPrivate * const d = d_func(); | - | ||||||||||||||||||
334 | d->currentFont = font(); | - | ||||||||||||||||||
335 | setEditable(true); | - | ||||||||||||||||||
336 | - | |||||||||||||||||||
337 | QStringListModel *m = new QStringListModel(this); | - | ||||||||||||||||||
338 | setModel(m); | - | ||||||||||||||||||
339 | setItemDelegate(new QFontFamilyDelegate(this)); | - | ||||||||||||||||||
340 | QListView *lview = qobject_cast<QListView*>(view()); | - | ||||||||||||||||||
341 | if (lview) | - | ||||||||||||||||||
342 | lview->setUniformItemSizes(true); | - | ||||||||||||||||||
343 | setWritingSystem(QFontDatabase::Any); | - | ||||||||||||||||||
344 | - | |||||||||||||||||||
345 | connect(this, qFlagLocation("2""currentIndexChanged(QString)" "\0" __FILE__ ":" "421""427"), | - | ||||||||||||||||||
346 | this, qFlagLocation("1""_q_currentChanged(QString)" "\0" __FILE__ ":" "422""428")); | - | ||||||||||||||||||
347 | - | |||||||||||||||||||
348 | connect((static_cast<QApplication *>(QCoreApplication::instance())), qFlagLocation("2""fontDatabaseChanged()" "\0" __FILE__ ":" "424""430"), | - | ||||||||||||||||||
349 | this, qFlagLocation("1""_q_updateModel()" "\0" __FILE__ ":" "425""431")); | - | ||||||||||||||||||
350 | } | - | ||||||||||||||||||
351 | - | |||||||||||||||||||
352 | - | |||||||||||||||||||
353 | - | |||||||||||||||||||
354 | - | |||||||||||||||||||
355 | - | |||||||||||||||||||
356 | QFontComboBox::~QFontComboBox() | - | ||||||||||||||||||
357 | { | - | ||||||||||||||||||
358 | } | - | ||||||||||||||||||
359 | void QFontComboBox::setWritingSystem(QFontDatabase::WritingSystem script) | - | ||||||||||||||||||
360 | { | - | ||||||||||||||||||
361 | QFontComboBoxPrivate * const d = d_func(); | - | ||||||||||||||||||
362 | QFontFamilyDelegate *delegate = qobject_cast<QFontFamilyDelegate *>(view()->itemDelegate()); | - | ||||||||||||||||||
363 | if (delegate) | - | ||||||||||||||||||
364 | delegate->writingSystem = script; | - | ||||||||||||||||||
365 | d->_q_updateModel(); | - | ||||||||||||||||||
366 | } | - | ||||||||||||||||||
367 | - | |||||||||||||||||||
368 | QFontDatabase::WritingSystem QFontComboBox::writingSystem() const | - | ||||||||||||||||||
369 | { | - | ||||||||||||||||||
370 | QFontFamilyDelegate *delegate = qobject_cast<QFontFamilyDelegate *>(view()->itemDelegate()); | - | ||||||||||||||||||
371 | if (delegate) | - | ||||||||||||||||||
372 | return delegate->writingSystem; | - | ||||||||||||||||||
373 | return QFontDatabase::Any; | - | ||||||||||||||||||
374 | } | - | ||||||||||||||||||
375 | void QFontComboBox::setFontFilters(FontFilters filters) | - | ||||||||||||||||||
376 | { | - | ||||||||||||||||||
377 | QFontComboBoxPrivate * const d = d_func(); | - | ||||||||||||||||||
378 | d->filters = filters; | - | ||||||||||||||||||
379 | d->_q_updateModel(); | - | ||||||||||||||||||
380 | } | - | ||||||||||||||||||
381 | - | |||||||||||||||||||
382 | QFontComboBox::FontFilters QFontComboBox::fontFilters() const | - | ||||||||||||||||||
383 | { | - | ||||||||||||||||||
384 | const QFontComboBoxPrivate * const d = d_func(); | - | ||||||||||||||||||
385 | return d->filters; | - | ||||||||||||||||||
386 | } | - | ||||||||||||||||||
387 | - | |||||||||||||||||||
388 | - | |||||||||||||||||||
389 | - | |||||||||||||||||||
390 | - | |||||||||||||||||||
391 | - | |||||||||||||||||||
392 | - | |||||||||||||||||||
393 | - | |||||||||||||||||||
394 | QFont QFontComboBox::currentFont() const | - | ||||||||||||||||||
395 | { | - | ||||||||||||||||||
396 | const QFontComboBoxPrivate * const d = d_func(); | - | ||||||||||||||||||
397 | return d->currentFont; | - | ||||||||||||||||||
398 | } | - | ||||||||||||||||||
399 | - | |||||||||||||||||||
400 | void QFontComboBox::setCurrentFont(const QFont &font) | - | ||||||||||||||||||
401 | { | - | ||||||||||||||||||
402 | QFontComboBoxPrivate * const d = d_func(); | - | ||||||||||||||||||
403 | if (font != d->currentFont) { | - | ||||||||||||||||||
404 | d->currentFont = font; | - | ||||||||||||||||||
405 | d->_q_updateModel(); | - | ||||||||||||||||||
406 | if (d->currentFont == font) { | - | ||||||||||||||||||
407 | currentFontChanged(d->currentFont); | - | ||||||||||||||||||
408 | } | - | ||||||||||||||||||
409 | } | - | ||||||||||||||||||
410 | } | - | ||||||||||||||||||
411 | bool QFontComboBox::event(QEvent *e) | - | ||||||||||||||||||
412 | { | - | ||||||||||||||||||
413 | if (e->type() == QEvent::Resize) { | - | ||||||||||||||||||
414 | QListView *lview = qobject_cast<QListView*>(view()); | - | ||||||||||||||||||
415 | if (lview) { | - | ||||||||||||||||||
416 | lview->window()->setFixedWidth(qMin(width() * 5 / 3, | - | ||||||||||||||||||
417 | QApplication::desktop()->availableGeometry(lview).width())); | - | ||||||||||||||||||
418 | } | - | ||||||||||||||||||
419 | } | - | ||||||||||||||||||
420 | return QComboBox::event(e); | - | ||||||||||||||||||
421 | } | - | ||||||||||||||||||
422 | - | |||||||||||||||||||
423 | - | |||||||||||||||||||
424 | - | |||||||||||||||||||
425 | - | |||||||||||||||||||
426 | QSize QFontComboBox::sizeHint() const | - | ||||||||||||||||||
427 | { | - | ||||||||||||||||||
428 | QSize sz = QComboBox::sizeHint(); | - | ||||||||||||||||||
429 | QFontMetrics fm(font()); | - | ||||||||||||||||||
430 | sz.setWidth(fm.width(QLatin1Char('m'))*14); | - | ||||||||||||||||||
431 | return sz; | - | ||||||||||||||||||
432 | } | - | ||||||||||||||||||
433 | - | |||||||||||||||||||
434 | - | |||||||||||||||||||
435 | - | |||||||||||||||||||
Switch to Source code | Preprocessed file |