]> git.lyx.org Git - lyx.git/blobdiff - src/Text3.cpp
* disable some invalid insets in description items (covers bug 5937).
[lyx.git] / src / Text3.cpp
index 7104f100dc49b66ef19604038e2fa8d12b9a0086..c7fadab79dd560a495a4cfef349c5790a3444b8c 100644 (file)
@@ -311,12 +311,12 @@ static void outline(OutlineOp mode, Cursor & cur)
        Buffer & buf = *cur.buffer();
        pit_type & pit = cur.pit();
        ParagraphList & pars = buf.text().paragraphs();
-       ParagraphList::iterator bgn = pars.begin();
+       ParagraphList::iterator const bgn = pars.begin();
        // The first paragraph of the area to be copied:
        ParagraphList::iterator start = boost::next(bgn, pit);
        // The final paragraph of area to be copied:
        ParagraphList::iterator finish = start;
-       ParagraphList::iterator end = pars.end();
+       ParagraphList::iterator const end = pars.end();
 
        DocumentClass const & tc = buf.params().documentClass();
 
@@ -333,6 +333,10 @@ static void outline(OutlineOp mode, Cursor & cur)
                        break;
        }
 
+       // Do we need to set insets' buffer_ members, because we copied
+       // some stuff? We'll assume we do and reset it otherwise.
+       bool setBuffers = true;
+
        switch (mode) {
                case OutlineUp: {
                        if (start == pars.begin())
@@ -360,7 +364,7 @@ static void outline(OutlineOp mode, Cursor & cur)
                        start = boost::next(pars.begin(), deletepit);
                        pit = newpit;
                        pars.erase(start, finish);
-                       return;
+                       break;
                }
                case OutlineDown: {
                        if (finish == end)
@@ -383,7 +387,7 @@ static void outline(OutlineOp mode, Cursor & cur)
                        start = boost::next(bgn, pit);
                        pit = newpit - len;
                        pars.erase(start, finish);
-                       return;
+                       break;
                }
                case OutlineIn: {
                        pit_type const len = distance(start, finish);
@@ -402,7 +406,8 @@ static void outline(OutlineOp mode, Cursor & cur)
                                        }
                                }
                        }
-                       return;
+                       setBuffers = false;
+                       break;
                }
                case OutlineOut: {
                        pit_type const len = distance(start, finish);
@@ -421,9 +426,20 @@ static void outline(OutlineOp mode, Cursor & cur)
                                        }
                                }
                        }
-                       return;
+                       setBuffers = false;
+                       break;
                }
        }
+       if (setBuffers)
+               // FIXME This only really needs doing for the newly introduced 
+               // paragraphs. Something like:
+               //      pit_type const numpars = distance(start, finish);
+               //      start = boost::next(bgn, pit);
+               //      finish = boost::next(start, numpars);
+               //      for (; start != finish; ++start)
+               //              start->setBuffer(buf);
+               // But while this seems to work, it is kind of fragile.
+               buf.inset().setBuffer(buf);
 }
 
 
@@ -1728,6 +1744,21 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                toggleAndShow(cur, this, font);
                break;
        }
+
+       case LFUN_FONT_UULINE: {
+               Font font(ignore_font, ignore_language);
+               font.fontInfo().setUuline(FONT_TOGGLE);
+               toggleAndShow(cur, this, font);
+               break;
+       }
+
+       case LFUN_FONT_UWAVE: {
+               Font font(ignore_font, ignore_language);
+               font.fontInfo().setUwave(FONT_TOGGLE);
+               toggleAndShow(cur, this, font);
+               break;
+       }
+
        case LFUN_FONT_UNDERLINE: {
                Font font(ignore_font, ignore_language);
                font.fontInfo().setUnderbar(FONT_TOGGLE);
@@ -2040,8 +2071,11 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_DIALOG_SHOW_NEW_INSET:
                if (cmd.argument() == "bibitem")
                        code = BIBITEM_CODE;
-               else if (cmd.argument() == "bibtex")
+               else if (cmd.argument() == "bibtex") {
                        code = BIBTEX_CODE;
+                       // not allowed in description items
+                       enable = !inDescriptionItem(cur);
+               }
                else if (cmd.argument() == "box")
                        code = BOX_CODE;
                else if (cmd.argument() == "branch")
@@ -2116,6 +2150,8 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                break;
        case LFUN_FLOAT_LIST_INSERT:
                code = FLOAT_LIST_CODE;
+               // not allowed in description items
+               enable = !inDescriptionItem(cur);
                break;
        case LFUN_CAPTION_INSERT:
                code = CAPTION_CODE;
@@ -2147,7 +2183,8 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                break;
        case LFUN_BRANCH_INSERT:
                code = BRANCH_CODE;
-               if (cur.buffer()->masterBuffer()->params().branchlist().empty())
+               if (cur.buffer()->masterBuffer()->params().branchlist().empty()
+                   && cur.buffer()->params().branchlist().empty())
                        enable = false;
                break;
        case LFUN_PHANTOM_INSERT:
@@ -2169,6 +2206,8 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                break;
        case LFUN_INDEX_PRINT:
                code = INDEX_PRINT_CODE;
+               // not allowed in description items
+               enable = !inDescriptionItem(cur);
                break;
        case LFUN_NOMENCL_INSERT:
                if (cur.selIsMultiCell() || cur.selIsMultiLine()) {
@@ -2179,9 +2218,13 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                break;
        case LFUN_NOMENCL_PRINT:
                code = NOMENCL_PRINT_CODE;
+               // not allowed in description items
+               enable = !inDescriptionItem(cur);
                break;
        case LFUN_TOC_INSERT:
                code = TOC_CODE;
+               // not allowed in description items
+               enable = !inDescriptionItem(cur);
                break;
        case LFUN_HYPERLINK_INSERT:
                if (cur.selIsMultiCell() || cur.selIsMultiLine()) {
@@ -2430,6 +2473,8 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_FONT_DEFAULT:
        case LFUN_FONT_UNDERLINE:
        case LFUN_FONT_STRIKEOUT:
+       case LFUN_FONT_UULINE:
+       case LFUN_FONT_UWAVE:
        case LFUN_FONT_SIZE:
        case LFUN_LANGUAGE:
        case LFUN_TEXTSTYLE_APPLY: