]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
partial fix for bug 6986: Use the right tex2lyx (at least if tex2lyx is installed)
[lyx.git] / src / BufferView.cpp
index 4c57dfd479683af405ca5c8d00ae274a0289c758..b8971fc98e02d0e1c3f7d4c5dba44e03d4cf3398 100644 (file)
@@ -107,10 +107,7 @@ T * getInsetByCode(Cursor const & cur, InsetCode code)
        return 0;
 }
 
-
-bool findInset(DocIterator & dit, vector<InsetCode> const & codes,
-       bool same_content);
-
+/// Note that comparing contents can only be used for InsetCommand
 bool findNextInset(DocIterator & dit, vector<InsetCode> const & codes,
        docstring const & contents)
 {
@@ -118,15 +115,17 @@ bool findNextInset(DocIterator & dit, vector<InsetCode> const & codes,
 
        while (tmpdit) {
                Inset const * inset = tmpdit.nextInset();
-               if (inset
-                   && std::find(codes.begin(), codes.end(), inset->lyxCode()) != codes.end()
-                   && (contents.empty() ||
-                       //FIXME: This static_cast seems very dangerous. Does this
-                       // mean that if contents is not empty, we must only be
-                       // looking for InsetCommand's ??
-                   static_cast<InsetCommand const *>(inset)->getFirstNonOptParam() == contents)) {
-                       dit = tmpdit;
-                       return true;
+               if (inset) {
+                       bool const valid_code = std::find(codes.begin(), codes.end(), 
+                               inset->lyxCode()) != codes.end();
+                       InsetCommand const * ic = inset->asInsetCommand();
+                       bool const same_or_no_contents =  contents.empty()
+                               || (ic && (ic->getFirstNonOptParam() == contents));
+                       
+                       if (valid_code && same_or_no_contents) {
+                               dit = tmpdit;
+                               return true;
+                       }
                }
                tmpdit.forwardInset();
        }
@@ -136,6 +135,7 @@ bool findNextInset(DocIterator & dit, vector<InsetCode> const & codes,
 
 
 /// Looks for next inset with one of the given codes.
+/// Note that same_content can only be used for InsetCommand
 bool findInset(DocIterator & dit, vector<InsetCode> const & codes,
        bool same_content)
 {
@@ -145,14 +145,14 @@ bool findInset(DocIterator & dit, vector<InsetCode> const & codes,
        if (!tmpdit)
                return false;
 
-       if (same_content) {
-               Inset const * inset = tmpdit.nextInset();
-               if (inset
-                   && std::find(codes.begin(), codes.end(), inset->lyxCode()) != codes.end()) {
-                       //FIXME: This static_cast seems very dangerous. Does this
-                       // mean that if contents is not empty, we must only be
-                       // looking for InsetCommand's ??
-                       contents = static_cast<InsetCommand const *>(inset)->getFirstNonOptParam();
+       Inset const * inset = tmpdit.nextInset();
+       if (same_content && inset) {
+               InsetCommand const * ic = inset->asInsetCommand();
+               if (ic) {
+                       bool const valid_code = std::find(codes.begin(), codes.end(),
+                               ic->lyxCode()) != codes.end();
+                       if (valid_code)
+                               contents = ic->getFirstNonOptParam();
                }
        }
 
@@ -308,8 +308,7 @@ BufferView::BufferView(Buffer & buf)
        d->cursor_.resetAnchor();
        d->cursor_.setCurrentFont();
 
-       if (graphics::Previews::status() != LyXRC::PREVIEW_OFF)
-               thePreviews().generateBufferPreviews(buffer_);
+       buffer_.updatePreviews();
 }
 
 
@@ -1540,8 +1539,14 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                FindAndReplaceOptions opt;
                istringstream iss(to_utf8(cmd.argument()));
                iss >> opt;
-               if (findAdv(this, opt))
+               if (findAdv(this, opt)) {
                        dr.screenUpdate(Update::Force | Update::FitCursor);
+                       cur.dispatched();
+                       dispatched = true;
+               } else {
+                       cur.undispatched();
+                       dispatched = false;
+               }
                break;
        }
 
@@ -1846,7 +1851,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                icp["key"] = from_utf8(arg);
                if (!opt1.empty())
                        icp["before"] = from_utf8(opt1);
-               string icstr = InsetCommand::params2string("citation", icp);
+               string icstr = InsetCommand::params2string(icp);
                FuncRequest fr(LFUN_INSET_INSERT, icstr);
                lyx::dispatch(fr);
                break;
@@ -1874,13 +1879,14 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
        }
 
        default:
-               dispatched = false;
+               // OK, so try the Buffer itself...
+               buffer_.dispatch(cmd, dr);
+               dispatched = dr.dispatched();
                break;
        }
 
        buffer_.undo().endUndoGroup();
        dr.dispatched(dispatched);
-       return;
 }
 
 
@@ -2512,8 +2518,8 @@ void BufferView::insertLyXFile(FileName const & fname)
        message(bformat(_("Inserting document %1$s..."), disp_fn));
 
        docstring res;
-       Buffer buf("", false);
-       if (buf.loadLyXFile(filename) == Buffer::ReadSuccess) {
+       Buffer buf(filename.absFileName(), false);
+       if (buf.loadLyXFile() == Buffer::ReadSuccess) {
                ErrorList & el = buffer_.errorList("Parse");
                // Copy the inserted document error list into the current buffer one.
                el = buf.errorList("Parse");
@@ -2528,7 +2534,6 @@ void BufferView::insertLyXFile(FileName const & fname)
        buffer_.changed(true);
        // emit message signal.
        message(bformat(res, disp_fn));
-       buffer_.errors("Parse");
 }
 
 
@@ -2855,6 +2860,12 @@ DocIterator const & BufferView::inlineCompletionPos() const
 }
 
 
+bool BufferView::fixInlineCompletionPos()
+{
+       return d->inlineCompletionPos_.fixIfBroken();
+}
+
+
 bool samePar(DocIterator const & a, DocIterator const & b)
 {
        if (a.empty() && b.empty())