Fix bug 11070.

Allows plural, caps, no prefix to be set via context menu.
This commit is contained in:
Richard Heck 2018-04-06 21:31:11 -04:00 committed by Richard Kimberly Heck
parent 72e3f74234
commit 35afcfb6dd
3 changed files with 63 additions and 0 deletions

View File

@ -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

View File

@ -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) {

View File

@ -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