void regexpDispatch(Cursor & cur, FuncRequest const & cmd)
{
- LASSERT(cmd.action_ == LFUN_REGEXP_MODE, return);
+ 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)
cur.buffer()->errors("Paste");
cur.clearSelection(); // bug 393
cur.finishUndo();
- InsetText * insetText = dynamic_cast<InsetText *>(inset);
- if (insetText) {
- insetText->fixParagraphsFont();
- if (!insetText->allowMultiPar() || cur.lastpit() == 0) {
+ InsetText * inset_text = inset->asInsetText();
+ if (inset_text) {
+ inset_text->fixParagraphsFont();
+ if (!inset_text->allowMultiPar() || cur.lastpit() == 0) {
// reset first par to default
cur.text()->paragraphs().begin()
->setPlainOrDefaultLayout(bparams.documentClass());
// FIXME: We use the update flag to indicates wether a singlePar or a
// full screen update is needed. We reset it here but shall we restore it
// at the end?
- cur.noUpdate();
+ cur.noScreenUpdate();
LASSERT(cur.text() == this, /**/);
CursorSlice oldTopSlice = cur.top();
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();
recUndo(cur, pit, pit + 1);
cur.finishUndo();
pars_.swap(pit, pit + 1);
- cur.buffer()->updateBuffer();
needsUpdate = true;
+ cur.forceBufferUpdate();
++cur.pit();
break;
}
recUndo(cur, pit - 1, pit);
cur.finishUndo();
pars_.swap(pit, pit - 1);
- cur.buffer()->updateBuffer();
--cur.pit();
needsUpdate = true;
+ cur.forceBufferUpdate();
break;
}
par.params().startOfAppendix(start);
// we can set the refreshing parameters now
- cur.buffer()->updateBuffer();
+ cur.forceBufferUpdate();
break;
}
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
cur.undispatched();
- cur.updateFlags(Update::FitCursor);
+ cur.screenUpdateFlags(Update::FitCursor);
break;
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
cur.undispatched();
- cur.updateFlags(Update::FitCursor);
+ cur.screenUpdateFlags(Update::FitCursor);
break;
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
cur.undispatched();
- cur.updateFlags(Update::FitCursor);
+ cur.screenUpdateFlags(Update::FitCursor);
break;
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
cur.undispatched();
- cur.updateFlags(Update::FitCursor);
+ cur.screenUpdateFlags(Update::FitCursor);
break;
case LFUN_INSET_SELECT_ALL:
needsUpdate |= cursorBottom(cur);
} else
cur.undispatched();
- cur.updateFlags(Update::FitCursor);
+ cur.screenUpdateFlags(Update::FitCursor);
break;
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()
// provide it with two different cursors.
Cursor dummy = cur;
dummy.pos() = dummy.pit() = 0;
- cur.bv().checkDepm(dummy, cur);
+ if (cur.bv().checkDepm(dummy, cur))
+ cur.forceBufferUpdate();;
}
}
break;
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()
Cursor dummy = cur;
dummy.pos() = cur.lastpos();
dummy.pit() = cur.lastpit();
- cur.bv().checkDepm(dummy, cur);
+ if (cur.bv().checkDepm(dummy, cur))
+ cur.forceBufferUpdate();
}
}
break;
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);
+
+ if (!needsUpdate && oldTopSlice == cur.top()
+ && cur.boundary() == oldBoundary) {
+ cur.undispatched();
+ cmd = FuncRequest(LFUN_FINISHED_FORWARD);
+
+ // we will probably be moving out the inset, so we should execute
+ // the depm-mechanism, but only when the cursor has a place to
+ // go outside this inset, i.e. in a slice above.
+ if (cur.depth() > 1 && cur.pos() == cur.lastpos()
+ && cur.pit() == cur.lastpit()) {
+ // The cursor hasn't changed yet. To give the
+ // DEPM the possibility of doing something we must
+ // provide it with two different cursors.
+ Cursor dummy = cur;
+ dummy.pos() = dummy.pit() = 0;
+ if (cur.bv().checkDepm(dummy, cur))
+ cur.forceBufferUpdate();;
+ }
+ }
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);
+
+ if (!needsUpdate && oldTopSlice == cur.top()
+ && cur.boundary() == oldBoundary) {
+ cur.undispatched();
+ cmd = FuncRequest(LFUN_FINISHED_BACKWARD);
+
+ // we will probably be moving out the inset, so we should execute
+ // the depm-mechanism, but only when the cursor has a place to
+ // go outside this inset, i.e. in a slice above.
+ if (cur.depth() > 1 && cur.pos() == 0
+ && cur.pit() == 0) {
+ // The cursor hasn't changed yet. To give the
+ // DEPM the possibility of doing something we must
+ // provide it with two different cursors.
+ Cursor dummy = cur;
+ dummy.pos() = cur.lastpos();
+ dummy.pit() = cur.lastpit();
+ if (cur.bv().checkDepm(dummy, cur))
+ cur.forceBufferUpdate();
+ }
+ }
break;
case LFUN_WORD_SELECT: {
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();
}
pit_type const pit_end = cur.selEnd().pit();
for (pit_type pit = cur.selBegin().pit(); pit <= pit_end; pit++) {
Paragraph & par = paragraphs()[pit];
- if (par.getChar(0) == '\t') {
- if (cur.pit() == pit)
- cur.posBackward();
- if (cur.anchor_.pit() == pit && cur.anchor_.pos() > 0 )
- cur.anchor_.backwardPos();
-
- par.eraseChar(0, tc);
- } else
- // If no tab was present, try to remove up to four spaces.
- for (int n_spaces = 0;
- par.getChar(0) == ' ' && n_spaces < 4; ++n_spaces) {
+ if (par.empty())
+ continue;
+ char_type const c = par.getChar(0);
+ if (c == '\t' || c == ' ') {
+ // remove either 1 tab or 4 spaces.
+ int const n = (c == ' ' ? 4 : 1);
+ for (int i = 0; i < n
+ && !par.empty() && par.getChar(0) == c; ++i) {
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);
}
+ }
}
cur.finishUndo();
} else {
singleParUpdate = false;
}
moveCursor(cur, false);
+ cur.forceBufferUpdate();
break;
case LFUN_CHAR_DELETE_BACKWARD:
cutSelection(cur, true, false);
singleParUpdate = false;
}
+ cur.forceBufferUpdate();
break;
case LFUN_BREAK_PARAGRAPH:
}
case LFUN_INSET_DISSOLVE: {
- if (dissolveInset(cur))
+ if (dissolveInset(cur)) {
needsUpdate = true;
+ cur.forceBufferUpdate();
+ }
break;
}
case mouse_button::button1:
// Set the cursor
if (!bv->mouseSetCursor(cur, cmd.argument() == "region-select"))
- cur.updateFlags(Update::SinglePar | Update::FitCursor);
+ cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
if (bvcur.wordSelection())
selectWord(bvcur, WHOLE_WORD);
break;
lyx::dispatch(
FuncRequest(LFUN_COMMAND_ALTERNATIVES,
"selection-paste ; primary-selection-paste paragraph"));
- cur.noUpdate();
+ cur.noScreenUpdate();
break;
case mouse_button::button3: {
// selection, a context menu will popup.
if (bvcur.selection() && cur >= bvcur.selectionBegin()
&& cur < bvcur.selectionEnd()) {
- cur.noUpdate();
+ cur.noScreenUpdate();
return;
}
if (!bv->mouseSetCursor(cur, false))
- cur.updateFlags(Update::SinglePar | Update::FitCursor);
+ cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
break;
}
case LFUN_MOUSE_MOTION: {
// Mouse motion with right or middle mouse do nothing for now.
if (cmd.button() != mouse_button::button1) {
- cur.noUpdate();
+ cur.noScreenUpdate();
return;
}
// 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
bvcur.setSelection(true);
if (cur.top() == old) {
// We didn't move one iota, so no need to update the screen.
- cur.updateFlags(Update::SinglePar | Update::FitCursor);
- //cur.noUpdate();
+ cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
+ //cur.noScreenUpdate();
return;
}
break;
cur.bv().cursor().setSelection();
// We might have removed an empty but drawn selection
// (probably a margin)
- cur.updateFlags(Update::SinglePar | Update::FitCursor);
+ cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
} else
- cur.noUpdate();
+ cur.noScreenUpdate();
// FIXME: We could try to handle drag and drop of selection here.
return;
case mouse_button::button2:
// Middle mouse pasting is handled at mouse press time,
// see LFUN_MOUSE_PRESS.
- cur.noUpdate();
+ cur.noScreenUpdate();
return;
case mouse_button::button3:
// Cursor was set at LFUN_MOUSE_PRESS time.
// FIXME: If there is a selection we could try to handle a special
// drag & drop context menu.
- cur.noUpdate();
+ cur.noScreenUpdate();
return;
case mouse_button::none:
}
p["target"] = (cmd.argument().empty()) ?
content : cmd.argument();
- string const data = InsetCommand::params2string("href", p);
+ string const data = InsetCommand::params2string(p);
if (p["target"].empty()) {
bv->showDialog("href", data);
} else {
p["name"] = (cmd.argument().empty()) ?
cur.getPossibleLabel() :
cmd.argument();
- string const data = InsetCommand::params2string("label", p);
+ string const data = InsetCommand::params2string(p);
if (cmd.argument().empty()) {
bv->showDialog("label", data);
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
cur.posForward();
// Some insets are numbered, others are shown in the outline pane so
// let's update the labels and the toc backend.
- bv->buffer().updateBuffer();
+ cur.forceBufferUpdate();
break;
case LFUN_TABULAR_INSERT:
// date metrics.
FuncRequest cmd_caption(LFUN_CAPTION_INSERT);
doInsertInset(cur, cur.text(), cmd_caption, true, false);
- bv->buffer().updateBuffer();
- cur.updateFlags(Update::Force);
+ cur.forceBufferUpdate();
+ cur.screenUpdateFlags(Update::Force);
// FIXME: When leaving the Float (or Wrap) inset we should
// delete any empty paragraph left above or below the
// caption.
p["symbol"] = bv->cursor().innerText()->getStringToIndex(bv->cursor());
else
p["symbol"] = cmd.argument();
- string const data = InsetCommand::params2string("nomenclature", p);
+ string const data = InsetCommand::params2string(p);
bv->showDialog("nomenclature", data);
break;
}
p["type"] = from_ascii("idx");
else
p["type"] = cmd.argument();
- string const data = InsetCommand::params2string("index_print", p);
+ string const data = InsetCommand::params2string(p);
FuncRequest fr(LFUN_INSET_INSERT, data);
dispatch(cur, fr);
break;
}
case LFUN_NOMENCL_PRINT:
- case LFUN_TOC_INSERT:
- case LFUN_LINE_INSERT:
case LFUN_NEWPAGE_INSERT:
// do nothing fancy
doInsertInset(cur, this, cmd, false, false);
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);
+ cur.screenUpdateFlags(Update::FitCursor);
break;
case LFUN_FLOAT_LIST_INSERT: {
break;
}
+ case LFUN_SPELLING_REMOVE: {
+ docstring word = from_utf8(cmd.getArg(0));
+ Language * lang;
+ if (word.empty()) {
+ word = cur.selectionAsString(false);
+ // FIXME
+ if (word.size() > 100 || word.empty()) {
+ // Get word or selection
+ selectWordWhenUnderCursor(cur, WHOLE_WORD);
+ word = cur.selectionAsString(false);
+ }
+ lang = const_cast<Language *>(cur.getFont().language());
+ } else
+ lang = const_cast<Language *>(languages.getLanguage(cmd.getArg(1)));
+ WordLangTuple wl(word, lang);
+ theSpellChecker()->remove(wl);
+ break;
+ }
+
case LFUN_PARAGRAPH_PARAMS_APPLY: {
// Given data, an encoding of the ParagraphParameters
// generated in the Paragraph dialog, this function sets
case LFUN_OUTLINE_UP:
outline(OutlineUp, cur);
setCursor(cur, cur.pit(), 0);
- cur.buffer()->updateBuffer();
+ cur.forceBufferUpdate();
needsUpdate = true;
break;
case LFUN_OUTLINE_DOWN:
outline(OutlineDown, cur);
setCursor(cur, cur.pit(), 0);
- cur.buffer()->updateBuffer();
+ cur.forceBufferUpdate();
needsUpdate = true;
break;
case LFUN_OUTLINE_IN:
outline(OutlineIn, cur);
- cur.buffer()->updateBuffer();
+ cur.forceBufferUpdate();
needsUpdate = true;
break;
case LFUN_OUTLINE_OUT:
outline(OutlineOut, cur);
- cur.buffer()->updateBuffer();
+ cur.forceBufferUpdate();
needsUpdate = true;
break;
// for now only Text::erase() and Text::backspace() do that.
// The plan is to verify all the LFUNs and then to remove this
// singleParUpdate boolean altogether.
- if (cur.result().update() & Update::Force) {
+ if (cur.result().screenUpdate() & Update::Force) {
singleParUpdate = false;
needsUpdate = true;
}
// Inserting characters does not change par height in general. So, try
// to update _only_ this paragraph. BufferView will detect if a full
// metrics update is needed anyway.
- cur.updateFlags(Update::SinglePar | Update::FitCursor);
+ cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
return;
}
// FIXME: it would be better if we could just do this
//
//if (cur.result().update() != Update::FitCursor)
- // cur.noUpdate();
+ // cur.noScreenUpdate();
//
// But some LFUNs do not set Update::FitCursor when needed, so we
// do it for all. This is not very harmfull as FitCursor will provoke
// a full redraw only if needed but still, a proper review of all LFUN
// should be done and this needsUpdate boolean can then be removed.
- cur.updateFlags(Update::FitCursor);
+ cur.screenUpdateFlags(Update::FitCursor);
else
- cur.updateFlags(Update::Force | Update::FitCursor);
+ cur.screenUpdateFlags(Update::Force | Update::FitCursor);
}
bool enable = true;
InsetCode code = NO_CODE;
- switch (cmd.action_) {
+ switch (cmd.action()) {
case LFUN_DEPTH_DECREMENT:
enable = changeDepthAllowed(cur, DEC_DEPTH);
code = NOMENCL_PRINT_CODE;
else if (cmd.argument() == "label")
code = LABEL_CODE;
+ else if (cmd.argument() == "line")
+ code = LINE_CODE;
else if (cmd.argument() == "note")
code = NOTE_CODE;
else if (cmd.argument() == "phantom")
if (cit == floats.end() ||
// and that we know how to generate a list of them
(!cit->second.needsFloatPkg() && cit->second.listCommand().empty())) {
- flag.unknown(true);
+ flag.setUnknown(true);
// probably not necessary, but...
enable = false;
}
case LFUN_LABEL_INSERT:
code = LABEL_CODE;
break;
- case LFUN_LINE_INSERT:
- code = LINE_CODE;
- break;
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;
// not allowed in description items
enable = !inDescriptionItem(cur);
break;
- case LFUN_TOC_INSERT:
- code = TOC_CODE;
- // not allowed in description items
- enable = !inDescriptionItem(cur);
- break;
case LFUN_HYPERLINK_INSERT:
if (cur.selIsMultiCell() || cur.selIsMultiLine()) {
enable = false;
case LFUN_SPELLING_ADD:
case LFUN_SPELLING_IGNORE:
+ case LFUN_SPELLING_REMOVE:
enable = theSpellChecker();
break;
case LFUN_LINE_END:
case LFUN_CHAR_DELETE_FORWARD:
case LFUN_CHAR_DELETE_BACKWARD:
- case LFUN_INSET_INSERT:
case LFUN_WORD_UPCASE:
case LFUN_WORD_LOWCASE:
case LFUN_WORD_CAPITALIZE:
enable = true;
break;
+ case LFUN_INSET_INSERT: {
+ string const type = cmd.getArg(0);
+ if (type == "toc") {
+ code = TOC_CODE;
+ // not allowed in description items
+ //FIXME: couldn't this be merged in Inset::insetAllowed()?
+ enable = !inDescriptionItem(cur);
+ } else {
+ enable = true;
+ }
+ break;
+ }
+
default:
return false;
}