commit 0738ff08baa63c598b08e5a6538edf76a1718551
Author: Juergen Spitzmueller <[email protected]>
Date:   Sat Jul 13 14:55:07 2019 +0200

    Consider CompleteFont with MoreOptions
---
 src/LaTeXFonts.cpp                |   15 +++++++++++
 src/LaTeXFonts.h                  |    2 +-
 src/frontends/qt4/GuiDocument.cpp |   48 ++++++++++++++++++++++--------------
 src/frontends/qt4/GuiDocument.h   |    2 +
 4 files changed, 47 insertions(+), 20 deletions(-)

diff --git a/src/LaTeXFonts.cpp b/src/LaTeXFonts.cpp
index 422c8c7..c2e9345 100644
--- a/src/LaTeXFonts.cpp
+++ b/src/LaTeXFonts.cpp
@@ -137,6 +137,21 @@ bool LaTeXFont::providesScale(bool ot1, bool complete, 
bool nomath)
        return (!scaleoption_.empty());
 }
 
+
+bool LaTeXFont::providesMoreOptions(bool ot1, bool complete, bool nomath)
+{
+       docstring const usedfont = getUsedFont(ot1, complete, nomath);
+
+       if (usedfont.empty())
+               return false;
+       else if (usedfont != name_)
+               return altFont(usedfont).providesMoreOptions(ot1, complete, 
nomath);
+       else if (!available(ot1, nomath))
+               return false;
+
+       return (moreopts_);
+}
+
 bool LaTeXFont::provides(std::string const & name, bool ot1, bool complete, 
bool nomath)
 {
        docstring const usedfont = getUsedFont(ot1, complete, nomath);
diff --git a/src/LaTeXFonts.h b/src/LaTeXFonts.h
index d15281c..50ec71a 100644
--- a/src/LaTeXFonts.h
+++ b/src/LaTeXFonts.h
@@ -59,7 +59,7 @@ public:
        /// A package option for font scaling
        docstring const & scaleoption() { return scaleoption_; }
        /// Does this provide additional options?
-       bool moreoptions() const { return moreopts_; }
+       bool providesMoreOptions(bool ot1, bool complete, bool nomath);
        /// Alternative requirement to test for
        docstring const & requires() { return requires_; }
        /// Does this font provide a given \p feature
diff --git a/src/frontends/qt4/GuiDocument.cpp 
b/src/frontends/qt4/GuiDocument.cpp
index f1b4f8e..c40736c 100644
--- a/src/frontends/qt4/GuiDocument.cpp
+++ b/src/frontends/qt4/GuiDocument.cpp
@@ -2427,7 +2427,7 @@ void GuiDocument::fontScToggled(bool state)
 }
 
 
-void GuiDocument::updateFontOptions()
+void GuiDocument::updateExtraOpts()
 {
        bool const tex_fonts = !fontModule->osFontsCB->isChecked();
        QString font;
@@ -2438,15 +2438,34 @@ void GuiDocument::updateFontOptions()
        if (tex_fonts)
                font = fontModule->fontsSansCO->itemData(
                                
fontModule->fontsSansCO->currentIndex()).toString();
-       bool scaleable = providesScale(font);
        bool const sf_opts = providesExtraOpts(font);
+       if (tex_fonts)
+               font = fontModule->fontsTypewriterCO->itemData(
+                               
fontModule->fontsTypewriterCO->currentIndex()).toString();
+       bool const tt_opts = providesExtraOpts(font);
+       fontModule->fontspecRomanLA->setEnabled(!tex_fonts || rm_opts);
+       fontModule->fontspecRomanLE->setEnabled(!tex_fonts || rm_opts);
+       fontModule->fontspecSansLA->setEnabled(!tex_fonts || sf_opts);
+       fontModule->fontspecSansLE->setEnabled(!tex_fonts || sf_opts);
+       fontModule->fontspecTypewriterLA->setEnabled(!tex_fonts || tt_opts);
+       fontModule->fontspecTypewriterLE->setEnabled(!tex_fonts || tt_opts);
+}
+
+
+void GuiDocument::updateFontOptions()
+{
+       bool const tex_fonts = !fontModule->osFontsCB->isChecked();
+       QString font;
+       if (tex_fonts)
+               font = fontModule->fontsSansCO->itemData(
+                               
fontModule->fontsSansCO->currentIndex()).toString();
+       bool scaleable = providesScale(font);
        fontModule->scaleSansSB->setEnabled(scaleable);
        fontModule->scaleSansLA->setEnabled(scaleable);
        if (tex_fonts)
                font = fontModule->fontsTypewriterCO->itemData(
                                
fontModule->fontsTypewriterCO->currentIndex()).toString();
        scaleable = providesScale(font);
-       bool const tt_opts = providesExtraOpts(font);
        fontModule->scaleTypewriterSB->setEnabled(scaleable);
        fontModule->scaleTypewriterLA->setEnabled(scaleable);
        if (tex_fonts)
@@ -2454,12 +2473,7 @@ void GuiDocument::updateFontOptions()
                                
fontModule->fontsRomanCO->currentIndex()).toString();
        fontModule->fontScCB->setEnabled(providesSC(font));
        fontModule->fontOsfCB->setEnabled(providesOSF(font));
-       fontModule->fontspecRomanLA->setEnabled(!tex_fonts || rm_opts);
-       fontModule->fontspecRomanLE->setEnabled(!tex_fonts || rm_opts);
-       fontModule->fontspecSansLA->setEnabled(!tex_fonts || sf_opts);
-       fontModule->fontspecSansLE->setEnabled(!tex_fonts || sf_opts);
-       fontModule->fontspecTypewriterLA->setEnabled(!tex_fonts || tt_opts);
-       fontModule->fontspecTypewriterLE->setEnabled(!tex_fonts || tt_opts);
+       updateExtraOpts();
        updateMathFonts(font);
 }
 
@@ -2637,11 +2651,9 @@ void GuiDocument::romanChanged(int item)
                return;
        QString const font =
                fontModule->fontsRomanCO->itemData(item).toString();
-       bool const opts = providesExtraOpts(font);
        fontModule->fontScCB->setEnabled(providesSC(font));
        fontModule->fontOsfCB->setEnabled(providesOSF(font));
-       fontModule->fontspecRomanLA->setEnabled(opts);
-       fontModule->fontspecRomanLE->setEnabled(opts);
+       updateExtraOpts();
        updateMathFonts(font);
 }
 
@@ -2653,11 +2665,9 @@ void GuiDocument::sansChanged(int item)
        QString const font =
                fontModule->fontsSansCO->itemData(item).toString();
        bool const scaleable = providesScale(font);
-       bool const opts = providesExtraOpts(font);
        fontModule->scaleSansSB->setEnabled(scaleable);
        fontModule->scaleSansLA->setEnabled(scaleable);
-       fontModule->fontspecSansLA->setEnabled(opts);
-       fontModule->fontspecSansLE->setEnabled(opts);
+       updateExtraOpts();
 }
 
 
@@ -2668,11 +2678,9 @@ void GuiDocument::ttChanged(int item)
        QString const font =
                fontModule->fontsTypewriterCO->itemData(item).toString();
        bool scaleable = providesScale(font);
-       bool const opts = providesExtraOpts(font);
        fontModule->scaleTypewriterSB->setEnabled(scaleable);
        fontModule->scaleTypewriterLA->setEnabled(scaleable);
-       fontModule->fontspecTypewriterLA->setEnabled(opts);
-       fontModule->fontspecTypewriterLE->setEnabled(opts);
+       updateExtraOpts();
 }
 
 
@@ -4957,7 +4965,9 @@ bool GuiDocument::providesExtraOpts(QString const & font) 
const
        if (fontModule->osFontsCB->isChecked())
                return true;
        return theLaTeXFonts().getLaTeXFont(
-                               qstring_to_ucs4(font)).moreoptions();
+                               
qstring_to_ucs4(font)).providesMoreOptions(ot1(),
+                                                                    
completeFontset(),
+                                                                    
noMathFont());
 }
 
 
diff --git a/src/frontends/qt4/GuiDocument.h b/src/frontends/qt4/GuiDocument.h
index 219861b..9647f3b 100644
--- a/src/frontends/qt4/GuiDocument.h
+++ b/src/frontends/qt4/GuiDocument.h
@@ -307,6 +307,8 @@ private:
        ///
        void updateMathFonts(QString const & rm);
        ///
+       void updateExtraOpts();
+       ///
        void updateFontOptions();
        ///
        bool ot1() const;

Reply via email to