bool InsetCommand::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & status) const { switch (cmd.action()) { // suppress these case LFUN_ERT_INSERT: status.setEnabled(false); return true; // we handle these case LFUN_INSET_MODIFY: if (cmd.getArg(0) == "changetype") { string const newtype = cmd.getArg(1); status.setEnabled(p_.isCompatibleCommand(p_.code(), newtype)); status.setOnOff(newtype == p_.getCmdName()); } status.setEnabled(true); return true; case LFUN_INSET_DIALOG_UPDATE: status.setEnabled(true); return true; default: return Inset::getStatus(cur, cmd, status); } }
bool InsetBranch::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & flag) const { switch (cmd.action()) { case LFUN_INSET_MODIFY: flag.setEnabled(true); break; case LFUN_BRANCH_ACTIVATE: flag.setEnabled(!isBranchSelected()); break; case LFUN_BRANCH_DEACTIVATE: flag.setEnabled(isBranchSelected()); break; case LFUN_INSET_TOGGLE: if (cmd.argument() == "assign") flag.setEnabled(true); else return InsetCollapsable::getStatus(cur, cmd, flag); break; default: return InsetCollapsable::getStatus(cur, cmd, flag); } return true; }
bool InsetMathCases::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & flag) const { switch (cmd.action()) { case LFUN_INSET_MODIFY: { istringstream is(to_utf8(cmd.argument())); string s; is >> s; if (s != "tabular") break; is >> s; if (s == "add-vline-left" || s == "add-vline-right") { flag.setEnabled(false); flag.message(bformat( from_utf8(N_("No vertical grid lines in 'cases': feature %1$s")), from_utf8(s))); return true; } if (s == "append-column" || s == "delete-column") { flag.setEnabled(false); flag.message(bformat( from_utf8(N_("Changing number of columns not allowed in " "'cases': feature %1$s")), from_utf8(s))); return true; } break; } default: break; } return InsetMathGrid::getStatus(cur, cmd, flag); }
bool InsetCaption::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & status) const { switch (cmd.action()) { case LFUN_INSET_MODIFY: { string const first_arg = cmd.getArg(0); if (first_arg == "changetype") { string const type = cmd.getArg(1); status.setOnOff(type == type_); bool varia = type != "Unnumbered"; // check if the immediate parent inset allows caption variation if (cur.depth() > 1) { varia = cur[cur.depth() - 2].inset().allowsCaptionVariation(type); } status.setEnabled(varia && buffer().params().documentClass().hasInsetLayout( from_ascii("Caption:" + type))); return true; } return InsetText::getStatus(cur, cmd, status); } case LFUN_INSET_TOGGLE: // pass back to owner cur.undispatched(); return false; default: return InsetText::getStatus(cur, cmd, status); } }
bool Inset::getStatus(Cursor &, FuncRequest const & cmd, FuncStatus & flag) const { // LFUN_INSET_APPLY is sent from the dialogs when the data should // be applied. This is either changed to LFUN_INSET_MODIFY (if the // dialog belongs to us) or LFUN_INSET_INSERT (if the dialog does // not belong to us, i. e. the dialog was open, and the user moved // the cursor in our inset) in lyx::getStatus(). // Dialogs::checkStatus() ensures that the dialog is deactivated if // LFUN_INSET_APPLY is disabled. switch (cmd.action()) { case LFUN_INSET_MODIFY: // Allow modification of our data. // This needs to be handled in the doDispatch method of our // instantiatable children. // FIXME: Why don't we let the insets determine whether this // should be enabled or not ? Now we need this check for // the tabular features. (vfr) if (cmd.getArg(0) == "tabular") return false; flag.setEnabled(true); return true; case LFUN_INSET_INSERT: // Don't allow insertion of new insets. // Every inset that wants to allow new insets from open // dialogs needs to override this. flag.setEnabled(false); return true; case LFUN_INSET_SETTINGS: if (cmd.argument().empty() || cmd.getArg(0) == insetName(lyxCode())) { bool const enable = hasSettings(); flag.setEnabled(enable); return true; } else { return false; } case LFUN_IN_MATHMACROTEMPLATE: // By default we're not in a MathMacroTemplate inset flag.setEnabled(false); return true; case LFUN_IN_IPA: // By default we're not in an IPA inset flag.setEnabled(false); return true; default: break; } return false; }
bool InsetText::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & status) const { switch (cmd.action()) { case LFUN_INSET_DISSOLVE: { bool const main_inset = text_.isMainText(); bool const target_inset = cmd.argument().empty() || cmd.getArg(0) == insetName(lyxCode()); // cur.inset() is the tabular when this is a single cell (bug #9954) bool const one_cell = cur.inset().nargs() == 1; if (target_inset) status.setEnabled(!main_inset && one_cell); return target_inset; } case LFUN_ARGUMENT_INSERT: { string const arg = cmd.getArg(0); if (arg.empty()) { status.setEnabled(false); return true; } if (text_.isMainText() || !cur.paragraph().layout().args().empty()) return text_.getStatus(cur, cmd, status); Layout::LaTeXArgMap args = getLayout().args(); Layout::LaTeXArgMap::const_iterator const lait = args.find(arg); if (lait != args.end()) { status.setEnabled(true); for (Paragraph const & par : paragraphs()) for (auto const & table : par.insetList()) if (InsetArgument const * ins = table.inset->asInsetArgument()) if (ins->name() == arg) { // we have this already status.setEnabled(false); return true; } } else status.setEnabled(false); return true; } default: // Dispatch only to text_ if the cursor is inside // the text_. It is not for context menus (bug 5797). bool ret = false; if (cur.text() == &text_) ret = text_.getStatus(cur, cmd, status); if (!ret) ret = Inset::getStatus(cur, cmd, status); return ret; } }
bool InsetListings::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & status) const { switch (cmd.action()) { case LFUN_INSET_MODIFY: case LFUN_INSET_DIALOG_UPDATE: status.setEnabled(true); return true; case LFUN_CAPTION_INSERT: status.setEnabled(!params().isInline()); return true; default: return InsetCollapsable::getStatus(cur, cmd, status); } }
bool InsetText::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & status) const { switch (cmd.action()) { case LFUN_INSET_DISSOLVE: { bool const main_inset = &buffer().inset() == this; bool const target_inset = cmd.argument().empty() || cmd.getArg(0) == insetName(lyxCode()); bool const one_cell = nargs() == 1; if (target_inset) status.setEnabled(!main_inset && one_cell); return target_inset; } default: // Dispatch only to text_ if the cursor is inside // the text_. It is not for context menus (bug 5797). bool ret = false; if (cur.text() == &text_) ret = text_.getStatus(cur, cmd, status); if (!ret) ret = Inset::getStatus(cur, cmd, status); return ret; } }
bool InsetMathAMSArray::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & flag) const { switch (cmd.action()) { case LFUN_TABULAR_FEATURE: { string s = cmd.getArg(0); if (s == "add-vline-left" || s == "add-vline-right") { flag.message(bformat( from_utf8(N_("Can't add vertical grid lines in '%1$s'")), name_)); flag.setEnabled(false); return true; } break; } default: break; } return InsetMathGrid::getStatus(cur, cmd, flag); }
bool InsetHyperlink::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & flag) const { switch (cmd.action()) { case LFUN_INSET_EDIT: flag.setEnabled(getParam("type").empty() || getParam("type") == "file:"); return true; default: return InsetCommand::getStatus(cur, cmd, flag); } }
bool InsetLine::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & status) const { switch (cmd.action()) { case LFUN_INSET_DIALOG_UPDATE: case LFUN_INSET_MODIFY: status.setEnabled(true); return true; default: return InsetCommand::getStatus(cur, cmd, status); } }
bool InsetInfo::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & flag) const { switch (cmd.action()) { case LFUN_INSET_SETTINGS: return InsetCollapsable::getStatus(cur, cmd, flag); case LFUN_INSET_DIALOG_UPDATE: case LFUN_INSET_COPY_AS: flag.setEnabled(true); return true; case LFUN_INSET_MODIFY: if (validateModifyArgument(cmd.argument())) { flag.setEnabled(true); return true; } //fall through default: return false; } }
bool InsetERT::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & status) const { switch (cmd.action()) { case LFUN_INSET_MODIFY: if (cmd.getArg(0) == "ert") { status.setEnabled(true); return true; } //fall through default: return InsetCollapsable::getStatus(cur, cmd, status); } }
bool InsetNote::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & flag) const { switch (cmd.action()) { case LFUN_INSET_MODIFY: // disallow comment and greyed out in commands flag.setEnabled(!cur.paragraph().layout().isCommand() || cmd.getArg(2) == "Note"); if (cmd.getArg(0) == "note") { InsetNoteParams params; string2params(to_utf8(cmd.argument()), params); flag.setOnOff(params_.type == params.type); } return true; case LFUN_INSET_DIALOG_UPDATE: flag.setEnabled(true); return true; default: return InsetCollapsable::getStatus(cur, cmd, flag); } }
bool InsetMathSplit::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & flag) const { switch (cmd.action()) { case LFUN_INSET_MODIFY: { istringstream is(to_utf8(cmd.argument())); string s; is >> s; if (s != "tabular") break; is >> s; if (s == "add-vline-left" || s == "add-vline-right") { flag.message(bformat( from_utf8(N_("Can't add vertical grid lines in '%1$s'")), name_)); flag.setEnabled(false); return true; } break; } default: break; } return InsetMathGrid::getStatus(cur, cmd, flag); }
bool InsetMathSubstack::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & flag) const { switch (cmd.action()) { case LFUN_INSET_MODIFY: { istringstream is(to_utf8(cmd.argument())); string s; is >> s; if (s != "tabular") break; is >> s; string const name = "substack"; if (s == "add-vline-left" || s == "add-vline-right") { flag.message(bformat( from_utf8(N_("Can't add vertical grid lines in '%1$s'")), from_utf8(name))); flag.setEnabled(false); return true; } // in contrary to \subaray, the columns in \substack // are always centered and this cannot be changed if (s == "align-left" || s == "align-right") { flag.message(bformat( from_utf8(N_("Can't change horizontal alignment in '%1$s'")), from_utf8(name))); flag.setEnabled(false); return true; } break; } default: break; } return InsetMathGrid::getStatus(cur, cmd, flag); }
bool TocWidget::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & status) const { Inset * inset = itemInset(); FuncRequest tmpcmd(cmd); QModelIndex const & index = tocTV->currentIndex(); TocItem const & item = gui_view_.tocModels().currentItem(current_type_, index); switch (cmd.action()) { case LFUN_CHANGE_ACCEPT: case LFUN_CHANGE_REJECT: case LFUN_OUTLINE_UP: case LFUN_OUTLINE_DOWN: case LFUN_OUTLINE_IN: case LFUN_OUTLINE_OUT: case LFUN_SECTION_SELECT: status.setEnabled(true); return true; case LFUN_LABEL_COPY_AS_REF: { // For labels in math, we need to supply the label as a string FuncRequest label_copy(LFUN_LABEL_COPY_AS_REF, item.asString()); if (inset) return inset->getStatus(cur, label_copy, status); } default: if (inset) return inset->getStatus(cur, tmpcmd, status); } return false; }
bool InsetText::getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus & status) const { switch (cmd.action()) { case LFUN_INSET_DISSOLVE: { bool const main_inset = &buffer().inset() == this; bool const target_inset = cmd.argument().empty() || cmd.getArg(0) == insetName(lyxCode()); bool const one_cell = nargs() == 1; if (target_inset) status.setEnabled(!main_inset && one_cell); return target_inset; } case LFUN_ARGUMENT_INSERT: { string const arg = cmd.getArg(0); if (arg.empty()) { status.setEnabled(false); return true; } if (&buffer().inset() == this || !cur.paragraph().layout().args().empty()) return text_.getStatus(cur, cmd, status); Layout::LaTeXArgMap args = getLayout().args(); Layout::LaTeXArgMap::const_iterator const lait = args.find(arg); if (lait != args.end()) { status.setEnabled(true); ParagraphList::const_iterator pit = paragraphs().begin(); for (; pit != paragraphs().end(); ++pit) { InsetList::const_iterator it = pit->insetList().begin(); InsetList::const_iterator end = pit->insetList().end(); for (; it != end; ++it) { if (it->inset->lyxCode() == ARG_CODE) { InsetArgument const * ins = static_cast<InsetArgument const *>(it->inset); if (ins->name() == arg) { // we have this already status.setEnabled(false); return true; } } } } } else status.setEnabled(false); return true; } default: // Dispatch only to text_ if the cursor is inside // the text_. It is not for context menus (bug 5797). bool ret = false; if (cur.text() == &text_) ret = text_.getStatus(cur, cmd, status); if (!ret) ret = Inset::getStatus(cur, cmd, status); return ret; } }