Author: rgheck
Date: Wed Jun  8 02:12:57 2011
New Revision: 38981
URL: http://www.lyx.org/trac/changeset/38981

Log:
Fix bug #7517. This restores some code removed when we started adding basic 
layouts we didn't recognize.

Modified:
   lyx-devel/trunk/src/CutAndPaste.cpp
   lyx-devel/trunk/src/Text.cpp
   lyx-devel/trunk/src/TextClass.cpp
   lyx-devel/trunk/src/TextClass.h

Modified: lyx-devel/trunk/src/CutAndPaste.cpp
==============================================================================
--- lyx-devel/trunk/src/CutAndPaste.cpp Wed Jun  8 02:12:52 2011        (r38980)
+++ lyx-devel/trunk/src/CutAndPaste.cpp Wed Jun  8 02:12:57 2011        (r38981)
@@ -647,13 +647,25 @@
        DocumentClass const & newtc = *newone;
 
        // layouts
+       ParIterator it = par_iterator_begin(in);
        ParIterator end = par_iterator_end(in);
-       for (ParIterator it = par_iterator_begin(in); it != end; ++it) {
+       // for remembering which layouts we've had to add
+       set<docstring> newlayouts;
+       for (; it != end; ++it) {
                docstring const name = it->layout().name();
 
                // the pasted text will keep their own layout name. If this 
layout does
                // not exist in the new document, it will behave like a 
standard layout.
-               newtc.addLayoutIfNeeded(name);
+               bool const added_one = newtc.addLayoutIfNeeded(name);
+               if (added_one)
+                       newlayouts.insert(name);
+
+               if (added_one || newlayouts.find(name) != newlayouts.end()) {
+                       // Warn the user.
+                       docstring const s = bformat(_("Layout `%1$s' was not 
found."), name);
+                       errorlist.push_back(
+                               ErrorItem(_("Layout Not Found"), s, it->id(), 
0, it->size()));
+               }
 
                if (in.usePlainLayout())
                        it->setLayout(newtc.plainLayout());

Modified: lyx-devel/trunk/src/Text.cpp
==============================================================================
--- lyx-devel/trunk/src/Text.cpp        Wed Jun  8 02:12:52 2011        (r38980)
+++ lyx-devel/trunk/src/Text.cpp        Wed Jun  8 02:12:57 2011        (r38981)
@@ -357,6 +357,13 @@
                // all unknown layouts such as frame will be added to document 
class article so that
                // these layouts can keep their original names.
                tclass.addLayoutIfNeeded(layoutname);
+               bool const added_one = tclass.addLayoutIfNeeded(layoutname);
+               if (added_one) {
+                       // Warn the user.
+                       docstring const s = bformat(_("Layout `%1$s' was not 
found."), layoutname);
+                       errorList.push_back(
+                               ErrorItem(_("Layout Not Found"), s, par.id(), 
0, par.size()));
+               }
 
                par.setLayout(bp.documentClass()[layoutname]);
 

Modified: lyx-devel/trunk/src/TextClass.cpp
==============================================================================
--- lyx-devel/trunk/src/TextClass.cpp   Wed Jun  8 02:12:52 2011        (r38980)
+++ lyx-devel/trunk/src/TextClass.cpp   Wed Jun  8 02:12:57 2011        (r38981)
@@ -1221,10 +1221,13 @@
 }
 
 
-void DocumentClass::addLayoutIfNeeded(docstring const & n) const
+bool DocumentClass::addLayoutIfNeeded(docstring const & n) const
 {
-       if (!hasLayout(n))
-               layoutlist_.push_back(createBasicLayout(n, true));
+       if (hasLayout(n))
+               return false;
+
+       layoutlist_.push_back(createBasicLayout(n, true));
+       return true;
 }
 
 

Modified: lyx-devel/trunk/src/TextClass.h
==============================================================================
--- lyx-devel/trunk/src/TextClass.h     Wed Jun  8 02:12:52 2011        (r38980)
+++ lyx-devel/trunk/src/TextClass.h     Wed Jun  8 02:12:57 2011        (r38981)
@@ -377,7 +377,8 @@
        /// a plain inset layout for use as a default
        static InsetLayout const & plainInsetLayout() { return 
plain_insetlayout_; }
        /// add a new layout \c name if it does not exist in layoutlist_
-       void addLayoutIfNeeded(docstring const & name) const;
+       /// \return whether we had to add one.
+       bool addLayoutIfNeeded(docstring const & name) const;
 
        ///////////////////////////////////////////////////////////////////
        // accessors

Reply via email to