]> git.lyx.org Git - features.git/commitdiff
Consider CompleteFont with MoreOptions
authorJuergen Spitzmueller <spitz@lyx.org>
Sat, 13 Jul 2019 12:55:07 +0000 (14:55 +0200)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Thu, 18 Jun 2020 13:48:36 +0000 (15:48 +0200)
src/LaTeXFonts.cpp
src/LaTeXFonts.h
src/frontends/qt4/GuiDocument.cpp
src/frontends/qt4/GuiDocument.h

index 422c8c7ca36a42a82c26d071afa0d81d264a0040..c2e934539df3559df88df148c4492f7a0d6cf97c 100644 (file)
@@ -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);
index d15281cd97f8de3e66d0f96c7ddecc325e5cf3b3..50ec71ad907dc04d13671eddc9cc2a45c78a41f3 100644 (file)
@@ -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
index f1b4f8e7b348a8f2a7313ef1836e3a624ca23fcb..c40736cfe7c50a91c9e0afbf735a98f0bc19a2fb 100644 (file)
@@ -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());
 }
 
 
index 219861bf94d41bb7ca7272967fcdc49812c5139e..9647f3b60ca4b02443f9fbb6ee84d9794e029291 100644 (file)
@@ -307,6 +307,8 @@ private:
        ///
        void updateMathFonts(QString const & rm);
        ///
+       void updateExtraOpts();
+       ///
        void updateFontOptions();
        ///
        bool ot1() const;