Menu "context-ref"
Item "Next Cross-Reference|N" "reference-next"
Item "Go to Label|G" "label-goto"
+ Submenu "Change Type|y" "edit_reftype"
Item "Edit...|E" "next-inset-toggle"
End
+ Menu "edit_reftype"
+ Item "<reference>|r" "next-inset-modify changetype ref"
+ Item "(<reference>)|e" "next-inset-modify changetype eqref"
+ Item "<page>|p" "next-inset-modify changetype pageref"
+ Item "on page <page>|o" "next-inset-modify changetype vpageref"
+ Item "<reference> on page <page>|f" "next-inset-modify changetype vref"
+ Item "Formatted reference|t" "next-inset-modify changetype prettyref"
+ End
+
#
# InsetLabel context menu
#
Item "Close Inset|C" "inset-toggle close"
End
+#
+# InsetBox context menu
+#
+
+ Menu "context-box"
+ Submenu "Change Type|y" "edit_boxtype"
+ Item "Settings...|S" "inset-settings box"
+ End
+
+ Menu "edit_boxtype"
+ Item "Frameless|l" "next-inset-modify changetype Frameless"
+ Item "Simple frame|f" "next-inset-modify changetype Boxed"
+ Item "Simple frame, page breaks|p" "next-inset-modify changetype Framed"
+ Item "Oval, thin|O" "next-inset-modify changetype ovalbox"
+ Item "Oval, thick|v" "next-inset-modify changetype Ovalbox"
+ Item "Drop Shadow|w" "next-inset-modify changetype Shadowbox"
+ Item "Shaded background|b" "next-inset-modify changetype Shaded"
+ Item "Double frame|D" "next-inset-modify changetype Doublebox"
+ End
+
+
+#
+# InsetNote context menu
+#
+
+ Menu "context-note"
+ Submenu "Change Type|y" "edit_notetype"
+ Item "Settings...|S" "inset-settings note"
+ End
+
+ Menu "edit_notetype"
+ Item "LyX Note|N" "next-inset-modify note Note Note"
+ Item "Comment|C" "next-inset-modify note Note Comment"
+ Item "Greyed Out|G" "next-inset-modify note Note Greyedout"
+ End
+
+#
+# InsetSpace context menu
+#
+ Menu "context-space"
+ Submenu "Change Type|y" "edit_spacetype"
+ Item "Edit...|E" "next-inset-toggle"
+ End
+
+ Menu "edit_spacetype"
+ Item "Interword Space|w" "next-inset-modify space \space{}"
+ Item "Protected Space|P" "next-inset-modify space ~"
+ Item "Thin Space|T" "next-inset-modify space \thinspace{}"
+ Item "Quad Space|Q" "next-inset-modify space \quad{}"
+ Item "QQuad Space|u" "next-inset-modify space \qquad{}"
+ Item "Enspace|E" "next-inset-modify space \enspace{}"
+ Item "Enskip|k" "next-inset-modify space \enskip{}"
+ Item "Negative Thin Space|N" "next-inset-modify space \negthinspace{}"
+ Item "Horizontal Fill|F" "next-inset-modify space \hfill{}"
+ Item "Protected Horizontal Fill|i" "next-inset-modify space \hspace*{\fill}"
+ Item "Horizontal Fill (Dots)|D" "next-inset-modify space \dotfill{}"
+ Item "Horizontal Fill (Rule)|R" "next-inset-modify space \hrulefill{}"
+ Item "Custom Length|C" "command-sequence next-inset-modify space \hspace{} \length 1in; next-inset-toggle"
+ End
+
+#
+# InsetVSpace context menu
+#
+ Menu "context-vspace"
+ Submenu "Change Type|y" "edit_vspacetype"
+ Item "Edit...|E" "next-inset-toggle"
+ End
+
+ Menu "edit_vspacetype"
+ Item "DefSkip|D" "next-inset-modify vspace defskip"
+ Item "SmallSkip|S" "next-inset-modify vspace smallskip"
+ Item "MedSkip|M" "next-inset-modify vspace medskip"
+ Item "BigSkip|B" "next-inset-modify vspace bigskip"
+ Item "VFill|F" "next-inset-modify vspace vfill"
+ Item "Custom|C" "command-sequence next-inset-modify vspace 1in; next-inset-toggle"
+ End
+
#
# Edit context menu
#
Item "Fullscreen Mode" "ui-toggle fullscreen"
End
+#
+# Math Macro context menu
+#
+
Menu "context-math-macro-definition"
Item "Append Parameter" "math-macro-add-param"
Item "Remove Last Parameter" "math-macro-remove-param"
Item "Remove Last Parameter Spitting Out To The Right" "math-macro-remove-greedy-param"
End
+#
+# InsetListing context menu
+#
+
Menu "context-listings"
Item "Cut" "cut"
Item "Copy" "copy"
Separator
Item "Settings...|S" "inset-settings listings"
End
-
+
+#
+# InsetGraphics context menu
+#
+
Menu "context-graphics"
Item "Edit...|E" "graphics-edit"
Separator
flag.enabled(true);
break;
+ case LFUN_NEXT_INSET_MODIFY: {
+ // this is the real function we want to invoke
+ FuncRequest tmpcmd = FuncRequest(LFUN_INSET_MODIFY, cmd.argument());
+ // if there is an inset at cursor, see whether it
+ // can be modified.
+ Inset * inset = cur.nextInset();
+ if (inset) {
+ inset->getStatus(cur, tmpcmd, flag);
+ return flag;
+ break;
+ }
+ // if it did not work, try the underlying inset.
+ inset = &cur.inset();
+ if (inset) {
+ inset->getStatus(cur, tmpcmd, flag);
+ return flag;
+ break;
+ }
+ // else disable
+ flag.enabled(false);
+ break;
+ }
+
case LFUN_LABEL_GOTO: {
flag.enabled(!cmd.argument().empty()
|| getInsetByCode<InsetRef>(cur, REF_CODE));
break;
}
+ case LFUN_NEXT_INSET_MODIFY: {
+ // this is the real function we want to invoke
+ FuncRequest tmpcmd = FuncRequest(LFUN_INSET_MODIFY, cmd.argument());
+ // if there is an inset at cursor, see whether it
+ // can be modified.
+ Inset * inset = cur.nextInset();
+ if (inset)
+ inset->dispatch(cur, tmpcmd);
+ // if it did not work, try the underlying inset.
+ else if (&cur.inset())
+ cur.inset().dispatch(cur, tmpcmd);
+ else
+ // It did not work too; no action needed.
+ break;
+ cur.clearSelection();
+ processUpdateFlags(Update::Force | Update::FitCursor);
+ break;
+ }
+
case LFUN_SCREEN_UP:
case LFUN_SCREEN_DOWN: {
Point p = getPos(cur, cur.boundary());
// 320
LFUN_COMPLETION_INLINE,
LFUN_COMPLETION_COMPLETE,
+ LFUN_NEXT_INSET_MODIFY, // JSpitzm 20080323
LFUN_LASTACTION // end of the table
};
* \var lyx::FuncCode lyx::LFUN_INSET_MODIFY
* \li Action: Modify existing inset.
* \li Notion: Used for label, floats, listings, box, branch, external, wrap
- bibtex, ert, command, grahocs, note, vspace, tabular, bibitem,
- inlude, ref insets.
+ bibtex, ert, command, graphics, note, space, vspace, tabular,
+ bibitem, inlude, ref insets.
* \li Syntax: inset-modify <INSET> <ARGS>
* \li Params: See #LFUN_INSET_INSERT for further details.
* \endvar
*/
{ LFUN_INSET_MODIFY, "", Noop, Hidden },
+/*!
+ * \var lyx::FuncCode lyx::LFUN_NEXT_INSET_MODIFY
+ * \li Action: Modify the inset at cursor position, if there is one.
+ * \li Notion: Used for label, floats, listings, box, branch, external, wrap
+ bibtex, ert, command, graphics, note, space, vspace, tabular,
+ bibitem, inlude, ref insets.
+ * \li Syntax: next-inset-modify <INSET> <ARGS> or next-inset-modify changetype <TYPE>
+ * \li Params: See #LFUN_INSET_INSERT for further details.
+ * \li Origin: JSpitzm, 23 Mar 2008
+ * \endvar
+ */
+ { LFUN_NEXT_INSET_MODIFY, "next-inset-modify", ReadOnly, Edit },
{ LFUN_INSET_DIALOG_UPDATE, "", Noop, Hidden },
{ LFUN_INSET_SETTINGS, "inset-settings", ReadOnly, Edit },
{ LFUN_NEXT_INSET_TOGGLE, "next-inset-toggle", ReadOnly, Edit },
case LFUN_INSET_MODIFY: {
//lyxerr << "InsetBox::dispatch MODIFY" << endl;
- InsetBoxMailer::string2params(to_utf8(cmd.argument()), params_);
+ if (cmd.getArg(0) == "changetype")
+ params_.type = cmd.getArg(1);
+ else
+ InsetBoxMailer::string2params(to_utf8(cmd.argument()), params_);
setLayout(cur.buffer().params());
break;
}
switch (cmd.action) {
case LFUN_INSET_MODIFY:
+ if (cmd.getArg(0) == "changetype")
+ flag.setOnOff(cmd.getArg(1) == params_.type);
+ else
+ flag.enabled(true);
+ return true;
case LFUN_INSET_DIALOG_UPDATE:
flag.enabled(true);
return true;
}
+docstring InsetBox::contextMenu(BufferView const &, int, int) const
+{
+ return from_ascii("context-box");
+}
+
+
InsetBoxMailer::InsetBoxMailer(InsetBox & inset)
: inset_(inset)
{}
Inset * clone() const { return new InsetBox(*this); }
/// used by the constructors
void init();
+ ///
+ virtual docstring contextMenu(BufferView const & bv, int x, int y) const;
///
InsetBoxParams params_;
{
switch (cmd.action) {
case LFUN_INSET_MODIFY: {
+ if (cmd.getArg(0) == "changetype") {
+ p_.setCmdName(cmd.getArg(1));
+ initView();
+ break;
+ }
InsetCommandParams p(p_.code());
InsetCommandMailer::string2params(mailer_name_, to_utf8(cmd.argument()), p);
if (p.getCmdName().empty())
return true;
// we handle these
case LFUN_INSET_MODIFY:
+ if (cmd.getArg(0) == "changetype") {
+ string const newtype = cmd.getArg(1);
+ status.enabled(p_.isCompatibleCommand(p_.code(), newtype));
+ status.setOnOff(newtype == p_.getCmdName());
+ } else
+ status.enabled(true);
+ return true;
case LFUN_INSET_DIALOG_UPDATE:
status.enabled(true);
return true;
void preview(bool p) { preview_ = p; }
/// Clear the values of all parameters
void clear();
+ ///
+ static bool isCompatibleCommand(InsetCode code, std::string const & s);
private:
///
static ParamInfo const & findInfo(InsetCode code,
std::string const & cmdName);
///
- static bool isCompatibleCommand(InsetCode code, std::string const & s);
- ///
std::string getDefaultCmd(InsetCode);
///
docstring makeKeyValArgument() const;
switch (cmd.action) {
case LFUN_INSET_MODIFY:
+ // disallow comment and greyed out in commands
+ flag.enabled(!cur.paragraph().layout().isCommand() ||
+ cmd.getArg(2) == "Note");
+ if (cmd.getArg(0) == "note") {
+ InsetNoteParams params;
+ InsetNoteMailer::string2params(to_utf8(cmd.argument()), params);
+ flag.setOnOff(params_.type == params.type);
+ }
+ return true;
+
case LFUN_INSET_DIALOG_UPDATE:
flag.enabled(true);
return true;
}
}
+
void InsetNote::updateLabels(ParIterator const & it)
{
DocumentClass const & tclass = buffer().params().documentClass();
}
+docstring InsetNote::contextMenu(BufferView const &, int, int) const
+{
+ return from_ascii("context-note");
+}
+
string const InsetNoteMailer::name_("note");
string id;
lex >> id;
if (!lex || id != "Note")
- return print_mailer_error("InsetBoxMailer", in, 2, "Note");
+ return print_mailer_error("InsetNoteMailer", in, 2, "Note");
params.read(lex);
}
/// used by the constructors
void init();
///
+ virtual docstring contextMenu(BufferView const & bv, int x, int y) const;
+ ///
friend class InsetNoteParams;
///
#include "Cursor.h"
#include "Dimension.h"
#include "FuncRequest.h"
+#include "FuncStatus.h"
#include "Length.h"
#include "Lexer.h"
#include "MetricsInfo.h"
}
+bool InsetSpace::getStatus(Cursor & cur, FuncRequest const & cmd,
+ FuncStatus & status) const
+{
+ switch (cmd.action) {
+ // we handle these
+ case LFUN_INSET_MODIFY:
+ if (cmd.getArg(0) == "space") {
+ InsetSpaceParams params;
+ InsetSpaceMailer::string2params(to_utf8(cmd.argument()), params);
+ status.setOnOff(params_.kind == params.kind);
+ } else
+ status.enabled(true);
+ return true;
+ default:
+ return Inset::getStatus(cur, cmd, status);
+ }
+}
+
+
void InsetSpace::edit(Cursor & cur, bool, EntryDirection)
{
InsetSpaceMailer(*this).showDialog(&cur.bv());
virtual Inset * clone() const { return new InsetSpace(*this); }
///
void doDispatch(Cursor & cur, FuncRequest & cmd);
+ ///
+ bool getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus &) const;
///
InsetSpaceParams params_;
#include "Dimension.h"
#include "DispatchResult.h"
#include "FuncRequest.h"
+#include "FuncStatus.h"
#include "support/gettext.h"
#include "Lexer.h"
#include "Text.h"
}
+bool InsetVSpace::getStatus(Cursor & cur, FuncRequest const & cmd,
+ FuncStatus & status) const
+{
+ switch (cmd.action) {
+ // we handle these
+ case LFUN_INSET_MODIFY:
+ if (cmd.getArg(0) == "vspace") {
+ VSpace vspace;
+ InsetVSpaceMailer::string2params(to_utf8(cmd.argument()), vspace);
+ status.setOnOff(vspace == space_);
+ } else
+ status.enabled(true);
+ return true;
+ default:
+ return Inset::getStatus(cur, cmd, status);
+ }
+}
+
+
+void InsetVSpace::edit(Cursor & cur, bool, EntryDirection)
+{
+ InsetVSpaceMailer(*this).showDialog(&cur.bv());
+}
+
+
void InsetVSpace::read(Lexer & lex)
{
BOOST_ASSERT(lex.isOK());
}
+docstring InsetVSpace::contextMenu(BufferView const &, int, int) const
+{
+ return from_ascii("context-vspace");
+}
+
+
string const InsetVSpaceMailer::name_ = "vspace";
~InsetVSpace();
/// How much?
VSpace const & space() const { return space_; }
+ ///
+ InsetCode lyxCode() const { return VSPACE_CODE; }
+ ///
+ void edit(Cursor & cur, bool front,
+ EntryDirection entry_from = ENTRY_DIRECTION_IGNORE);
+ ///
+ EDITABLE editable() const { return IS_EDITABLE; }
+ ///
+ virtual docstring contextMenu(BufferView const & bv, int x, int y) const;
private:
///
void metrics(MetricsInfo & mi, Dimension & dim) const;
///
void doDispatch(Cursor & cur, FuncRequest & cmd);
///
+ bool getStatus(Cursor & cur, FuncRequest const & cmd, FuncStatus &) const;
+ ///
Inset * clone() const { return new InsetVSpace(*this); }
///
docstring const label() const;