]> git.lyx.org Git - lyx.git/blobdiff - src/Buffer.cpp
Fix bug 4441. GuiRef: Ok button must be default.
[lyx.git] / src / Buffer.cpp
index d977e2c2112e45a8dade542c17cafbcfebdd3a78..8105d5261ba8b57006528033b55105e4116f2080 100644 (file)
@@ -779,7 +779,7 @@ Buffer::ReadStatus Buffer::readFile(Lexer & lex, FileName const & filename,
                                     bformat(_("%1$s is from a different"
                                              " version of LyX, but a temporary"
                                              " file for converting it could"
-                                                           " not be created."),
+                                             " not be created."),
                                              from_utf8(filename.absFilename())));
                        return failure;
                }
@@ -789,7 +789,7 @@ Buffer::ReadStatus Buffer::readFile(Lexer & lex, FileName const & filename,
                                     bformat(_("%1$s is from a different"
                                               " version of LyX, but the"
                                               " conversion script lyx2lyx"
-                                                           " could not be found."),
+                                              " could not be found."),
                                               from_utf8(filename.absFilename())));
                        return failure;
                }
@@ -808,7 +808,7 @@ Buffer::ReadStatus Buffer::readFile(Lexer & lex, FileName const & filename,
                        Alert::error(_("Conversion script failed"),
                                     bformat(_("%1$s is from a different version"
                                              " of LyX, but the lyx2lyx script"
-                                                           " failed to convert it."),
+                                             " failed to convert it."),
                                              from_utf8(filename.absFilename())));
                        return failure;
                } else {
@@ -1368,10 +1368,10 @@ void Buffer::getLabelList(vector<docstring> & list) const
 }
 
 
-void Buffer::updateBibfilesCache() const
+void Buffer::updateBibfilesCache(UpdateScope scope) const
 {
        // If this is a child document, use the parent's cache instead.
-       if (d->parent_buffer) {
+       if (d->parent_buffer && scope != UpdateChildOnly) {
                d->parent_buffer->updateBibfilesCache();
                return;
        }
@@ -1390,7 +1390,7 @@ void Buffer::updateBibfilesCache() const
                                static_cast<InsetInclude &>(*it);
                        inset.updateBibfilesCache();
                        support::FileNameList const & bibfiles =
-                                       inset.getBibfilesCache(*this);
+                                       inset.getBibfilesCache();
                        d->bibfilesCache_.insert(d->bibfilesCache_.end(),
                                bibfiles.begin(),
                                bibfiles.end());
@@ -1407,15 +1407,15 @@ void Buffer::invalidateBibinfoCache()
 }
 
 
-support::FileNameList const & Buffer::getBibfilesCache() const
+support::FileNameList const & Buffer::getBibfilesCache(UpdateScope scope) const
 {
        // If this is a child document, use the parent's cache instead.
-       if (d->parent_buffer)
+       if (d->parent_buffer && scope != UpdateChildOnly)
                return d->parent_buffer->getBibfilesCache();
 
        // We update the cache when first used instead of at loading time.
        if (d->bibfilesCache_.empty())
-               const_cast<Buffer *>(this)->updateBibfilesCache();
+               const_cast<Buffer *>(this)->updateBibfilesCache(scope);
 
        return d->bibfilesCache_;
 }
@@ -1765,6 +1765,25 @@ DocIterator Buffer::firstChildPosition(Buffer const * child)
 }
 
 
+std::vector<Buffer *> Buffer::getChildren() const
+{
+       std::vector<Buffer *> clist;
+       // loop over children
+       Impl::BufferPositionMap::iterator it = d->children_positions.begin();
+       Impl::BufferPositionMap::iterator end = d->children_positions.end();
+       for (; it != end; ++it) {
+               Buffer * child = const_cast<Buffer *>(it->first);
+               clist.push_back(child);
+               // there might be grandchildren
+               std::vector<Buffer *> glist = child->getChildren();
+               for (vector<Buffer *>::const_iterator git = glist.begin();
+                    git != glist.end(); ++git)
+                       clist.push_back(*git);
+       }
+       return clist;
+}
+
+
 template<typename M>
 typename M::iterator greatest_below(M & m, typename M::key_type const & x)
 {
@@ -1929,8 +1948,7 @@ void Buffer::updateMacros(DocIterator & it, DocIterator & scope) const
                        // is it a nested text inset?
                        if (iit->inset->asInsetText()) {
                                // Inset needs its own scope?
-                               InsetText const * itext
-                               = iit->inset->asInsetText();
+                               InsetText const * itext = iit->inset->asInsetText();
                                bool newScope = itext->isMacroScope();
 
                                // scope which ends just behind the inset
@@ -1947,19 +1965,19 @@ void Buffer::updateMacros(DocIterator & it, DocIterator & scope) const
                        // is it an external file?
                        if (iit->inset->lyxCode() == INCLUDE_CODE) {
                                // get buffer of external file
-                               InsetInclude const & inset
-                                       static_cast<InsetInclude const &>(*iit->inset);
+                               InsetInclude const & inset =
+                                       static_cast<InsetInclude const &>(*iit->inset);
                                d->macro_lock = true;
-                               Buffer * child = inset.loadIfNeeded(*this);
+                               Buffer * child = inset.getChildBuffer();
                                d->macro_lock = false;
                                if (!child)
                                        continue;
 
                                // register its position, but only when it is
                                // included first in the buffer
-                               if (d->children_positions.find(child)
-                                       == d->children_positions.end())
-                                       d->children_positions[child] = it;
+                               if (d->children_positions.find(child) ==
+                                       d->children_positions.end())
+                                               d->children_positions[child] = it;
 
                                // register child with its scope
                                d->position_to_children[it] = Impl::ScopeBuffer(scope, child);
@@ -1970,8 +1988,8 @@ void Buffer::updateMacros(DocIterator & it, DocIterator & scope) const
                                continue;
 
                        // get macro data
-                       MathMacroTemplate & macroTemplate
-                       = static_cast<MathMacroTemplate &>(*iit->inset);
+                       MathMacroTemplate & macroTemplate =
+                               static_cast<MathMacroTemplate &>(*iit->inset);
                        MacroContext mc(*this, it);
                        macroTemplate.updateToContext(mc);
 
@@ -2710,7 +2728,13 @@ void Buffer::bufferErrors(TeXErrors const & terr, ErrorList & errorList) const
 }
 
 
-void Buffer::updateLabels(bool childonly) const
+void Buffer::setBuffersForInsets() const
+{
+       inset().setBuffer(const_cast<Buffer &>(*this)); 
+}
+
+
+void Buffer::updateLabels(UpdateScope scope) const
 {
        // Use the master text class also for child documents
        Buffer const * const master = masterBuffer();
@@ -2720,11 +2744,11 @@ void Buffer::updateLabels(bool childonly) const
        // master comes back we can see which of them were actually seen (i.e.
        // via an InsetInclude). The remaining ones in the set need still be updated.
        static std::set<Buffer const *> bufToUpdate;
-       if (!childonly) {
+       if (scope == UpdateMaster) {
                // If this is a child document start with the master
                if (master != this) {
                        bufToUpdate.insert(this);
-                       master->updateLabels(false);
+                       master->updateLabels();
                        // Do this here in case the master has no gui associated with it. Then, 
                        // the TocModel is not updated and TocModel::toc_ is invalid (bug 5699).
                        if (!master->gui_)
@@ -2744,7 +2768,6 @@ void Buffer::updateLabels(bool childonly) const
 
        // update all caches
        clearReferenceCache();
-       inset().setBuffer(const_cast<Buffer &>(*this));
        updateMacros();
 
        Buffer & cbuf = const_cast<Buffer &>(*this);
@@ -2760,7 +2783,7 @@ void Buffer::updateLabels(bool childonly) const
                return;
 
        cbuf.tocBackend().update();
-       if (!childonly)
+       if (scope == UpdateMaster)
                cbuf.structureChanged();
 }