#include "support/debug.h"
#include "support/docstream.h"
#include "support/gettext.h"
+#include "support/lassert.h"
#include "support/limited_stack.h"
#include "support/lstrings.h"
InsetIterator const i_end = inset_iterator_end(in);
for (InsetIterator it = inset_iterator_begin(in); it != i_end; ++it) {
// Even though this will also be done later, it has to be done here
- // since, e.g., InsetLabel::updateCommand() is going to try to access
+ // since some inset might going to try to access
// the buffer() member.
it->setBuffer(const_cast<Buffer &>(buffer));
switch (it->lyxCode()) {
continue;
InsetLabel * lab = labels[i];
docstring const oldname = lab->getParam("name");
- lab->updateCommand(oldname, false);
+ lab->updateLabel(oldname);
// We need to update the buffer reference cache.
cur.forceBufferUpdate();
docstring const newname = lab->getParam("name");
if (ref->getParam("reference") == oldname)
ref->setParam("reference", newname);
} else if (itt->lyxCode() == MATH_REF_CODE) {
- InsetMathHull * mi = itt->asInsetMath()->asHullInset();
+ InsetMathRef * mi = itt->asInsetMath()->asRefInset();
// this is necessary to prevent an uninitialized
// buffer when the RefInset is in a MathBox.
// FIXME audit setBuffer calls
mi->setBuffer(const_cast<Buffer &>(buffer));
- if (mi->asRefInset()->getTarget() == oldname)
- mi->asRefInset()->changeTarget(newname);
+ if (mi->getTarget() == oldname)
+ mi->changeTarget(newname);
}
}
}
// check for duplicates
InsetLabel & lab = static_cast<InsetLabel &>(*it);
docstring const oldname = lab.getParam("name");
- lab.updateCommand(oldname, false);
+ lab.updateLabel(oldname);
// We need to update the buffer reference cache.
cur.forceBufferUpdate();
docstring const newname = lab.getParam("name");
if (ref.getParam("reference") == oldname)
ref.setParam("reference", newname);
} else if (itt->lyxCode() == MATH_REF_CODE) {
- InsetMathHull & mi =
- static_cast<InsetMathHull &>(*itt);
+ InsetMathRef * mi = itt->asInsetMath()->asRefInset();
// this is necessary to prevent an uninitialized
// buffer when the RefInset is in a MathBox.
// FIXME audit setBuffer calls
- mi.setBuffer(const_cast<Buffer &>(buffer));
- if (mi.asRefInset()->getTarget() == oldname)
- mi.asRefInset()->changeTarget(newname);
+ mi->setBuffer(const_cast<Buffer &>(buffer));
+ if (mi->getTarget() == oldname)
+ mi->changeTarget(newname);
}
}
break;
DocumentClass const & newtc = *newone;
// layouts
+ ParIterator it = par_iterator_begin(in);
ParIterator end = par_iterator_end(in);
- for (ParIterator it = par_iterator_begin(in); it != end; ++it) {
+ // for remembering which layouts we've had to add
+ set<docstring> newlayouts;
+ for (; it != end; ++it) {
docstring const name = it->layout().name();
// the pasted text will keep their own layout name. If this layout does
// not exist in the new document, it will behave like a standard layout.
- newtc.addLayoutIfNeeded(name);
+ bool const added_one = newtc.addLayoutIfNeeded(name);
+ if (added_one)
+ newlayouts.insert(name);
+
+ if (added_one || newlayouts.find(name) != newlayouts.end()) {
+ // Warn the user.
+ docstring const s = bformat(_("Layout `%1$s' was not found."), name);
+ errorlist.push_back(
+ ErrorItem(_("Layout Not Found"), s, it->id(), 0, it->size()));
+ }
if (in.usePlainLayout())
it->setLayout(newtc.plainLayout());
if (it->lyxCode() != FLEX_CODE)
// FIXME: Should we verify all InsetCollapsable?
continue;
- docstring const & n = newone->insetLayout(it->name()).name();
+
+ docstring const layoutName = it->layoutName();
+ docstring const & n = newone->insetLayout(layoutName).name();
bool const is_undefined = n.empty() ||
n == DocumentClass::plainInsetLayout().name();
if (!is_undefined)
docstring s;
if (oldname == newname)
s = bformat(_("Flex inset %1$s is undefined after "
- "reloading `%2$s' layout."),
- it->name(), oldname);
+ "reloading `%2$s' layout."), layoutName, oldname);
else
s = bformat(_("Flex inset %1$s is undefined because of "
"conversion from `%2$s' layout to `%3$s'."),
- it->name(), oldname, newname);
+ layoutName, oldname, newname);
// To warn the user that something had to be done.
errorlist.push_back(ErrorItem(
_("Undefined flex inset"),
cur.text()->insertStringAsParagraphs(cur, text, cur.current_font);
else
cur.text()->insertStringAsLines(cur, text, cur.current_font);
+ cur.setSelection();
+}
+
+
+void pasteSimpleText(Cursor & cur, bool asParagraphs)
+{
+ docstring text;
+ // Use internal clipboard if it is the most recent one
+ if (theClipboard().isInternal()) {
+ if (!checkPastePossible(0))
+ return;
+
+ ParagraphList const & pars = theCuts[0].first;
+ ParagraphList::const_iterator it = pars.begin();
+ for (; it != pars.end(); ++it) {
+ if (it != pars.begin())
+ text += "\n";
+ text += (*it).asString();
+ }
+ asParagraphs = false;
+ } else {
+ // Then try plain text
+ text = theClipboard().getAsText();
+ }
+
+ if (text.empty())
+ return;
+
+ cur.recordUndo();
+ cutSelection(cur, true, false);
+ if (asParagraphs)
+ cur.text()->insertStringAsParagraphs(cur, text, cur.current_font);
+ else
+ cur.text()->insertStringAsLines(cur, text, cur.current_font);
}