]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetFlex.cpp
Enable dissolve in undefined Flex inset context menu
[lyx.git] / src / insets / InsetFlex.cpp
index ee3b7c89c45677274218ea35bb629e5015c14cd2..05c48f68eceb2275eb5a45b872f2e7163fc9a448 100644 (file)
@@ -23,7 +23,6 @@
 #include "Lexer.h"
 #include "ParIterator.h"
 #include "TextClass.h"
-#include "TocBackend.h"
 
 #include "support/gettext.h"
 #include "support/lstrings.h"
@@ -36,12 +35,12 @@ namespace lyx {
 
 
 InsetFlex::InsetFlex(Buffer * buf, string const & layoutName)
-       : InsetCollapsable(buf), name_(layoutName)
+       : InsetCollapsible(buf), name_(layoutName)
 {}
 
 
 InsetFlex::InsetFlex(InsetFlex const & in)
-       : InsetCollapsable(in), name_(in.name_)
+       : InsetCollapsible(in), name_(in.name_)
 {}
 
 
@@ -52,7 +51,7 @@ InsetLayout const & InsetFlex::getLayout() const
                return DocumentClass::plainInsetLayout();
 
        DocumentClass const & dc = buffer().params().documentClass();
-       docstring const dname = from_utf8(name_); 
+       docstring const dname = from_utf8(name_);
        if (dc.hasInsetLayout(dname))
                return dc.insetLayout(dname);
        return dc.insetLayout(from_utf8("Flex:" + name_));
@@ -87,7 +86,7 @@ void InsetFlex::write(ostream & os) const
                }
        }
        os << name << "\n";
-       InsetCollapsable::write(os);
+       InsetCollapsible::write(os);
 }
 
 
@@ -98,17 +97,19 @@ bool InsetFlex::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_INSET_DISSOLVE:
                if (!cmd.argument().empty()) {
                        InsetLayout const & il = getLayout();
-                       InsetLayout::InsetLyXType const type = 
+                       InsetLayout::InsetLyXType const type =
                                translateLyXType(to_utf8(cmd.argument()));
-                       if (il.lyxtype() == type) {
+                       if (il.lyxtype() == type
+                           || (il.name() == DocumentClass::plainInsetLayout().name()
+                                   && type == InsetLayout::CHARSTYLE)) {
                                FuncRequest temp_cmd(LFUN_INSET_DISSOLVE);
-                               return InsetCollapsable::getStatus(cur, temp_cmd, flag);
+                               return InsetCollapsible::getStatus(cur, temp_cmd, flag);
                        } else
                                return false;
                }
                // fall-through
        default:
-               return InsetCollapsable::getStatus(cur, cmd, flag);
+               return InsetCollapsible::getStatus(cur, cmd, flag);
        }
 }
 
@@ -119,19 +120,21 @@ void InsetFlex::doDispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_INSET_DISSOLVE:
                if (!cmd.argument().empty()) {
                        InsetLayout const & il = getLayout();
-                       InsetLayout::InsetLyXType const type = 
+                       InsetLayout::InsetLyXType const type =
                                translateLyXType(to_utf8(cmd.argument()));
-                       
-                       if (il.lyxtype() == type) {
+
+                       if (il.lyxtype() == type
+                           || (il.name() == DocumentClass::plainInsetLayout().name()
+                                   && type == InsetLayout::CHARSTYLE)) {
                                FuncRequest temp_cmd(LFUN_INSET_DISSOLVE);
-                               InsetCollapsable::doDispatch(cur, temp_cmd);
+                               InsetCollapsible::doDispatch(cur, temp_cmd);
                        } else
                                cur.undispatched();
                        break;
                }
                // fall-through
        default:
-               InsetCollapsable::doDispatch(cur, cmd);
+               InsetCollapsible::doDispatch(cur, cmd);
                break;
        }
 }
@@ -147,12 +150,16 @@ void InsetFlex::updateBuffer(ParIterator const & it, UpdateType utype)
        docstring const & count = il.counter();
        bool const have_counter = cnts.hasCounter(count);
        if (have_counter) {
-               cnts.step(count, utype);
-               custom_label += ' ' +
-                       cnts.theCounter(count, it.paragraph().getParLanguage(bp)->code());
+               Paragraph const & par = it.paragraph();
+               if (!par.isDeleted(it.pos())) {
+                       cnts.step(count, utype);
+                       custom_label += ' ' +
+                               cnts.theCounter(count, it.paragraph().getParLanguage(bp)->code());
+               } else
+                       custom_label += ' ' + from_ascii("#");
        }
        setLabel(custom_label);
-       
+
        bool const save_counter = have_counter && utype == OutputUpdate;
        if (save_counter) {
                // we assume the counter is local to this inset
@@ -160,34 +167,10 @@ void InsetFlex::updateBuffer(ParIterator const & it, UpdateType utype)
                // need a layout flag
                cnts.saveLastCounter();
        }
-       InsetCollapsable::updateBuffer(it, utype);
+       InsetCollapsible::updateBuffer(it, utype);
        if (save_counter)
                cnts.restoreLastCounter();
 }
 
 
-void InsetFlex::addToToc(DocIterator const & cpit, bool output_active,
-                         UpdateType utype) const
-{
-       InsetLayout const & layout = getLayout();
-       if (layout.addToToc()) {
-               TocBuilder & b = buffer().tocBackend().builder(layout.tocType());
-               // Cursor inside the inset
-               DocIterator pit = cpit;
-               pit.push_back(CursorSlice(const_cast<InsetFlex &>(*this)));
-               docstring const label = getLabel();
-               b.pushItem(pit, label + (label.empty() ? "" : ": "), output_active);
-               // Proceed with the rest of the inset.
-               InsetCollapsable::addToToc(cpit, output_active, utype);
-               if (layout.isTocCaption()) {
-                       docstring str;
-                       text().forOutliner(str, TOC_ENTRY_LENGTH);
-                       b.argumentItem(str);
-               }
-               b.pop();
-       } else
-               InsetCollapsable::addToToc(cpit, output_active, utype);
-}
-
-
 } // namespace lyx