[LyX/master] Fix font combos with Qt6 (#12630)

Juergen Spitzmueller spitz at lyx.org
Mon Jan 30 06:47:28 UTC 2023


commit 2371bfdf1518fe0dff05a0c18ae4250b6392d9db
Author: Juergen Spitzmueller <spitz at lyx.org>
Date:   Mon Jan 30 08:46:36 2023 +0100

    Fix font combos with Qt6 (#12630)
    
    Use CategorizedCombos methods to properly access the model
---
 src/frontends/qt/GuiDocument.cpp |  169 +++++++++++++++++++++-----------------
 1 files changed, 95 insertions(+), 74 deletions(-)

diff --git a/src/frontends/qt/GuiDocument.cpp b/src/frontends/qt/GuiDocument.cpp
index 287c0e8..60f9f84 100644
--- a/src/frontends/qt/GuiDocument.cpp
+++ b/src/frontends/qt/GuiDocument.cpp
@@ -2450,12 +2450,12 @@ void GuiDocument::osFontsChanged(bool nontexfonts)
 {
 	bool const tex_fonts = !nontexfonts;
 	// store current fonts
-	QString const font_roman = fontModule->fontsRomanCO->itemData(
-			fontModule->fontsRomanCO->currentIndex()).toString();
-	QString const font_sans = fontModule->fontsSansCO->itemData(
-			fontModule->fontsSansCO->currentIndex()).toString();
-	QString const font_typewriter = fontModule->fontsTypewriterCO->itemData(
-			fontModule->fontsTypewriterCO->currentIndex()).toString();
+	QString const font_roman = fontModule->fontsRomanCO->getData(
+			fontModule->fontsRomanCO->currentIndex());
+	QString const font_sans = fontModule->fontsSansCO->getData(
+			fontModule->fontsSansCO->currentIndex());
+	QString const font_typewriter = fontModule->fontsTypewriterCO->getData(
+			fontModule->fontsTypewriterCO->currentIndex());
 	QString const font_math = fontModule->fontsMathCO->itemData(
 			fontModule->fontsMathCO->currentIndex()).toString();
 	int const font_sf_scale = fontModule->scaleSansSB->value();
@@ -2474,15 +2474,9 @@ void GuiDocument::osFontsChanged(bool nontexfonts)
 	outputModule->defaultFormatCO->setCurrentIndex(index);
 
 	// try to restore fonts which were selected two toggles ago
-	index = fontModule->fontsRomanCO->findData(fontModule->font_roman);
-	if (index != -1)
-		fontModule->fontsRomanCO->setCurrentIndex(index);
-	index = fontModule->fontsSansCO->findData(fontModule->font_sans);
-	if (index != -1)
-		fontModule->fontsSansCO->setCurrentIndex(index);
-	index = fontModule->fontsTypewriterCO->findData(fontModule->font_typewriter);
-	if (index != -1)
-		fontModule->fontsTypewriterCO->setCurrentIndex(index);
+	fontModule->fontsRomanCO->set(fontModule->font_roman);
+	fontModule->fontsSansCO->set(fontModule->font_sans);
+	fontModule->fontsTypewriterCO->set(fontModule->font_typewriter);
 	index = fontModule->fontsMathCO->findData(fontModule->font_math);
 	if (index != -1)
 		fontModule->fontsMathCO->setCurrentIndex(index);
@@ -2575,8 +2569,8 @@ void GuiDocument::fontOsfToggled(bool state)
 {
 	if (fontModule->osFontsCB->isChecked())
 		return;
-	QString font = fontModule->fontsRomanCO->itemData(
-			fontModule->fontsRomanCO->currentIndex()).toString();
+	QString font = fontModule->fontsRomanCO->getData(
+			fontModule->fontsRomanCO->currentIndex());
 	if (hasMonolithicExpertSet(font))
 		fontModule->fontScCB->setChecked(state);
 }
@@ -2586,8 +2580,8 @@ void GuiDocument::fontScToggled(bool state)
 {
 	if (fontModule->osFontsCB->isChecked())
 		return;
-	QString font = fontModule->fontsRomanCO->itemData(
-			fontModule->fontsRomanCO->currentIndex()).toString();
+	QString font = fontModule->fontsRomanCO->getData(
+			fontModule->fontsRomanCO->currentIndex());
 	if (hasMonolithicExpertSet(font))
 		fontModule->fontOsfCB->setChecked(state);
 }
@@ -2598,16 +2592,16 @@ void GuiDocument::updateExtraOpts()
 	bool const tex_fonts = !fontModule->osFontsCB->isChecked();
 	QString font;
 	if (tex_fonts)
-		font = fontModule->fontsRomanCO->itemData(
-				fontModule->fontsRomanCO->currentIndex()).toString();
+		font = fontModule->fontsRomanCO->getData(
+				fontModule->fontsRomanCO->currentIndex());
 	bool const rm_opts = providesExtraOpts(font);
 	if (tex_fonts)
-		font = fontModule->fontsSansCO->itemData(
-				fontModule->fontsSansCO->currentIndex()).toString();
+		font = fontModule->fontsSansCO->getData(
+				fontModule->fontsSansCO->currentIndex());
 	bool const sf_opts = providesExtraOpts(font);
 	if (tex_fonts)
-		font = fontModule->fontsTypewriterCO->itemData(
-				fontModule->fontsTypewriterCO->currentIndex()).toString();
+		font = fontModule->fontsTypewriterCO->getData(
+				fontModule->fontsTypewriterCO->currentIndex());
 	bool const tt_opts = providesExtraOpts(font);
 	fontModule->fontspecRomanLA->setEnabled(!tex_fonts || rm_opts);
 	fontModule->fontspecRomanLE->setEnabled(!tex_fonts || rm_opts);
@@ -2623,22 +2617,22 @@ void GuiDocument::updateFontOptions()
 	bool const tex_fonts = !fontModule->osFontsCB->isChecked();
 	QString font;
 	if (tex_fonts)
-		font = fontModule->fontsSansCO->itemData(
-				fontModule->fontsSansCO->currentIndex()).toString();
+		font = fontModule->fontsSansCO->getData(
+				fontModule->fontsSansCO->currentIndex());
 	bool scalable = providesScale(font);
 	fontModule->scaleSansSB->setEnabled(scalable);
 	fontModule->scaleSansLA->setEnabled(scalable);
 	fontModule->fontSansOsfCB->setEnabled(providesOSF(font));
 	if (tex_fonts)
-		font = fontModule->fontsTypewriterCO->itemData(
-				fontModule->fontsTypewriterCO->currentIndex()).toString();
+		font = fontModule->fontsTypewriterCO->getData(
+				fontModule->fontsTypewriterCO->currentIndex());
 	scalable = providesScale(font);
 	fontModule->scaleTypewriterSB->setEnabled(scalable);
 	fontModule->scaleTypewriterLA->setEnabled(scalable);
 	fontModule->fontTypewriterOsfCB->setEnabled(providesOSF(font));
 	if (tex_fonts)
-		font = fontModule->fontsRomanCO->itemData(
-				fontModule->fontsRomanCO->currentIndex()).toString();
+		font = fontModule->fontsRomanCO->getData(
+				fontModule->fontsRomanCO->currentIndex());
 	fontModule->fontScCB->setEnabled(providesSC(font));
 	fontModule->fontOsfCB->setEnabled(providesOSF(font));
 	updateExtraOpts();
@@ -2681,10 +2675,10 @@ bool GuiDocument::ot1() const
 
 bool GuiDocument::completeFontset() const
 {
-	return (fontModule->fontsSansCO->itemData(
-			fontModule->fontsSansCO->currentIndex()).toString() == "default"
-		&& fontModule->fontsSansCO->itemData(
-			fontModule->fontsTypewriterCO->currentIndex()).toString() == "default");
+	return (fontModule->fontsSansCO->getData(
+			fontModule->fontsSansCO->currentIndex()) == "default"
+		&& fontModule->fontsSansCO->getData(
+			fontModule->fontsTypewriterCO->currentIndex()) == "default");
 }
 
 
@@ -2736,9 +2730,15 @@ void GuiDocument::updateFontlist()
 
 	// With fontspec (XeTeX, LuaTeX), we have access to all system fonts, but not the LaTeX fonts
 	if (fontModule->osFontsCB->isChecked()) {
-		fontModule->fontsRomanCO->addItem(qt_("Default"), QString("default"));
-		fontModule->fontsSansCO->addItem(qt_("Default"), QString("default"));
-		fontModule->fontsTypewriterCO->addItem(qt_("Default"), QString("default"));
+		fontModule->fontsRomanCO->addItemSort(QString("default"), qt_("Default"),
+						      QString(), qt_("Default font (as set by class)"),
+						      false, false, false, true, true);
+		fontModule->fontsSansCO->addItemSort(QString("default"), qt_("Default"),
+						     QString(), qt_("Default font (as set by class)"),
+						     false, false, false, true, true);
+		fontModule->fontsTypewriterCO->addItemSort(QString("default"), qt_("Default"),
+							   QString(), qt_("Default font (as set by class)"),
+							   false, false, false, true, true);
 		QString unimath = qt_("Non-TeX Fonts Default");
 		if (!LaTeXFeatures::isAvailable("unicode-math"))
 			unimath += qt_(" (not available)");
@@ -2752,9 +2752,15 @@ void GuiDocument::updateFontlist()
 		const QStringList families(fontdb.families());
 #endif
 		for (auto const & family : families) {
-			fontModule->fontsRomanCO->addItem(family, family);
-			fontModule->fontsSansCO->addItem(family, family);
-			fontModule->fontsTypewriterCO->addItem(family, family);
+			fontModule->fontsRomanCO->addItemSort(family, family,
+							      QString(), QString(),
+							      false, false, false, true, true);
+			fontModule->fontsSansCO->addItemSort(family, family,
+							     QString(), QString(),
+							     false, false, false, true, true);
+			fontModule->fontsTypewriterCO->addItemSort(family, family,
+								   QString(), QString(),
+								   false, false, false, true, true);
 		}
 		return;
 	}
@@ -2762,24 +2768,36 @@ void GuiDocument::updateFontlist()
 	if (rmfonts_.empty())
 		updateTexFonts();
 
-	fontModule->fontsRomanCO->addItem(qt_("Default"), QString("default"));
+	fontModule->fontsRomanCO->addItemSort(QString("default"), qt_("Default"),
+					      QString(), qt_("Default font (as set by class)"),
+					      false, false, false, true, true);
 	QMap<QString, QString>::const_iterator rmi = rmfonts_.constBegin();
 	while (rmi != rmfonts_.constEnd()) {
-		fontModule->fontsRomanCO->addItem(rmi.key(), rmi.value());
+		fontModule->fontsRomanCO->addItemSort(rmi.value(), rmi.key(),
+						      QString(), QString(),
+						      false, false, false, true, true);
 		++rmi;
 	}
 
-	fontModule->fontsSansCO->addItem(qt_("Default"), QString("default"));
+	fontModule->fontsSansCO->addItemSort(QString("default"), qt_("Default"),
+					     QString(), qt_("Default font (as set by class)"),
+					     false, false, false, true, true);
 	QMap<QString, QString>::const_iterator sfi = sffonts_.constBegin();
 	while (sfi != sffonts_.constEnd()) {
-		fontModule->fontsSansCO->addItem(sfi.key(), sfi.value());
+		fontModule->fontsSansCO->addItemSort(sfi.value(), sfi.key(),
+						     QString(), QString(),
+						     false, false, false, true, true);
 		++sfi;
 	}
 
-	fontModule->fontsTypewriterCO->addItem(qt_("Default"), QString("default"));
+	fontModule->fontsTypewriterCO->addItemSort(QString("default"), qt_("Default"),
+						   QString(), qt_("Default font (as set by class)"),
+						   false, false, false, true, true);
 	QMap<QString, QString>::const_iterator tti = ttfonts_.constBegin();
 	while (tti != ttfonts_.constEnd()) {
-		fontModule->fontsTypewriterCO->addItem(tti.key(), tti.value());
+		fontModule->fontsTypewriterCO->addItemSort(tti.value(), tti.key(),
+							   QString(), QString(),
+							   false, false, false, true, true);
 		++tti;
 	}
 
@@ -2825,8 +2843,7 @@ void GuiDocument::romanChanged(int item)
 {
 	if (fontModule->osFontsCB->isChecked())
 		return;
-	QString const font =
-		fontModule->fontsRomanCO->itemData(item).toString();
+	QString const font = fontModule->fontsRomanCO->getData(item);
 	fontModule->fontScCB->setEnabled(providesSC(font));
 	fontModule->fontOsfCB->setEnabled(providesOSF(font));
 	updateExtraOpts();
@@ -2838,8 +2855,7 @@ void GuiDocument::sansChanged(int item)
 {
 	if (fontModule->osFontsCB->isChecked())
 		return;
-	QString const font =
-		fontModule->fontsSansCO->itemData(item).toString();
+	QString const font = fontModule->fontsSansCO->getData(item);
 	bool const scalable = providesScale(font);
 	fontModule->scaleSansSB->setEnabled(scalable);
 	fontModule->scaleSansLA->setEnabled(scalable);
@@ -2852,8 +2868,7 @@ void GuiDocument::ttChanged(int item)
 {
 	if (fontModule->osFontsCB->isChecked())
 		return;
-	QString const font =
-		fontModule->fontsTypewriterCO->itemData(item).toString();
+	QString const font = fontModule->fontsTypewriterCO->getData(item);
 	bool scalable = providesScale(font);
 	fontModule->scaleTypewriterSB->setEnabled(scalable);
 	fontModule->scaleTypewriterLA->setEnabled(scalable);
@@ -3867,19 +3882,19 @@ void GuiDocument::applyView()
 	// fonts
 	bp_.fonts_roman[nontexfonts] =
 		fromqstr(fontModule->fontsRomanCO->
-			itemData(fontModule->fontsRomanCO->currentIndex()).toString());
+			getData(fontModule->fontsRomanCO->currentIndex()));
 	bp_.fonts_roman[!nontexfonts] = fromqstr(fontModule->font_roman);
 	bp_.font_roman_opts = fromqstr(fontModule->fontspecRomanLE->text());
 
 	bp_.fonts_sans[nontexfonts] =
 		fromqstr(fontModule->fontsSansCO->
-			itemData(fontModule->fontsSansCO->currentIndex()).toString());
+			getData(fontModule->fontsSansCO->currentIndex()));
 	bp_.fonts_sans[!nontexfonts] = fromqstr(fontModule->font_sans);
 	bp_.font_sans_opts = fromqstr(fontModule->fontspecSansLE->text());
 
 	bp_.fonts_typewriter[nontexfonts] =
 		fromqstr(fontModule->fontsTypewriterCO->
-			itemData(fontModule->fontsTypewriterCO->currentIndex()).toString());
+			getData(fontModule->fontsTypewriterCO->currentIndex()));
 	bp_.fonts_typewriter[!nontexfonts] = fromqstr(fontModule->font_typewriter);
 	bp_.font_typewriter_opts = fromqstr(fontModule->fontspecTypewriterLE->text());
 
@@ -4384,30 +4399,36 @@ void GuiDocument::paramsToDialog()
 			bp_.fontsize);
 
 	QString font = toqstr(bp_.fontsRoman());
-	int rpos = fontModule->fontsRomanCO->findData(font);
-	if (rpos == -1) {
-		rpos = fontModule->fontsRomanCO->count();
-		fontModule->fontsRomanCO->addItem(font + qt_(" (not installed)"), font);
+	bool foundfont = fontModule->fontsRomanCO->set(font);
+	if (!foundfont) {
+		fontModule->fontsRomanCO->addItemSort(font, font + qt_(" (not installed)"),
+						      qt_("Uninstalled used fonts"),
+						      qt_("This font is not installed and won't be used in output"),
+						      false, false, false, true);
+		fontModule->fontsRomanCO->set(font);
 	}
-	fontModule->fontsRomanCO->setCurrentIndex(rpos);
 	fontModule->font_roman = toqstr(bp_.fonts_roman[!bp_.useNonTeXFonts]);
 
 	font = toqstr(bp_.fontsSans());
-	int spos = fontModule->fontsSansCO->findData(font);
-	if (spos == -1) {
-		spos = fontModule->fontsSansCO->count();
-		fontModule->fontsSansCO->addItem(font + qt_(" (not installed)"), font);
+	foundfont = fontModule->fontsSansCO->set(font);
+	if (!foundfont ) {
+		fontModule->fontsSansCO->addItemSort(font, font + qt_(" (not installed)"),
+						     qt_("Uninstalled used fonts"),
+						     qt_("This font is not installed and won't be used in output"),
+						     false, false, false, true);
+		fontModule->fontsSansCO->set(font);
 	}
-	fontModule->fontsSansCO->setCurrentIndex(spos);
 	fontModule->font_sans = toqstr(bp_.fonts_sans[!bp_.useNonTeXFonts]);
 
 	font = toqstr(bp_.fontsTypewriter());
-	int tpos = fontModule->fontsTypewriterCO->findData(font);
-	if (tpos == -1) {
-		tpos = fontModule->fontsTypewriterCO->count();
-		fontModule->fontsTypewriterCO->addItem(font + qt_(" (not installed)"), font);
+	foundfont = fontModule->fontsTypewriterCO->set(font);
+	if (!foundfont) {
+		fontModule->fontsTypewriterCO->addItemSort(font, font + qt_(" (not installed)"),
+							   qt_("Uninstalled used fonts"),
+							   qt_("This font is not installed and won't be used in output"),
+							   false, false, false, true);
+		fontModule->fontsTypewriterCO->set(font);
 	}
-	fontModule->fontsTypewriterCO->setCurrentIndex(tpos);
 	fontModule->font_typewriter = toqstr(bp_.fonts_typewriter[!bp_.useNonTeXFonts]);
 
 	font = toqstr(bp_.fontsMath());
@@ -4427,9 +4448,9 @@ void GuiDocument::paramsToDialog()
 		fontModule->fontencLA->setEnabled(true);
 		fontModule->fontencCO->setEnabled(true);
 		fontModule->fontencLE->setEnabled(true);
-		romanChanged(rpos);
-		sansChanged(spos);
-		ttChanged(tpos);
+		romanChanged(fontModule->fontsRomanCO->currentIndex());
+		sansChanged(fontModule->fontsSansCO->currentIndex());
+		ttChanged(fontModule->fontsTypewriterCO->currentIndex());
 	}
 
 	if (!bp_.fonts_cjk.empty())


More information about the lyx-cvs mailing list