]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView.cpp
Fix wrongly copy-pasted entries in SpellcheckerUi.ui
[lyx.git] / src / BufferView.cpp
index 4ae3c5616eef86ed00594527cd372bbdafd0cad1..fc7c7bb80828f9a977d39c12ef906120a7c6a56c 100644 (file)
@@ -269,7 +269,7 @@ struct BufferView::Private
        /** kept to send setMouseHover(false).
          * Not owned, so don't delete.
          */
-       Inset * last_inset_;
+       Inset const * last_inset_;
        /// are we hovering something that we can click
        bool clickable_inset_;
 
@@ -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();
 }
 
 
@@ -1126,7 +1125,7 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
                if (cur.inset().lyxCode() == CAPTION_CODE)
                        return cur.inset().getStatus(cur, cmd, flag);
                // FIXME we should consider passthru paragraphs too.
-               flag.setEnabled(!cur.inset().getLayout().isPassThru());
+               flag.setEnabled(!(cur.inTexted() && cur.paragraph().isPassThru()));
                break;
 
        case LFUN_CITATION_INSERT: {
@@ -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;
        }
 
@@ -1746,7 +1751,7 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
                        Inset * ins = cur.nextInset();
                        if (!ins)
                                break;
-                       docstring insname = ins->name();
+                       docstring insname = ins->layoutName();
                        while (!insname.empty()) {
                                if (insname == name || name == from_utf8("*")) {
                                        cur.recordUndo();
@@ -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;
 }
 
 
@@ -1985,14 +1991,12 @@ void BufferView::updateHoveredInset() const
                d->last_inset_ = 0;
        }
        
-       // const_cast because of setMouseHover().
-       Inset * inset = const_cast<Inset *>(covering_inset);
-       if (inset && inset->setMouseHover(this, true)) {
+       if (covering_inset && covering_inset->setMouseHover(this, true)) {
                need_redraw = true;
                // Only the insets that accept the hover state, do 
                // clear the last_inset_, so only set the last_inset_
                // member if the hovered setting is accepted.
-               d->last_inset_ = inset;
+               d->last_inset_ = covering_inset;
        }
 
        if (need_redraw) {
@@ -2239,6 +2243,7 @@ TextMetrics const & BufferView::textMetrics(Text const * t) const
 
 TextMetrics & BufferView::textMetrics(Text const * t)
 {
+       LASSERT(t, /**/);
        TextMetricsCache::iterator tmc_it  = d->text_metrics_.find(t);
        if (tmc_it == d->text_metrics_.end()) {
                tmc_it = d->text_metrics_.insert(
@@ -2358,6 +2363,42 @@ void BufferView::putSelectionAt(DocIterator const & cur,
 }
 
 
+bool BufferView::selectIfEmpty(DocIterator & cur)
+{
+       if (!cur.paragraph().empty())
+               return false;
+
+       pit_type const beg_pit = cur.pit();
+       if (beg_pit > 0) {
+               // The paragraph associated to this item isn't
+               // the first one, so it can be selected
+               cur.backwardPos();
+       } else {
+               // We have to resort to select the space between the
+               // end of this item and the begin of the next one
+               cur.forwardPos();
+       }
+       if (cur.empty()) {
+               // If it is the only item in the document,
+               // nothing can be selected
+               return false;
+       }
+       pit_type const end_pit = cur.pit();
+       pos_type const end_pos = cur.pos();
+       d->cursor_.clearSelection();
+       d->cursor_.reset();
+       d->cursor_.setCursor(cur);
+       d->cursor_.pit() = beg_pit;
+       d->cursor_.pos() = 0;
+       d->cursor_.setSelection(false);
+       d->cursor_.resetAnchor();
+       d->cursor_.pit() = end_pit;
+       d->cursor_.pos() = end_pos;
+       d->cursor_.setSelection();
+       return true;
+}
+
+
 Cursor & BufferView::cursor()
 {
        return d->cursor_;
@@ -2512,8 +2553,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");
@@ -2854,6 +2895,12 @@ DocIterator const & BufferView::inlineCompletionPos() const
 }
 
 
+void BufferView::resetInlineCompletionPos()
+{
+       d->inlineCompletionPos_ = DocIterator();
+}
+
+
 bool samePar(DocIterator const & a, DocIterator const & b)
 {
        if (a.empty() && b.empty())