#include "insets/InsetQuotes.h"
#include "insets/InsetSpecialChar.h"
#include "insets/InsetText.h"
-#include "insets/InsetInfo.h"
#include "insets/InsetGraphics.h"
#include "insets/InsetGraphicsParams.h"
if (edit)
inset->edit(cur, true);
// Now put this into inset
- static_cast<InsetCollapsable *>(inset)->text_.insertStringAsParagraphs(cur, ds);
+ static_cast<InsetCollapsable *>(inset)->text().insertStringAsParagraphs(cur, ds);
return true;
}
bool gotsel = false;
if (cur.selection()) {
- lyx::dispatch(FuncRequest(LFUN_CUT));
+ cutSelection(cur, false, pastesel);
+ cur.clearSelection();
gotsel = true;
}
text->insertInset(cur, inset);
if (!gotsel || !pastesel)
return true;
- lyx::dispatch(FuncRequest(LFUN_PASTE, "0"));
+ pasteFromStack(cur, cur.buffer().errorList("Paste"), 0);
+ cur.buffer().errors("Paste");
+ cur.clearSelection(); // bug 393
+ cur.finishUndo();
InsetText * insetText = dynamic_cast<InsetText *>(inset);
- if (insetText && !insetText->allowMultiPar() || cur.lastpit() == 0) {
+ if (insetText && (!insetText->allowMultiPar() || cur.lastpit() == 0)) {
// reset first par to default
cur.text()->paragraphs().begin()
- ->setEmptyOrDefaultLayout(bparams.documentClass());
+ ->setPlainOrDefaultLayout(bparams.documentClass());
cur.pos() = 0;
cur.pit() = 0;
// Merge multiple paragraphs -- hack
while (cur.lastpit() > 0)
mergeParagraph(bparams, cur.text()->paragraphs(), 0);
+ cur.leaveInset(*inset);
} else {
- // reset surrounding par to default
- docstring const layoutname = insetText->useEmptyLayout()
- ? bparams.documentClass().emptyLayoutName()
- : bparams.documentClass().defaultLayoutName();
cur.leaveInset(*inset);
+ // reset surrounding par to default
+ DocumentClass const & dc = bparams.documentClass();
+ docstring const layoutname = inset->usePlainLayout()
+ ? dc.plainLayoutName()
+ : dc.defaultLayoutName();
text->setLayout(cur, layoutname);
}
if (!ins)
break;
- cur.recordUndoFullDocument();
+ cur.recordUndo();
string id = to_utf8(cmd.argument());
string grp = graphics::getGroupParams(bv->buffer(), id);
case LFUN_PASTE: {
cur.message(_("Paste"));
+ LASSERT(cur.selBegin().idx() == cur.selEnd().idx(), /**/);
cap::replaceSelection(cur);
// without argument?
if (layout.empty())
layout = tclass.defaultLayoutName();
- if (para.forceEmptyLayout())
+ if (para.forcePlainLayout())
// in this case only the empty layout is allowed
- layout = tclass.emptyLayoutName();
- else if (para.useEmptyLayout()) {
+ layout = tclass.plainLayoutName();
+ else if (para.usePlainLayout()) {
// in this case, default layout maps to empty layout
if (layout == tclass.defaultLayoutName())
- layout = tclass.emptyLayoutName();
+ layout = tclass.plainLayoutName();
} else {
// otherwise, the empty layout maps to the default
- if (layout == tclass.emptyLayoutName())
+ if (layout == tclass.plainLayoutName())
layout = tclass.defaultLayoutName();
}
else
c = par.getChar(pos - 1);
string arg = to_utf8(cmd.argument());
- cur.insert(new InsetQuotes(c, bufparams.quotes_language,
- (arg == "single") ? InsetQuotes::SingleQuotes
- : InsetQuotes::DoubleQuotes));
+ cur.insert(new InsetQuotes(bv->buffer(), c, (arg == "single")
+ ? InsetQuotes::SingleQuotes : InsetQuotes::DoubleQuotes));
cur.posForward();
}
else
// Single-click on work area
case LFUN_MOUSE_PRESS:
// We are not marking a selection with the keyboard in any case.
- cur.bv().cursor().mark() = false;
+ cur.bv().cursor().setMark(false);
switch (cmd.button()) {
case mouse_button::button1:
// Set the cursor
case mouse_button::button2:
// Middle mouse pasting.
+ bv->mouseSetCursor(cur);
if (!cap::selection()) {
// There is no local selection in the current buffer, so try to
// paste primary selection instead.
bv->cursor().finishUndo();
break;
- case mouse_button::button3:
- if (cur.selection()) {
- DocIterator const selbeg = cur.selectionBegin();
- DocIterator const selend = cur.selectionEnd();
- Cursor tmpcur = cur;
- tm.setCursorFromCoordinates(tmpcur, cmd.x, cmd.y);
- // Don't do anything if we right-click a selection, a selection
- // context menu should popup instead.
- if (tmpcur < selbeg || tmpcur >= selend) {
- cur.noUpdate();
- return;
- }
+ case mouse_button::button3: {
+ Cursor const & bvcur = cur.bv().cursor();
+ // Don't do anything if we right-click a
+ // selection, a context menu will popup.
+ if (bvcur.selection() && cur >= bvcur.selectionBegin()
+ && cur < bvcur.selectionEnd()) {
+ cur.noUpdate();
+ return;
}
- if (!bv->mouseSetCursor(cur, false)) {
+ if (!bv->mouseSetCursor(cur, false))
cur.updateFlags(Update::SinglePar | Update::FitCursor);
- break;
- }
+ break;
+ }
+
default:
break;
} // switch (cmd.button())
// We continue with our existing selection or start a new one, so don't
// reset the anchor.
bvcur.setCursor(cur);
- bvcur.selection() = true;
+ 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);
// otherwise, single click does not clear persistent selection
// buffer.
if (cur.selection()) {
- // Finish selection.
- // If double click, cur is moved to the end of word by selectWord
- // but bvcur is current mouse position.
- cur.bv().cursor().selection() = true;
- }
+ // Finish selection. If double click,
+ // cur is moved to the end of word by
+ // selectWord but bvcur is current
+ // mouse position.
+ cur.bv().cursor().setSelection();
+ // We might have removed an empty but drawn selection
+ // (probably a margin)
+ cur.updateFlags(Update::SinglePar | Update::FitCursor);
+ } else
+ cur.noUpdate();
// FIXME: We could try to handle drag and drop of selection here.
- cur.noUpdate();
return;
case mouse_button::button2:
case LFUN_FLEX_INSERT:
case LFUN_BOX_INSERT:
case LFUN_BRANCH_INSERT:
- case LFUN_BIBITEM_INSERT:
case LFUN_ERT_INSERT:
case LFUN_LISTING_INSERT:
case LFUN_MARGINALNOTE_INSERT:
// add a separate paragraph for the caption inset
pars.push_back(Paragraph());
- pars.back().setInsetOwner(pars[0].inInset());
- pars.back().setEmptyOrDefaultLayout(tclass);
+ pars.back().setInsetOwner(&pars[0].inInset());
+ pars.back().setPlainOrDefaultLayout(tclass);
int cap_pit = pars.size() - 1;
// if an empty inset was created, we create an additional empty
// the graphics (or table).
if (!content) {
pars.push_back(Paragraph());
- pars.back().setInsetOwner(pars[0].inInset());
- pars.back().setEmptyOrDefaultLayout(tclass);
+ pars.back().setInsetOwner(&pars[0].inInset());
+ pars.back().setPlainOrDefaultLayout(tclass);
}
// reposition the cursor to the caption
}
case LFUN_NOMENCL_INSERT: {
- FuncRequest cmd1 = cmd;
+ InsetCommandParams p(NOMENCL_CODE);
if (cmd.argument().empty())
- cmd1 = FuncRequest(cmd,
- bv->cursor().innerText()->getStringToIndex(bv->cursor()));
- Inset * inset = createInset(cur.bv().buffer(), cmd1);
- if (!inset)
- break;
- cur.recordUndo();
- cur.clearSelection();
- insertInset(cur, inset);
- // Show the dialog for the nomenclature entry, since the
- // description entry still needs to be filled in.
- if (cmd.action == LFUN_NOMENCL_INSERT)
- inset->edit(cur, true);
- cur.posForward();
+ p["symbol"] = bv->cursor().innerText()->getStringToIndex(bv->cursor());
+ else
+ p["symbol"] = cmd.argument();
+ string const data = InsetCommand::params2string("nomenclature", p);
+ bv->showDialog("nomenclature", data);
break;
}
MacroType type = MacroTypeNewcommand;
if (s2 == "def")
type = MacroTypeDef;
- cur.insert(new MathMacroTemplate(from_utf8(token(s, ' ', 0)), nargs, false, type));
- //cur.nextInset()->edit(cur, true);
+ MathMacroTemplate * inset = new MathMacroTemplate(from_utf8(token(s, ' ', 0)), nargs, false, type);
+ inset->setBuffer(bv->buffer());
+ insertInset(cur, inset);
+
+ // enter macro inset and select the name
+ cur.push(*inset);
+ cur.top().pos() = cur.top().lastpos();
+ cur.resetAnchor();
+ cur.setSelection(true);
+ cur.top().pos() = 0;
}
break;
case LFUN_MATH_MATRIX:
case LFUN_MATH_DELIM:
case LFUN_MATH_BIGDELIM: {
+ cur.recordUndo();
cap::replaceSelection(cur);
cur.insert(new InsetMathHull(hullSimple));
checkAndActivateInset(cur, true);
break;
}
- case LFUN_FONT_BOLD: {
+ case LFUN_FONT_BOLD:
+ case LFUN_FONT_BOLDSYMBOL: {
Font font(ignore_font, ignore_language);
font.fontInfo().setSeries(BOLD_SERIES);
toggleAndShow(cur, this, font);
breakParagraph(cur);
}
- docstring const laystr = cur.inset().useEmptyLayout() ?
- tclass.emptyLayoutName() :
+ docstring const laystr = cur.inset().usePlainLayout() ?
+ tclass.plainLayoutName() :
tclass.defaultLayoutName();
setLayout(cur, laystr);
ParagraphParameters p;
+ // FIXME If this call were replaced with one to clearParagraphParams(),
+ // then we could get rid of this method altogether.
setParagraphs(cur, p);
// FIXME This should be simplified when InsetFloatList takes a
// Buffer in its constructor.
case LFUN_ESCAPE:
if (cur.selection()) {
- cur.selection() = false;
+ cur.setSelection(false);
} else {
cur.undispatched();
// This used to be LFUN_FINISHED_RIGHT, I think FORWARD is more
flag.setOnOff(cur.paragraph().params().startOfAppendix());
break;
- case LFUN_BIBITEM_INSERT:
- enable = (cur.paragraph().layout().labeltype == LABEL_BIBLIO
- && cur.pos() == 0);
- break;
-
case LFUN_DIALOG_SHOW_NEW_INSET:
if (cmd.argument() == "bibitem")
code = BIBITEM_CODE;
code = INDEX_PRINT_CODE;
break;
case LFUN_NOMENCL_INSERT:
+ if (cur.selIsMultiCell() || cur.selIsMultiLine()) {
+ enable = false;
+ break;
+ }
code = NOMENCL_CODE;
break;
case LFUN_NOMENCL_PRINT:
code = TOC_CODE;
break;
case LFUN_HYPERLINK_INSERT:
+ if (cur.selIsMultiCell() || cur.selIsMultiLine()) {
+ enable = false;
+ break;
+ }
code = HYPERLINK_CODE;
break;
case LFUN_QUOTE_INSERT:
break;
case LFUN_FONT_BOLD:
+ case LFUN_FONT_BOLDSYMBOL:
flag.setOnOff(fontinfo.series() == BOLD_SERIES);
break;
case LFUN_OUTLINE_DOWN:
case LFUN_OUTLINE_IN:
case LFUN_OUTLINE_OUT:
- enable = (cur.paragraph().layout().toclevel != Layout::NOT_IN_TOC);
+ // FIXME: LyX is not ready for outlining within inset.
+ enable = isMainText(cur.bv().buffer())
+ && cur.paragraph().layout().toclevel != Layout::NOT_IN_TOC;
break;
case LFUN_NEWLINE_INSERT: