#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");
// 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");
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());
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);
}