]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetFlex.cpp
Wrap rotated cells with linebreaks in varwidth
[lyx.git] / src / insets / InsetFlex.cpp
index 70de9fd2ebaeef97cbb5ec8b7ce7fe3721eed0cb..31828b615ffbd808ea7e972e2c3ecbd252114b35 100644 (file)
@@ -25,6 +25,7 @@
 #include "TextClass.h"
 
 #include "support/gettext.h"
+#include "support/lstrings.h"
 
 #include <ostream>
 
@@ -34,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_)
 {}
 
 
@@ -50,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_));
@@ -66,9 +67,26 @@ InsetLayout::InsetDecoration InsetFlex::decoration() const
 
 void InsetFlex::write(ostream & os) const
 {
-       os << "Flex " <<
-               (name_.empty() ? "undefined" : name_) << "\n";
-       InsetCollapsable::write(os);
+       os << "Flex ";
+       string name;
+       if (name_.empty())
+               name = "undefined";
+       else {
+               InsetLayout const & il = getLayout();
+               // use il.name(), since this resolves obsoleted InsetLayout names
+               if (il.name() == "undefined")
+                       // This is the name of the plain_insetlayout_. We assume that the
+                       // name resolution has failed.
+                       name = name_;
+               else {
+                       name = to_utf8(il.name());
+                       // Remove the "Flex:" prefix, if it is present
+                       if (support::prefixIs(name, "Flex:"))
+                               name = support::split(name, ':');
+               }
+       }
+       os << name << "\n";
+       InsetCollapsible::write(os);
 }
 
 
@@ -79,17 +97,17 @@ 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) {
                                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);
        }
 }
 
@@ -100,19 +118,19 @@ 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) {
                                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;
        }
 }
@@ -128,12 +146,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
@@ -141,7 +163,7 @@ 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();
 }