void regexpDispatch(Cursor & cur, FuncRequest const & cmd)
{
- BOOST_ASSERT(cmd.action == LFUN_REGEXP_MODE);
+ LASSERT(cmd.action() == LFUN_REGEXP_MODE, return);
if (cur.inRegexped()) {
cur.message(_("Already in regular expression mode"));
return;
ci->setButtonLabel();
cur.recordUndo();
- if (cmd.action == LFUN_INDEX_INSERT) {
+ if (cmd.action() == LFUN_INDEX_INSERT) {
docstring ds = subst(text->getStringToIndex(cur), '\n', ' ');
text->insertInset(cur, inset);
if (edit)
bool sel = cur.selection();
// Signals that, even if needsUpdate == false, an update of the
// cursor paragraph is required
- bool singleParUpdate = lyxaction.funcHasFlag(cmd.action,
+ bool singleParUpdate = lyxaction.funcHasFlag(cmd.action(),
LyXAction::SingleParUpdate);
// Signals that a full-screen update is required
- bool needsUpdate = !(lyxaction.funcHasFlag(cmd.action,
+ bool needsUpdate = !(lyxaction.funcHasFlag(cmd.action(),
LyXAction::NoUpdate) || singleParUpdate);
- switch (cmd.action) {
+ FuncCode const act = cmd.action();
+ switch (act) {
case LFUN_PARAGRAPH_MOVE_DOWN: {
pit_type const pit = cur.pit();
case LFUN_BUFFER_BEGIN:
case LFUN_BUFFER_BEGIN_SELECT:
- needsUpdate |= cur.selHandle(cmd.action == LFUN_BUFFER_BEGIN_SELECT);
+ needsUpdate |= cur.selHandle(act == LFUN_BUFFER_BEGIN_SELECT);
if (cur.depth() == 1)
needsUpdate |= cursorTop(cur);
else
case LFUN_BUFFER_END:
case LFUN_BUFFER_END_SELECT:
- needsUpdate |= cur.selHandle(cmd.action == LFUN_BUFFER_END_SELECT);
+ needsUpdate |= cur.selHandle(act == LFUN_BUFFER_END_SELECT);
if (cur.depth() == 1)
needsUpdate |= cursorBottom(cur);
else
case LFUN_INSET_BEGIN:
case LFUN_INSET_BEGIN_SELECT:
- needsUpdate |= cur.selHandle(cmd.action == LFUN_INSET_BEGIN_SELECT);
+ needsUpdate |= cur.selHandle(act == LFUN_INSET_BEGIN_SELECT);
if (cur.depth() == 1 || !cur.top().at_begin())
needsUpdate |= cursorTop(cur);
else
case LFUN_INSET_END:
case LFUN_INSET_END_SELECT:
- needsUpdate |= cur.selHandle(cmd.action == LFUN_INSET_END_SELECT);
+ needsUpdate |= cur.selHandle(act == LFUN_INSET_END_SELECT);
if (cur.depth() == 1 || !cur.top().at_end())
needsUpdate |= cursorBottom(cur);
else
case LFUN_CHAR_FORWARD:
case LFUN_CHAR_FORWARD_SELECT:
//LYXERR0(" LFUN_CHAR_FORWARD[SEL]:\n" << cur);
- needsUpdate |= cur.selHandle(cmd.action == LFUN_CHAR_FORWARD_SELECT);
+ needsUpdate |= cur.selHandle(act == LFUN_CHAR_FORWARD_SELECT);
needsUpdate |= cursorForward(cur);
if (!needsUpdate && oldTopSlice == cur.top()
case LFUN_CHAR_BACKWARD:
case LFUN_CHAR_BACKWARD_SELECT:
//lyxerr << "handle LFUN_CHAR_BACKWARD[_SELECT]:\n" << cur << endl;
- needsUpdate |= cur.selHandle(cmd.action == LFUN_CHAR_BACKWARD_SELECT);
+ needsUpdate |= cur.selHandle(act == LFUN_CHAR_BACKWARD_SELECT);
needsUpdate |= cursorBackward(cur);
if (!needsUpdate && oldTopSlice == cur.top()
case LFUN_CHAR_LEFT:
case LFUN_CHAR_LEFT_SELECT:
if (lyxrc.visual_cursor) {
- needsUpdate |= cur.selHandle(cmd.action == LFUN_CHAR_LEFT_SELECT);
+ needsUpdate |= cur.selHandle(act == LFUN_CHAR_LEFT_SELECT);
needsUpdate |= cursorVisLeft(cur);
if (!needsUpdate && oldTopSlice == cur.top()
&& cur.boundary() == oldBoundary) {
}
} else {
if (reverseDirectionNeeded(cur)) {
- cmd.action = cmd.action == LFUN_CHAR_LEFT_SELECT ?
- LFUN_CHAR_FORWARD_SELECT : LFUN_CHAR_FORWARD;
+ cmd.setAction(cmd.action() == LFUN_CHAR_LEFT_SELECT ?
+ LFUN_CHAR_FORWARD_SELECT : LFUN_CHAR_FORWARD);
} else {
- cmd.action = cmd.action == LFUN_CHAR_LEFT_SELECT ?
- LFUN_CHAR_BACKWARD_SELECT : LFUN_CHAR_BACKWARD;
+ cmd.setAction(cmd.action() == LFUN_CHAR_LEFT_SELECT ?
+ LFUN_CHAR_BACKWARD_SELECT : LFUN_CHAR_BACKWARD);
}
dispatch(cur, cmd);
return;
case LFUN_CHAR_RIGHT:
case LFUN_CHAR_RIGHT_SELECT:
if (lyxrc.visual_cursor) {
- needsUpdate |= cur.selHandle(cmd.action == LFUN_CHAR_RIGHT_SELECT);
+ needsUpdate |= cur.selHandle(cmd.action() == LFUN_CHAR_RIGHT_SELECT);
needsUpdate |= cursorVisRight(cur);
if (!needsUpdate && oldTopSlice == cur.top()
&& cur.boundary() == oldBoundary) {
}
} else {
if (reverseDirectionNeeded(cur)) {
- cmd.action = cmd.action == LFUN_CHAR_RIGHT_SELECT ?
- LFUN_CHAR_BACKWARD_SELECT : LFUN_CHAR_BACKWARD;
+ cmd.setAction(cmd.action() == LFUN_CHAR_RIGHT_SELECT ?
+ LFUN_CHAR_BACKWARD_SELECT : LFUN_CHAR_BACKWARD);
} else {
- cmd.action = cmd.action == LFUN_CHAR_RIGHT_SELECT ?
- LFUN_CHAR_FORWARD_SELECT : LFUN_CHAR_FORWARD;
+ cmd.setAction(cmd.action() == LFUN_CHAR_RIGHT_SELECT ?
+ LFUN_CHAR_FORWARD_SELECT : LFUN_CHAR_FORWARD);
}
dispatch(cur, cmd);
return;
case LFUN_UP:
case LFUN_DOWN: {
// stop/start the selection
- bool select = cmd.action == LFUN_DOWN_SELECT ||
- cmd.action == LFUN_UP_SELECT;
+ bool select = cmd.action() == LFUN_DOWN_SELECT ||
+ cmd.action() == LFUN_UP_SELECT;
// move cursor up/down
- bool up = cmd.action == LFUN_UP_SELECT || cmd.action == LFUN_UP;
+ bool up = cmd.action() == LFUN_UP_SELECT || cmd.action() == LFUN_UP;
bool const atFirstOrLastRow = cur.atFirstOrLastRow(up);
if (!atFirstOrLastRow) {
case LFUN_PARAGRAPH_UP:
case LFUN_PARAGRAPH_UP_SELECT:
- needsUpdate |= cur.selHandle(cmd.action == LFUN_PARAGRAPH_UP_SELECT);
+ needsUpdate |= cur.selHandle(cmd.action() == LFUN_PARAGRAPH_UP_SELECT);
needsUpdate |= cursorUpParagraph(cur);
break;
case LFUN_PARAGRAPH_DOWN:
case LFUN_PARAGRAPH_DOWN_SELECT:
- needsUpdate |= cur.selHandle(cmd.action == LFUN_PARAGRAPH_DOWN_SELECT);
+ needsUpdate |= cur.selHandle(cmd.action() == LFUN_PARAGRAPH_DOWN_SELECT);
needsUpdate |= cursorDownParagraph(cur);
break;
case LFUN_LINE_BEGIN:
case LFUN_LINE_BEGIN_SELECT:
- needsUpdate |= cur.selHandle(cmd.action == LFUN_LINE_BEGIN_SELECT);
+ needsUpdate |= cur.selHandle(cmd.action() == LFUN_LINE_BEGIN_SELECT);
needsUpdate |= tm->cursorHome(cur);
break;
case LFUN_LINE_END:
case LFUN_LINE_END_SELECT:
- needsUpdate |= cur.selHandle(cmd.action == LFUN_LINE_END_SELECT);
+ needsUpdate |= cur.selHandle(cmd.action() == LFUN_LINE_END_SELECT);
needsUpdate |= tm->cursorEnd(cur);
break;
case LFUN_WORD_RIGHT:
case LFUN_WORD_RIGHT_SELECT:
if (lyxrc.visual_cursor) {
- needsUpdate |= cur.selHandle(cmd.action == LFUN_WORD_RIGHT_SELECT);
+ needsUpdate |= cur.selHandle(cmd.action() == LFUN_WORD_RIGHT_SELECT);
needsUpdate |= cursorVisRightOneWord(cur);
if (!needsUpdate && oldTopSlice == cur.top()
&& cur.boundary() == oldBoundary) {
}
} else {
if (reverseDirectionNeeded(cur)) {
- cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ?
- LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD;
+ cmd.setAction(cmd.action() == LFUN_WORD_RIGHT_SELECT ?
+ LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD);
} else {
- cmd.action = cmd.action == LFUN_WORD_RIGHT_SELECT ?
- LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD;
+ cmd.setAction(cmd.action() == LFUN_WORD_RIGHT_SELECT ?
+ LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD);
}
dispatch(cur, cmd);
return;
case LFUN_WORD_FORWARD:
case LFUN_WORD_FORWARD_SELECT:
- needsUpdate |= cur.selHandle(cmd.action == LFUN_WORD_FORWARD_SELECT);
+ needsUpdate |= cur.selHandle(cmd.action() == LFUN_WORD_FORWARD_SELECT);
needsUpdate |= cursorForwardOneWord(cur);
break;
case LFUN_WORD_LEFT:
case LFUN_WORD_LEFT_SELECT:
if (lyxrc.visual_cursor) {
- needsUpdate |= cur.selHandle(cmd.action == LFUN_WORD_LEFT_SELECT);
+ needsUpdate |= cur.selHandle(cmd.action() == LFUN_WORD_LEFT_SELECT);
needsUpdate |= cursorVisLeftOneWord(cur);
if (!needsUpdate && oldTopSlice == cur.top()
&& cur.boundary() == oldBoundary) {
}
} else {
if (reverseDirectionNeeded(cur)) {
- cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ?
- LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD;
+ cmd.setAction(cmd.action() == LFUN_WORD_LEFT_SELECT ?
+ LFUN_WORD_FORWARD_SELECT : LFUN_WORD_FORWARD);
} else {
- cmd.action = cmd.action == LFUN_WORD_LEFT_SELECT ?
- LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD;
+ cmd.setAction(cmd.action() == LFUN_WORD_LEFT_SELECT ?
+ LFUN_WORD_BACKWARD_SELECT : LFUN_WORD_BACKWARD);
}
dispatch(cur, cmd);
return;
case LFUN_WORD_BACKWARD:
case LFUN_WORD_BACKWARD_SELECT:
- needsUpdate |= cur.selHandle(cmd.action == LFUN_WORD_BACKWARD_SELECT);
+ needsUpdate |= cur.selHandle(cmd.action() == LFUN_WORD_BACKWARD_SELECT);
needsUpdate |= cursorBackwardOneWord(cur);
break;
bv->buffer().params().trackChanges);
// Update the selection pos to make sure the selection does not
// change as the inserted tab will increase the logical pos.
- if (cur.anchor_.pit() == pit)
- cur.anchor_.forwardPos();
+ if (cur.realAnchor().pit() == pit)
+ cur.realAnchor().forwardPos();
if (cur.pit() == pit)
cur.forwardPos();
}
if (par.getChar(0) == '\t') {
if (cur.pit() == pit)
cur.posBackward();
- if (cur.anchor_.pit() == pit && cur.anchor_.pos() > 0 )
- cur.anchor_.backwardPos();
+ if (cur.realAnchor().pit() == pit && cur.realAnchor().pos() > 0 )
+ cur.realAnchor().backwardPos();
par.eraseChar(0, tc);
} else
par.getChar(0) == ' ' && n_spaces < 4; ++n_spaces) {
if (cur.pit() == pit)
cur.posBackward();
- if (cur.anchor_.pit() == pit && cur.anchor_.pos() > 0 )
- cur.anchor_.backwardPos();
+ if (cur.realAnchor().pit() == pit && cur.realAnchor().pos() > 0 )
+ cur.realAnchor().backwardPos();
par.eraseChar(0, tc);
}
}
// ignore motions deeper nested than the real anchor
Cursor & bvcur = cur.bv().cursor();
- if (!bvcur.anchor_.hasPart(cur)) {
+ if (!bvcur.realAnchor().hasPart(cur)) {
cur.undispatched();
break;
}
CursorSlice old = bvcur.top();
int const wh = bv->workHeight();
- int const y = max(0, min(wh - 1, cmd.y));
+ int const y = max(0, min(wh - 1, cmd.y()));
- tm->setCursorFromCoordinates(cur, cmd.x, y);
- cur.setTargetX(cmd.x);
- if (cmd.y >= wh)
+ tm->setCursorFromCoordinates(cur, cmd.x(), y);
+ cur.setTargetX(cmd.x());
+ if (cmd.y() >= wh)
lyx::dispatch(FuncRequest(LFUN_DOWN_SELECT));
- else if (cmd.y < 0)
+ else if (cmd.y() < 0)
lyx::dispatch(FuncRequest(LFUN_UP_SELECT));
// This is to allow jumping over large insets
if (cur.top() == old) {
- if (cmd.y >= wh)
+ if (cmd.y() >= wh)
lyx::dispatch(FuncRequest(LFUN_DOWN_SELECT));
- else if (cmd.y < 0)
+ else if (cmd.y() < 0)
lyx::dispatch(FuncRequest(LFUN_UP_SELECT));
}
// We continue with our existing selection or start a new one, so don't
case LFUN_ERT_INSERT:
case LFUN_LISTING_INSERT:
case LFUN_MARGINALNOTE_INSERT:
- case LFUN_OPTIONAL_INSERT:
+ case LFUN_ARGUMENT_INSERT:
case LFUN_INDEX_INSERT:
+ case LFUN_PREVIEW_INSERT:
// Open the inset, and move the current selection
// inside it.
doInsertInset(cur, this, cmd, true, true);
case LFUN_ACCENT_HUNGARIAN_UMLAUT:
case LFUN_ACCENT_CIRCLE:
case LFUN_ACCENT_OGONEK:
- theApp()->handleKeyFunc(cmd.action);
+ theApp()->handleKeyFunc(cmd.action());
if (!cmd.argument().empty())
// FIXME: Are all these characters encoded in one byte in utf8?
bv->translateAndInsert(cmd.argument()[0], this, cur);
bool enable = true;
InsetCode code = NO_CODE;
- switch (cmd.action) {
+ switch (cmd.action()) {
case LFUN_DEPTH_DECREMENT:
enable = changeDepthAllowed(cur, DEC_DEPTH);
// not allowed in description items
enable = !inDescriptionItem(cur);
break;
- case LFUN_FLOAT_LIST_INSERT:
+ case LFUN_FLOAT_LIST_INSERT: {
code = FLOAT_LIST_CODE;
// not allowed in description items
enable = !inDescriptionItem(cur);
+ if (enable) {
+ FloatList const & floats = cur.buffer()->params().documentClass().floats();
+ FloatList::const_iterator cit = floats[to_ascii(cmd.argument())];
+ // make sure we know about such floats
+ if (cit == floats.end() ||
+ // and that we know how to generate a list of them
+ (!cit->second.needsFloatPkg() && cit->second.listCommand().empty())) {
+ flag.setUnknown(true);
+ // probably not necessary, but...
+ enable = false;
+ }
+ }
break;
+ }
case LFUN_CAPTION_INSERT:
code = CAPTION_CODE;
// not allowed in description items
case LFUN_INFO_INSERT:
code = INFO_CODE;
break;
- case LFUN_OPTIONAL_INSERT:
- code = OPTARG_CODE;
- enable = cur.paragraph().insetList().count(OPTARG_CODE)
- < cur.paragraph().layout().optionalargs;
+ case LFUN_ARGUMENT_INSERT: {
+ code = ARG_CODE;
+ Layout const & lay = cur.paragraph().layout();
+ int const numargs = lay.reqargs + lay.optargs;
+ enable = cur.paragraph().insetList().count(ARG_CODE) < numargs;
break;
+ }
case LFUN_INDEX_INSERT:
code = INDEX_CODE;
break;
if (cur.inTexted())
code = SPACE_CODE;
break;
+ case LFUN_PREVIEW_INSERT:
+ code = PREVIEW_CODE;
+ break;
case LFUN_MATH_INSERT:
case LFUN_MATH_AMS_MATRIX: