]> git.lyx.org Git - lyx.git/blobdiff - src/Text2.cpp
* Paragraph: reserve memory by chunks of 100 chars. This improve the loading of big...
[lyx.git] / src / Text2.cpp
index 4c47d0811f6c66f8b956755fe9390d0a78f0ea33..86115d546752184579770e050be501de355ba93f 100644 (file)
@@ -28,6 +28,7 @@
 #include "BufferParams.h"
 #include "BufferView.h"
 #include "Bullet.h"
+#include "Changes.h"
 #include "Color.h"
 #include "Cursor.h"
 #include "CutAndPaste.h"
@@ -37,6 +38,7 @@
 #include "FuncRequest.h"
 #include "gettext.h"
 #include "Language.h"
+#include "Layout.h"
 #include "Lexer.h"
 #include "LyXFunc.h"
 #include "LyXRC.h"
@@ -46,7 +48,7 @@
 #include "ParIterator.h"
 #include "Server.h"
 #include "ServerSocket.h"
-#include "Undo.h"
+#include "TextMetrics.h"
 #include "VSpace.h"
 
 #include "frontends/FontMetrics.h"
@@ -58,6 +60,7 @@
 #include "support/textutils.h"
 
 #include <boost/current_function.hpp>
+#include <boost/next_prior.hpp>
 
 #include <sstream>
 
@@ -289,7 +292,7 @@ void Text::changeDepth(Cursor & cur, DEPTH_CHANGE type)
        BOOST_ASSERT(this == cur.text());
        pit_type const beg = cur.selBegin().pit();
        pit_type const end = cur.selEnd().pit() + 1;
-       recordUndoSelection(cur);
+       cur.recordUndoSelection();
        int max_depth = (beg != 0 ? pars_[beg - 1].getMaxDepthAfter() : 0);
 
        for (pit_type pit = beg; pit != end; ++pit) {
@@ -337,7 +340,7 @@ void Text::setFont(Cursor & cur, Font const & font, bool toggleall)
                return;
 
        // Ok, we have a selection.
-       recordUndoSelection(cur);
+       cur.recordUndoSelection();
 
        setFont(cur.bv(), cur.selectionBegin().top(), 
                cur.selectionEnd().top(), font, toggleall);
@@ -583,7 +586,7 @@ bool Text::checkAndActivateInset(Cursor & cur, bool front)
        if (!front && cur.pos() == 0)
                return false;
        Inset * inset = front ? cur.nextInset() : cur.prevInset();
-       if (!isHighlyEditableInset(inset))
+       if (!inset || inset->editable() != Inset::HIGHLY_EDITABLE)
                return false;
        /*
         * Apparently, when entering an inset we are expected to be positioned
@@ -636,7 +639,7 @@ bool Text::cursorLeft(Cursor & cur)
 
        // move to the previous paragraph or do nothing
        if (cur.pit() > 0)
-               return setCursor(cur, cur.pit() - 1, getPar(cur.pit() - 1).size());
+               return setCursor(cur, cur.pit() - 1, getPar(cur.pit() - 1).size(), true, false);
        return false;
 }
 
@@ -693,7 +696,7 @@ bool Text::cursorRight(Cursor & cur)
 
        // move to next paragraph
        if (cur.pit() != cur.lastpit())
-               return setCursor(cur, cur.pit() + 1, 0);
+               return setCursor(cur, cur.pit() + 1, 0, true, false);
        return false;
 }
 
@@ -809,11 +812,15 @@ bool Text::deleteEmptyParagraphMechanism(Cursor & cur,
 
        if (oldpar.empty() || (oldpar.size() == 1 && oldpar.isLineSeparator(0))) {
                // Delete old par.
-               recordUndo(old, Undo::ATOMIC,
+               old.recordUndo(ATOMIC_UNDO,
                           max(old.pit() - 1, pit_type(0)),
                           min(old.pit() + 1, old.lastpit()));
                ParagraphList & plist = old.text()->paragraphs();
+               bool const soa = oldpar.params().startOfAppendix();
                plist.erase(boost::next(plist.begin(), old.pit()));
+               // do not lose start of appendix marker (bug 4212)
+               if (soa)
+                       plist[old.pit()].params().startOfAppendix(true);
 
                // see #warning (FIXME?) above 
                if (cur.depth() >= old.depth()) {
@@ -886,13 +893,13 @@ void Text::deleteEmptyParagraphMechanism(pit_type first, pit_type last, bool tra
 
 void Text::recUndo(Cursor & cur, pit_type first, pit_type last) const
 {
-       recordUndo(cur, Undo::ATOMIC, first, last);
+       cur.recordUndo(ATOMIC_UNDO, first, last);
 }
 
 
 void Text::recUndo(Cursor & cur, pit_type par) const
 {
-       recordUndo(cur, Undo::ATOMIC, par, par);
+       cur.recordUndo(ATOMIC_UNDO, par, par);
 }
 
 } // namespace lyx