]> git.lyx.org Git - lyx.git/blobdiff - src/DocIterator.cpp
Update the GuiLabel view when the document is read-only. Also disable the text field.
[lyx.git] / src / DocIterator.cpp
index aacbd37fd8a028107b895e12b6c3d9375c695d3b..425c6d6d5edc737e0726657a5e71e55b275cf217 100644 (file)
 
 #include "DocIterator.h"
 
+#include "Buffer.h"
 #include "InsetList.h"
 #include "Paragraph.h"
+#include "LyXRC.h"
 #include "Text.h"
 
 #include "mathed/MathData.h"
 #include "insets/InsetTabular.h"
 
 #include "support/debug.h"
-
 #include "support/lassert.h"
+#include "support/lstrings.h"
 
 #include <ostream>
 
 using namespace std;
+using namespace lyx::support;
 
 namespace lyx {
 
 
+DocIterator::DocIterator()
+       : boundary_(false), inset_(0), buffer_(0)
+{}
+
 // We could be able to get rid of this if only every BufferView were
 // associated to a buffer on construction.
-DocIterator::DocIterator()
-       : boundary_(false), inset_(0)
+DocIterator::DocIterator(Buffer * buf)
+       : boundary_(false), inset_(0), buffer_(buf)
 {}
 
 
-DocIterator::DocIterator(Inset & inset)
-       : boundary_(false), inset_(&inset)
+DocIterator::DocIterator(Buffer * buf, Inset * inset)
+       : boundary_(false), inset_(inset), buffer_(buf)
 {}
 
 
-DocIterator doc_iterator_begin(Inset & inset)
+DocIterator doc_iterator_begin(const Buffer * buf0, const Inset * inset0)
 {
-       DocIterator dit(inset);
+       Buffer * buf = const_cast<Buffer *>(buf0);      
+       Inset * inset = const_cast<Inset *>(inset0);
+       DocIterator dit(buf, inset ? inset : &buf->inset());
        dit.forwardPos();
        return dit;
 }
 
 
-DocIterator doc_iterator_end(Inset & inset)
+DocIterator doc_iterator_end(const Buffer * buf0, const Inset * inset0)
 {
-       return DocIterator(inset);
+       Buffer * buf = const_cast<Buffer *>(buf0);      
+       Inset * inset = const_cast<Inset *>(inset0);
+       return DocIterator(buf, inset ? inset : &buf->inset());
 }
 
 
@@ -77,11 +88,12 @@ LyXErr & operator<<(LyXErr & os, DocIterator const & it)
 
 Inset * DocIterator::nextInset() const
 {
-       LASSERT(!empty(), /**/);
+       LASSERT(!empty(), return 0);
        if (pos() == lastpos())
                return 0;
        if (pos() > lastpos()) {
-               LYXERR0("Should not happen, but it does. ");
+               LYXERR0("Should not happen, but it does: pos() = "
+                       << pos() << ", lastpos() = " << lastpos());
                return 0;
        }
        if (inMathed())
@@ -92,14 +104,14 @@ Inset * DocIterator::nextInset() const
 
 Inset * DocIterator::prevInset() const
 {
-       LASSERT(!empty(), /**/);
+       LASSERT(!empty(), return 0);
        if (pos() == 0)
                return 0;
        if (inMathed()) {
                if (cell().empty())
                        // FIXME: this should not happen but it does.
                        // See bug 3189
-                       // http://bugzilla.lyx.org/show_bug.cgi?id=3189
+                       // http://www.lyx.org/trac/ticket/3189
                        return 0;
                else
                        return prevAtom().nucleus();
@@ -238,12 +250,7 @@ MathData & DocIterator::cell() const
 Text * DocIterator::innerText() const
 {
        LASSERT(!empty(), /**/);
-       // go up until first non-0 text is hit
-       // (innermost text is 0 in mathed)
-       for (int i = depth() - 1; i >= 0; --i)
-               if (slices_[i].text())
-                       return slices_[i].text();
-       return 0;
+       return innerTextSlice().text();
 }
 
 
@@ -304,7 +311,7 @@ void DocIterator::forwardPosIgnoreCollapsed()
        // FIXME: the check for asInsetMath() shouldn't be necessary
        // but math insets do not return a sensible editable() state yet.
        if (nextinset && !nextinset->asInsetMath()
-           && nextinset->editable() != Inset::HIGHLY_EDITABLE) {
+           && !nextinset->editable()) {
                ++top().pos();
                return;
        }
@@ -556,11 +563,12 @@ StableDocIterator::StableDocIterator(DocIterator const & dit)
 }
 
 
-DocIterator StableDocIterator::asDocIterator(Inset * inset) const
+DocIterator StableDocIterator::asDocIterator(Buffer * buf) const
 {
        // this function re-creates the cache of inset pointers
        //lyxerr << "converting:\n" << *this << endl;
-       DocIterator dit = DocIterator(*inset);
+       Inset * inset = &buf->inset();
+       DocIterator dit = DocIterator(buf, inset);
        for (size_t i = 0, n = data_.size(); i != n; ++i) {
                if (inset == 0) {
                        // FIXME