From 35afcfb6dd4fe9519cb132c55714c73be981b275 Mon Sep 17 00:00:00 2001 From: Richard Heck Date: Fri, 6 Apr 2018 21:31:11 -0400 Subject: [PATCH] Fix bug 11070. Allows plural, caps, no prefix to be set via context menu. --- lib/ui/stdcontext.inc | 4 +++ src/insets/InsetRef.cpp | 55 +++++++++++++++++++++++++++++++++++++++++ src/insets/InsetRef.h | 4 +++ 3 files changed, 63 insertions(+) diff --git a/lib/ui/stdcontext.inc b/lib/ui/stdcontext.inc index 9acf334562..47cf349784 100644 --- a/lib/ui/stdcontext.inc +++ b/lib/ui/stdcontext.inc @@ -96,6 +96,10 @@ Menuset Item "Textual Reference|x" "inset-modify changetype nameref" Item "Label Only|L" "inset-modify changetype labelonly" Separator + OptItem "Plural|a" "inset-modify ref toggle-plural" + OptItem "Capitalize|C" "inset-modify ref toggle-caps" + Item "No Prefix" "inset-modify ref toggle-noprefix" + Separator Item "Settings...|S" "inset-settings" End diff --git a/src/insets/InsetRef.cpp b/src/insets/InsetRef.cpp index 44770e8052..124738daf7 100644 --- a/src/insets/InsetRef.cpp +++ b/src/insets/InsetRef.cpp @@ -15,6 +15,7 @@ #include "BufferParams.h" #include "Cursor.h" #include "DispatchResult.h" +#include "FuncStatus.h" #include "InsetLabel.h" #include "Language.h" #include "LaTeXFeatures.h" @@ -78,6 +79,60 @@ ParamInfo const & InsetRef::findInfo(string const & /* cmdName */) } +void InsetRef::doDispatch(Cursor & cur, FuncRequest & cmd) +{ + string const inset = cmd.getArg(0); + string const arg = cmd.getArg(1); + string pstring; + if (cmd.action() == LFUN_INSET_MODIFY && inset == "ref") { + if (arg == "toggle-plural") + pstring = "plural"; + else if (arg == "toggle-caps") + pstring = "caps"; + else if (arg == "toggle-noprefix") + pstring = "noprefix"; + } + // otherwise not for us + if (pstring.empty()) + return InsetCommand::doDispatch(cur, cmd); + + bool const isSet = (getParam(pstring) == "true"); + setParam(pstring, from_ascii(isSet ? "false" : "true")); +} + + +bool InsetRef::getStatus(Cursor & cur, FuncRequest const & cmd, + FuncStatus & status) const +{ + if (cmd.action() != LFUN_INSET_MODIFY) + return InsetCommand::getStatus(cur, cmd, status); + if (cmd.getArg(0) != "ref") + return InsetCommand::getStatus(cur, cmd, status); + + string const arg = cmd.getArg(1); + string pstring; + if (arg == "toggle-plural") + pstring = "plural"; + else if (arg == "toggle-caps") + pstring = "caps"; + if (!pstring.empty()) { + status.setEnabled(buffer().params().use_refstyle && + params().getCmdName() == "formatted"); + bool const isSet = (getParam(pstring) == "true"); + status.setOnOff(isSet); + return true; + } + if (arg == "toggle-noprefix") { + status.setEnabled(params().getCmdName() == "labelonly"); + bool const isSet = (getParam("noprefix") == "true"); + status.setOnOff(isSet); + return true; + } + // otherwise not for us + return InsetCommand::getStatus(cur, cmd, status); +} + + namespace { void capitalize(docstring & s) { diff --git a/src/insets/InsetRef.h b/src/insets/InsetRef.h index 066a596630..0f5a5b201d 100644 --- a/src/insets/InsetRef.h +++ b/src/insets/InsetRef.h @@ -40,6 +40,10 @@ public: /// \name Public functions inherited from Inset class //@{ /// + void doDispatch(Cursor & cur, FuncRequest & cmd); + /// + bool getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & status) const; + /// bool isLabeled() const { return true; } /// docstring toolTip(BufferView const &, int, int) const -- 2.39.5