+ switch (cmd.action()) {
+ // Handle the alias case
+ case LFUN_INSET_MODIFY:
+ if (cmd.getArg(0) == "changetype") {
+ string cmdname = getCmdName();
+ string const alias =
+ buffer().masterParams().getCiteAlias(cmdname);
+ if (!alias.empty())
+ cmdname = alias;
+ if (suffixIs(cmdname, "*"))
+ cmdname = rtrim(cmdname, "*");
+ string const newtype = cmd.getArg(1);
+ status.setEnabled(isCompatibleCommand(newtype));
+ status.setOnOff(newtype == cmdname);
+ }
+ if (cmd.getArg(0) == "toggleparam") {
+ string cmdname = getCmdName();
+ string const alias =
+ buffer().masterParams().getCiteAlias(cmdname);
+ if (!alias.empty())
+ cmdname = alias;
+ vector<CitationStyle> citation_styles =
+ buffer().masterParams().citeStyles();
+ CitationStyle cs = getCitationStyle(buffer().masterParams(),
+ cmdname, citation_styles);
+ if (cmd.getArg(1) == "star") {
+ status.setEnabled(cs.hasStarredVersion);
+ status.setOnOff(suffixIs(cmdname, "*"));
+ }
+ else if (cmd.getArg(1) == "casing") {
+ status.setEnabled(cs.forceUpperCase);
+ status.setOnOff(isUpperCase(cmdname[0]));
+ }
+ }
+ return true;
+ case LFUN_INSET_EDIT:
+ return openCitationPossible();
+ default:
+ return InsetCommand::getStatus(cur, cmd, status);
+ }
+}
+
+
+bool InsetCitation::addKey(string const & key)
+{
+ docstring const ukey = from_utf8(trim(key));
+ docstring const & curkeys = getParam("key");
+ if (curkeys.empty()) {
+ setParam("key", ukey);