void SpellcheckerWidget::Private::hide() const { BufferView * bv = gv_->documentBufferView(); Cursor & bvcur = bv->cursor(); dv_->hide(); if (isCurrentBuffer(bvcur)) { if (!begin_.empty() && !end_.empty()) { // restore previous selection setSelection(begin_, end_); } else { // restore cursor position bvcur.setCursor(start_); bvcur.clearSelection(); bv->processUpdateFlags(Update::Force | Update::FitCursor); } } }
bool GuiErrorList::goTo(int item) { if (&buffer() != buf_) { if (!theBufferList().isLoaded(buf_)) return false; FuncRequest fr(LFUN_BUFFER_SWITCH, buf_->absFileName()); dispatch(fr); } ErrorItem const & err = errorList()[item]; if (err.par_id == -1) return false; if (from_master_) // FIXME: implement return false; DocIterator dit = buf_->getParFromID(err.par_id); if (dit == doc_iterator_end(buf_)) { // FIXME: Happens when loading a read-only doc with // unknown layout. Should this be the case? LYXERR0("par id " << err.par_id << " not found"); return false; } // Now make the selection. // if pos_end is 0, this means it is end-of-paragraph pos_type const s = dit.paragraph().size(); pos_type const end = err.pos_end ? min(err.pos_end, s) : s; pos_type const start = min(err.pos_start, end); pos_type const range = end - start; dit.pos() = start; BufferView * bv = const_cast<BufferView *>(bufferview()); // FIXME: If we used an LFUN, we would not need this line: bv->putSelectionAt(dit, range, false); bv->processUpdateFlags(Update::Force | Update::FitCursor); return true; }
void SpellcheckerWidget::Private::setSelection( DocIterator const & from, DocIterator const & to) const { BufferView * bv = gv_->documentBufferView(); DocIterator end = to; if (from.pit() != end.pit()) { // there are multiple paragraphs in selection Cursor & bvcur = bv->cursor(); bvcur.setCursor(from); bvcur.clearSelection(); bvcur.setSelection(true); bvcur.setCursor(end); bvcur.setSelection(true); } else { // FIXME LFUN // If we used a LFUN, dispatch would do all of this for us int const size = end.pos() - from.pos(); bv->putSelectionAt(from, size, false); } bv->processUpdateFlags(Update::Force | Update::FitCursor); }