]> git.lyx.org Git - lyx.git/blobdiff - src/CutAndPaste.cpp
Continue working on the embedding feature. An additional parameter updateFile is...
[lyx.git] / src / CutAndPaste.cpp
index 7e980ddd6ab62aeb4f824e332263807e9b09b699..bd0b3baaa7cdddfa974b49b52897f687ba0dd97d 100644 (file)
@@ -147,7 +147,7 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist,
        // note that we are doing this if the empty layout is
        // supposed to be the default, not just if it is forced
        if (cur.inset().useEmptyLayout()) {
-               LayoutPtr const layout =
+               Layout const & layout =
                        buffer.params().documentClass().emptyLayout();
                ParagraphList::iterator const end = insertion.end();
                for (ParagraphList::iterator par = insertion.begin();
@@ -225,7 +225,7 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist,
                        // check for duplicates
                        InsetCommand & lab = static_cast<InsetCommand &>(*it);
                        docstring const oldname = lab.getParam("name");
-                       lab.update(oldname, false);
+                       lab.updateCommand(oldname, false);
                        docstring const newname = lab.getParam("name");
                        if (oldname != newname) {
                                // adapt the references
@@ -240,6 +240,25 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist,
                        break;
                }
 
+               case BIBITEM_CODE: {
+                       // check for duplicates
+                       InsetCommand & bib = static_cast<InsetCommand &>(*it);
+                       docstring const oldkey = bib.getParam("key");
+                       bib.updateCommand(oldkey, false);
+                       docstring const newkey = bib.getParam("key");
+                       if (oldkey != newkey) {
+                               // adapt the references
+                               for (InsetIterator itt = inset_iterator_begin(in); itt != i_end; ++itt) {
+                                       if (itt->lyxCode() == CITE_CODE) {
+                                               InsetCommand & ref = dynamic_cast<InsetCommand &>(*itt);
+                                               if (ref.getParam("key") == oldkey)
+                                                       ref.setParam("key", newkey);
+                                       }
+                               }
+                       }
+                       break;
+               }
+
                default:
                        break; // nothing
                }
@@ -430,7 +449,7 @@ void switchBetweenClasses(DocumentClass const * const oldone,
        // layouts
        ParIterator end = par_iterator_end(in);
        for (ParIterator it = par_iterator_begin(in); it != end; ++it) {
-               docstring const name = it->layout()->name();
+               docstring const name = it->layout().name();
                bool hasLayout = newtc.hasLayout(name);
 
                if (in.useEmptyLayout())
@@ -444,7 +463,7 @@ void switchBetweenClasses(DocumentClass const * const oldone,
                        docstring const s = bformat(
                                                 _("Layout had to be changed from\n%1$s to %2$s\n"
                                                "because of class conversion from\n%3$s to %4$s"),
-                        name, it->layout()->name(),
+                        name, it->layout().name(),
                         from_utf8(oldtc.name()), from_utf8(newtc.name()));
                        // To warn the user that something had to be done.
                        errorlist.push_back(ErrorItem(_("Changed Layout"), s,