| 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 |