]> git.lyx.org Git - lyx.git/blobdiff - src/CutAndPaste.cpp
Do not overwrite read-only files. We now move the file to the backup directory and...
[lyx.git] / src / CutAndPaste.cpp
index 3e8661c5fe3637ca8827a4523b825134548178b9..9bed935d38eff7ec348cbb6ae179293b26bad45e 100644 (file)
@@ -35,6 +35,7 @@
 #include "Paragraph.h"
 #include "ParagraphParameters.h"
 #include "ParIterator.h"
+#include "TextClass.h"
 
 #include "insets/InsetBibitem.h"
 #include "insets/InsetBranch.h"
@@ -123,10 +124,9 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist,
        // Now remove all out of the pars which is NOT allowed in the
        // new environment and set also another font if that is required.
 
-       // Convert newline to paragraph break in ERT inset.
-       // This should not be here!
-       InsetCode const code = target_inset->lyxCode();
-       if (code == ERT_CODE || code == LISTINGS_CODE) {
+       // Convert newline to paragraph break in ParbreakIsNewline
+       if (target_inset->getLayout().parbreakIsNewline()
+           || pars[pit].layout().parbreak_is_newline) {
                for (size_t i = 0; i != insertion.size(); ++i) {
                        for (pos_type j = 0; j != insertion[i].size(); ++j) {
                                if (insertion[i].isNewline(j)) {
@@ -234,8 +234,8 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist,
 
                case MATH_HULL_CODE: {
                        // check for equation labels and resolve duplicates
-                       InsetMathHull & ins = static_cast<InsetMathHull &>(*it);
-                       std::vector<InsetLabel *> labels = ins.getLabels();
+                       InsetMathHull * ins = it->asInsetMath()->asHullInset();
+                       std::vector<InsetLabel *> labels = ins->getLabels();
                        for (size_t i = 0; i != labels.size(); ++i) {
                                if (!labels[i])
                                        continue;
@@ -251,19 +251,17 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist,
                                for (InsetIterator itt = inset_iterator_begin(in);
                                      itt != i_end; ++itt) {
                                        if (itt->lyxCode() == REF_CODE) {
-                                               InsetCommand & ref =
-                                                       static_cast<InsetCommand &>(*itt);
-                                               if (ref.getParam("reference") == oldname)
-                                                       ref.setParam("reference", newname);
+                                               InsetCommand * ref = itt->asInsetCommand();
+                                               if (ref->getParam("reference") == oldname)
+                                                       ref->setParam("reference", newname);
                                        } else if (itt->lyxCode() == MATH_REF_CODE) {
-                                               InsetMathHull & mi =
-                                                       static_cast<InsetMathHull &>(*itt);
+                                               InsetMathHull * mi = itt->asInsetMath()->asHullInset();
                                                // 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->asRefInset()->getTarget() == oldname)
+                                                       mi->asRefInset()->changeTarget(newname);
                                        }
                                }
                        }
@@ -322,10 +320,9 @@ pasteSelectionHelper(Cursor & cur, ParagraphList const & parlist,
                        for (InsetIterator itt = inset_iterator_begin(in);
                             itt != i_end; ++itt) {
                                if (itt->lyxCode() == CITE_CODE) {
-                                       InsetCommand & ref =
-                                               static_cast<InsetCommand &>(*itt);
-                                       if (ref.getParam("key") == oldkey)
-                                               ref.setParam("key", newkey);
+                                       InsetCommand * ref = itt->asInsetCommand();
+                                       if (ref->getParam("key") == oldkey)
+                                               ref->setParam("key", newkey);
                                }
                        }
                        break;
@@ -1039,7 +1036,7 @@ void pasteClipboardGraphics(Cursor & cur, ErrorList & /* errorList */,
        // create inset for graphic
        InsetGraphics * inset = new InsetGraphics(cur.buffer());
        InsetGraphicsParams params;
-       params.filename = support::DocFileName(filename.absFileName());
+       params.filename = support::DocFileName(filename.absFileName(), false);
        inset->setParams(params);
        cur.recordUndo();
        cur.insert(inset);