From 154b4fdecec9ba8e5f5c1d1210b07992e68e7d15 Mon Sep 17 00:00:00 2001 From: Juergen Spitzmueller Date: Wed, 26 Dec 2018 15:46:14 +0100 Subject: [PATCH] Give textstyle-apply a history The last 20 applications are saved now and accessible both via the lfun (textstyle-apply n) and the toolbar (via button menu) Fixes: #7133 This also changes the default icon and toolbar position of the action, as requested in #11427 --- lib/Makefile.am | 3 + lib/images/classic/dynamic-freefonts.png | Bin 0 -> 247 bytes lib/images/dynamic-freefonts.svgz | Bin 0 -> 4001 bytes lib/images/oxygen/dynamic-freefonts.svgz | Bin 0 -> 51218 bytes lib/images/textstyle-apply.svgz | Bin 2358 -> 4001 bytes lib/ui/stdtoolbars.inc | 2 +- src/Font.cpp | 41 +++++++------- src/Font.h | 2 +- src/LyXAction.cpp | 6 +- src/Text.h | 2 + src/Text3.cpp | 58 +++++++++++++++---- src/frontends/qt4/GuiFontLoader.cpp | 3 +- src/frontends/qt4/GuiToolbar.cpp | 68 ++++++++++++++++------- src/frontends/qt4/GuiToolbar.h | 1 + 14 files changed, 130 insertions(+), 56 deletions(-) create mode 100644 lib/images/classic/dynamic-freefonts.png create mode 100644 lib/images/dynamic-freefonts.svgz create mode 100644 lib/images/oxygen/dynamic-freefonts.svgz diff --git a/lib/Makefile.am b/lib/Makefile.am index 3816d5c727..032103e2ab 100644 --- a/lib/Makefile.am +++ b/lib/Makefile.am @@ -473,6 +473,7 @@ dist_images_DATA1X = \ images/down.svgz \ images/dynamic-char-styles.svgz \ images/dynamic-custom-insets.svgz \ + images/dynamic-freefonts.svgz \ images/editclear.svgz \ images/emblem-readonly.svgz \ images/emblem-shellescape.svgz \ @@ -1759,6 +1760,7 @@ dist_imagesoxygen_DATA1X = \ images/oxygen/dialog-toggle_toc.svgz \ images/oxygen/dynamic-char-styles.svgz \ images/oxygen/dynamic-custom-insets.svgz \ + images/oxygen/dynamic-freefonts.svgz \ images/oxygen/down.svgz \ images/oxygen/editclear.svgz \ images/oxygen/ert-insert.svgz \ @@ -1965,6 +1967,7 @@ dist_imagesclassic_DATA = \ images/classic/dialog-show_vclog.png \ images/classic/dialog-toggle_findreplaceadv.png \ images/classic/dialog-toggle_toc.png \ + images/classic/dynamic-freefonts.png \ images/classic/down.png \ images/classic/ert-insert.png \ images/classic/file-open.png \ diff --git a/lib/images/classic/dynamic-freefonts.png b/lib/images/classic/dynamic-freefonts.png new file mode 100644 index 0000000000000000000000000000000000000000..a63ad1d76a12bd1a8c3e8efd5ecc703ce99d24d4 GIT binary patch literal 247 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 XC_#OG5Hl{t|Ng%LnObyX4MG6`?eB>P literal 0 HcmV?d00001 diff --git a/lib/images/textstyle-apply.svgz b/lib/images/textstyle-apply.svgz index 1a037d49f14e228f0625ab36dc9fcb8adc8eef0f..5830eefb90eb662cebf2f99d6c3dff7ba55e6688 100644 GIT binary patch literal 4001 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 diff --git a/lib/ui/stdtoolbars.inc b/lib/ui/stdtoolbars.inc index e0666f0b13..412d5647f8 100644 --- a/lib/ui/stdtoolbars.inc +++ b/lib/ui/stdtoolbars.inc @@ -87,7 +87,6 @@ ToolbarSet Item "Toggle emphasis" "font-emph" Item "Toggle noun" "font-noun" DynamicMenu "dynamic-char-styles" "Custom text styles" - Item "Apply last text properties" "textstyle-apply" Separator Item "Insert math" "math-mode on" Item "Insert graphics" "dialog-show-new-inset graphics" @@ -139,6 +138,7 @@ ToolbarSet Item "Include file" "dialog-show-new-inset include" Separator Item "Text properties" "dialog-show character" + DynamicMenu "dynamic-freefonts" "Apply recent text properties" Item "Paragraph settings" "layout-paragraph" Item "Thesaurus" "thesaurus-entry" End diff --git a/src/Font.cpp b/src/Font.cpp index ea31f40b0b..bb0b54805b 100644 --- a/src/Font.cpp +++ b/src/Font.cpp @@ -143,41 +143,41 @@ void Font::update(Font const & newfont, } -docstring const stateText(FontInfo const & f) +docstring const stateText(FontInfo const & f, bool const terse) { odocstringstream os; - if (f.family() != INHERIT_FAMILY) + if (f.family() != INHERIT_FAMILY && (!terse || f.family() != IGNORE_FAMILY)) os << _(GUIFamilyNames[f.family()]) << ", "; - if (f.series() != INHERIT_SERIES) + if (f.series() != INHERIT_SERIES && (!terse || f.series() != IGNORE_SERIES)) os << _(GUISeriesNames[f.series()]) << ", "; - if (f.shape() != INHERIT_SHAPE) + if (f.shape() != INHERIT_SHAPE && (!terse || f.shape() != IGNORE_SHAPE)) os << _(GUIShapeNames[f.shape()]) << ", "; - if (f.size() != FONT_SIZE_INHERIT) + if (f.size() != FONT_SIZE_INHERIT && (!terse || f.size() != FONT_SIZE_IGNORE)) os << _(GUISizeNames[f.size()]) << ", "; - if (f.color() != Color_inherit) + if (f.color() != Color_inherit && (!terse || f.color() != Color_ignore)) os << lcolor.getGUIName(f.color()) << ", "; // FIXME: uncomment this when we support background. //if (f.background() != Color_inherit) // os << lcolor.getGUIName(f.background()) << ", "; - if (f.emph() != FONT_INHERIT) + if (f.emph() != FONT_INHERIT && (!terse || f.emph() != FONT_IGNORE)) os << bformat(_("Emphasis %1$s, "), _(GUIMiscNames[f.emph()])); - if (f.underbar() != FONT_INHERIT) + if (f.underbar() != FONT_INHERIT && (!terse || f.underbar() == FONT_ON)) os << bformat(_("Underline %1$s, "), _(GUIMiscNames[f.underbar()])); - if (f.strikeout() != FONT_INHERIT) - os << bformat(_("Strike out %1$s, "), - _(GUIMiscNames[f.strikeout()])); - if (f.xout() != FONT_INHERIT) - os << bformat(_("Cross out %1$s, "), - _(GUIMiscNames[f.xout()])); - if (f.uuline() != FONT_INHERIT) + if (f.uuline() != FONT_INHERIT && (!terse || f.uuline() == FONT_ON)) os << bformat(_("Double underline %1$s, "), _(GUIMiscNames[f.uuline()])); - if (f.uwave() != FONT_INHERIT) + if (f.uwave() != FONT_INHERIT && (!terse || f.uwave() == FONT_ON)) os << bformat(_("Wavy underline %1$s, "), _(GUIMiscNames[f.uwave()])); - if (f.noun() != FONT_INHERIT) + if (f.strikeout() != FONT_INHERIT && (!terse || f.strikeout() == FONT_ON)) + os << bformat(_("Strike out %1$s, "), + _(GUIMiscNames[f.strikeout()])); + if (f.xout() != FONT_INHERIT && (!terse || f.strikeout() == FONT_ON)) + os << bformat(_("Cross out %1$s, "), + _(GUIMiscNames[f.xout()])); + if (f.noun() != FONT_INHERIT && (!terse || f.noun() != FONT_IGNORE)) os << bformat(_("Noun %1$s, "), _(GUIMiscNames[f.noun()])); if (f == inherit_font) @@ -187,11 +187,12 @@ docstring const stateText(FontInfo const & f) } -docstring const Font::stateText(BufferParams * params) const +docstring const Font::stateText(BufferParams * params, bool const terse) const { odocstringstream os; - os << lyx::stateText(bits_); - if (!params || (language() != params->language)) { + os << lyx::stateText(bits_, terse); + if ((!params || (language() != params->language)) + && (!terse || language() != ignore_language)) { // reset_language is a null pointer! os << bformat(_("Language: %1$s, "), (language() == reset_language) ? _("Default") diff --git a/src/Font.h b/src/Font.h index 9ec853d533..226ad26199 100644 --- a/src/Font.h +++ b/src/Font.h @@ -90,7 +90,7 @@ public: /// Build GUI description of font state - docstring const stateText(BufferParams * params) const; + docstring const stateText(BufferParams * params, bool const terse = false) const; /// void validate(LaTeXFeatures & features) const; diff --git a/src/LyXAction.cpp b/src/LyXAction.cpp index f5ed3f8787..6d3175222b 100644 --- a/src/LyXAction.cpp +++ b/src/LyXAction.cpp @@ -3830,8 +3830,10 @@ void LyXAction::init() /*! * \var lyx::FuncCode lyx::LFUN_TEXTSTYLE_APPLY - * \li Action: Toggle user-defined (=last-time used) text style. - * \li Notion: This style is set via #LFUN_TEXTSTYLE_UPDATE, which is + * \li Action: Apply last used text properties. + * \li Syntax: textstyle-apply [] + * \li Params: : number of the selection in the internal freefonts stack to be applied. + * \li Notion: These properties are stored via #LFUN_TEXTSTYLE_UPDATE, which is automatically triggered when using Text Style dialog. * \li Syntax: textstyle-apply * \li Origin: leeming, 12 Mar 2003 diff --git a/src/Text.h b/src/Text.h index b54277beef..054b6f6ee4 100644 --- a/src/Text.h +++ b/src/Text.h @@ -109,6 +109,8 @@ public: /// void toggleFree(Cursor & cur, Font const &, bool toggleall = false); + /// Stack to save recent text propterty applications + std::vector getFreeFonts() const; /// ??? /// FIXME: replace Cursor with DocIterator. diff --git a/src/Text3.cpp b/src/Text3.cpp index 45eb8155f2..9dce236a41 100644 --- a/src/Text3.cpp +++ b/src/Text3.cpp @@ -72,6 +72,7 @@ #include "support/debug.h" #include "support/gettext.h" #include "support/lassert.h" +#include "support/limited_stack.h" #include "support/lstrings.h" #include "support/lyxalgo.h" #include "support/lyxtime.h" @@ -105,7 +106,8 @@ using cap::pasteSimpleText; using frontend::Clipboard; // globals... -static Font freefont(ignore_font, ignore_language); +typedef limited_stack> FontStack; +static FontStack freeFonts(15); static bool toggleall = false; static void toggleAndShow(Cursor & cur, Text * text, @@ -2364,10 +2366,26 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) break; } - case LFUN_TEXTSTYLE_APPLY: - toggleAndShow(cur, this, freefont, toggleall); - cur.message(_("Character set")); + case LFUN_TEXTSTYLE_APPLY: { + unsigned int num = 0; + string const arg = to_utf8(cmd.argument()); + // Argument? + if (!arg.empty()) { + if (isStrUnsignedInt(arg)) { + num = convert(arg); + if (num >= freeFonts.size()) { + cur.message(_("Invalid argument (number exceeds stack size)!")); + break; + } + } else { + cur.message(_("Invalid argument (must be a positive number)!")); + break; + } + } + toggleAndShow(cur, this, freeFonts[num].second, toggleall); + cur.message(bformat(_("Text properties applied: %1$s"), freeFonts[num].first)); break; + } // Set the freefont using the contents of \param data dispatched from // the frontends and apply it at the current cursor location. @@ -2375,17 +2393,17 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd) Font font; bool toggle; if (font.fromString(to_utf8(cmd.argument()), toggle)) { - freefont = font; + docstring const props = font.stateText(&bv->buffer().params(), true); + freeFonts.push(make_pair(props, font)); toggleall = toggle; - toggleAndShow(cur, this, freefont, toggleall); + toggleAndShow(cur, this, font, toggleall); // We need a buffer update if we change the language // of an info inset if (cur.insetInSelection(INFO_CODE)) cur.forceBufferUpdate(); - cur.message(_("Character set")); - } else { - lyxerr << "Argument not ok"; - } + cur.message(bformat(_("Text properties applied: %1$s"), props)); + } else + LYXERR0("Invalid argument of textstyle-update"); break; } @@ -3378,11 +3396,14 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd, case LFUN_FONT_CROSSOUT: case LFUN_FONT_UNDERUNDERLINE: case LFUN_FONT_UNDERWAVE: - case LFUN_TEXTSTYLE_APPLY: case LFUN_TEXTSTYLE_UPDATE: enable = !cur.paragraph().isPassThru(); break; + case LFUN_TEXTSTYLE_APPLY: + enable = !freeFonts.empty(); + break; + case LFUN_WORD_DELETE_FORWARD: case LFUN_WORD_DELETE_BACKWARD: case LFUN_LINE_DELETE_FORWARD: @@ -3506,4 +3527,19 @@ bool Text::inDescriptionItem(Cursor & cur) const && (pos == 0 || par.getChar(pos - 1) != ' '))); } + +std::vector Text::getFreeFonts() const +{ + vector ffList; + + FontStack::const_iterator cit = freeFonts.begin(); + FontStack::const_iterator end = freeFonts.end(); + for (; cit != end; ++cit) + // we do not use cit-> here because gcc 2.9x does not + // like it (JMarc) + ffList.push_back((*cit).first); + + return ffList; +} + } // namespace lyx diff --git a/src/frontends/qt4/GuiFontLoader.cpp b/src/frontends/qt4/GuiFontLoader.cpp index 4f705330f9..4839ad378d 100644 --- a/src/frontends/qt4/GuiFontLoader.cpp +++ b/src/frontends/qt4/GuiFontLoader.cpp @@ -42,7 +42,8 @@ int const num_math_fonts = sizeof(math_fonts) / sizeof(*math_fonts); namespace lyx { -extern docstring const stateText(FontInfo const & f); +extern docstring const stateText(FontInfo const & f, + bool const terse = false); namespace frontend { diff --git a/src/frontends/qt4/GuiToolbar.cpp b/src/frontends/qt4/GuiToolbar.cpp index ce1b2b7e7b..ea2683b371 100644 --- a/src/frontends/qt4/GuiToolbar.cpp +++ b/src/frontends/qt4/GuiToolbar.cpp @@ -41,6 +41,7 @@ #include "insets/InsetText.h" +#include "support/convert.h" #include "support/debug.h" #include "support/gettext.h" #include "support/lstrings.h" @@ -318,8 +319,9 @@ void DynamicMenuButton::initialize() bool DynamicMenuButton::isMenuType(string const & s) { - return s == "dynamic-custom-insets" || - s == "dynamic-char-styles"; + return s == "dynamic-custom-insets" + || s == "dynamic-char-styles" + || s == "dynamic-freefonts"; } @@ -336,28 +338,54 @@ void DynamicMenuButton::updateTriggered() setEnabled(false); setMinimumWidth(sizeHint().width()); d->text_class_.reset(); - d->inset_ = 0; + d->inset_ = nullptr; return; } - DocumentClassConstPtr text_class = - bv->buffer().params().documentClassPtr(); - InsetText const * inset = &(bv->cursor().innerText()->inset()); - // if the text class has changed, then we need to reload the menu - if (d->text_class_ != text_class) { - d->text_class_ = text_class; - // at the moment, we can just call loadFlexInsets, and it will - // handle both types. if there were more types of menus, then we - // might need to have other options. - loadFlexInsets(); + string const & menutype = tbitem_.name_; + if (menutype == "dynamic-custom-insets" || menutype == "dynamic-char-styles") { + DocumentClassConstPtr text_class = + bv->buffer().params().documentClassPtr(); + InsetText const * inset = &(bv->cursor().innerText()->inset()); + // if the text class has changed, then we need to reload the menu + if (d->text_class_ != text_class) { + d->text_class_ = text_class; + // at the moment, we can just call loadFlexInsets, and it will + // handle both types. if there were more types of menus, then we + // might need to have other options. + loadFlexInsets(); + } + // remember where we are + d->inset_ = inset; + // note that enabling here might need to be more subtle if there + // were other kinds of menus. + setEnabled(!bv->buffer().isReadonly() + && !m->isEmpty() + && inset->insetAllowed(FLEX_CODE)); + } else if (menutype == "dynamic-freefonts") { + m->clear(); + vector ffList = bv->cursor().innerText()->getFreeFonts(); + unsigned int i = 0; + Action * default_act = nullptr; + for (auto const & f : ffList) { + FuncRequest func(LFUN_TEXTSTYLE_APPLY, convert(i), + FuncRequest::TOOLBAR); + docstring const lb = char_type('&') + convert(i) + + from_ascii(". ") + f ; + Action * act = new Action(func, QIcon(), toqstr(lb), toqstr(f), this); + m->addAction(act); + // The most recent one is the default + if (i == 0) + default_act = act; + ++i; + } + if (default_act) { + QToolButton::setDefaultAction(default_act); + QToolButton::setIcon(getIcon(FuncRequest(LFUN_TEXTSTYLE_APPLY), false)); + } + setPopupMode(QToolButton::DelayedPopup); + setEnabled(lyx::getStatus(FuncRequest(LFUN_TEXTSTYLE_APPLY)).enabled()); } - // remember where we are - d->inset_ = inset; - // note that enabling here might need to be more subtle if there - // were other kinds of menus. - setEnabled(!bv->buffer().isReadonly() && - !m->isEmpty() && - inset->insetAllowed(FLEX_CODE)); } diff --git a/src/frontends/qt4/GuiToolbar.h b/src/frontends/qt4/GuiToolbar.h index c82134790b..da09bbfbbf 100644 --- a/src/frontends/qt4/GuiToolbar.h +++ b/src/frontends/qt4/GuiToolbar.h @@ -86,6 +86,7 @@ protected Q_SLOTS: /// (stdtoolbars.inc, usually) and must be one of: /// dynamic-custom-insets /// dynamic-char-styles +/// dynamic-freefonts /// To add a new one of these, you must add a routine, like /// loadFlexInsets, that will populate the menu, and call it from /// updateTriggered. Make sure to add the new type to isMenuType(). -- 2.39.2