]> git.lyx.org Git - lyx.git/blobdiff - src/toc.C
minimal effort implementation of:
[lyx.git] / src / toc.C
index 2442053a935d2a62a52f6219877fa833ad119ae4..9cc013ecb57ca55a8fc879468c0b3dd78739c01e 100644 (file)
--- a/src/toc.C
+++ b/src/toc.C
@@ -22,6 +22,7 @@
 #include "paragraph.h"
 #include "cursor.h"
 #include "debug.h"
+#include "undo.h"
 
 #include "frontends/LyXView.h"
 
@@ -123,8 +124,11 @@ string const getGuiName(string const & type, Buffer const & buffer)
 }
 
 
-void outline(OutlineOp mode, Buffer * buf, pit_type & pit)
+void outline(OutlineOp mode,  LCursor & cur)
 {
+       recordUndo(cur);
+       Buffer * buf = & cur.buffer();
+       pit_type & pit = cur.pit();
        ParagraphList & pars = buf->text().paragraphs();
        ParagraphList::iterator bgn = pars.begin();
        ParagraphList::iterator s = boost::next(bgn, pit);
@@ -139,7 +143,7 @@ void outline(OutlineOp mode, Buffer * buf, pit_type & pit)
        int const thistoclevel = s->layout()->toclevel;
        int toclevel;
        switch (mode) {
-               case UP: {
+               case Up: {
                        if (p != end)
                                ++p;
                        for (; p != end; ++p) {
@@ -171,7 +175,7 @@ void outline(OutlineOp mode, Buffer * buf, pit_type & pit)
                        pars.erase(s, t);
                break;
                }
-               case DOWN: {
+               case Down: {
                           if (p != end)
                                ++p;
                        for (; p != end; ++p) {
@@ -202,17 +206,19 @@ void outline(OutlineOp mode, Buffer * buf, pit_type & pit)
                        pars.erase(s, t);
                break;
                }
-               case IN:
+               case In:
                        for (; lit != lend; ++lit) {
-                               if ((*lit)->toclevel == thistoclevel + 1) {
+                               if ((*lit)->toclevel == thistoclevel + 1 &&
+                                   s->layout()->labeltype == (*lit)->labeltype) {
                                        s->layout((*lit));
                                        break;
                                }
                        }
                break;
-               case OUT:
+               case Out:
                        for (; lit != lend; ++lit) {
-                               if ((*lit)->toclevel == thistoclevel - 1) {
+                               if ((*lit)->toclevel == thistoclevel - 1 &&
+                                   s->layout()->labeltype == (*lit)->labeltype) {
                                        s->layout((*lit));
                                        break;
                                }