X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView.C;h=75544d062319dc9cb6f3d831b609f71f90ae4f23;hb=61133c4b5625993f600ffa7d209c3e2bc28d26f6;hp=0215990ca49c986dc7b1b6c885d6f51954123ed9;hpb=3d1fe03e56b436f98d166420112c1de2a93dac41;p=lyx.git diff --git a/src/BufferView.C b/src/BufferView.C index 0215990ca4..75544d0623 100644 --- a/src/BufferView.C +++ b/src/BufferView.C @@ -21,8 +21,10 @@ #include "bufferparams.h" #include "BufferView_pimpl.h" #include "CutAndPaste.h" +#include "coordcache.h" #include "debug.h" #include "funcrequest.h" +#include "FuncStatus.h" #include "gettext.h" #include "insetiterator.h" #include "language.h" @@ -43,14 +45,9 @@ #include "frontends/WorkArea.h" #include "insets/insetcommand.h" // ChangeRefs -#include "insets/updatableinset.h" #include "insets/insettext.h" -#include "support/filetools.h" -#include "support/lyxalgo.h" // lyx_count - using lyx::support::bformat; -using lyx::support::MakeAbsPath; using lyx::cap::setSelectionRange; @@ -64,9 +61,8 @@ using std::vector; extern BufferList bufferlist; -BufferView::BufferView(LyXView * owner, int xpos, int ypos, - int width, int height) - : pimpl_(new Pimpl(*this, owner, xpos, ypos, width, height)) +BufferView::BufferView(LyXView * owner, int width, int height) + : pimpl_(new Pimpl(*this, owner, width, height)) {} @@ -145,9 +141,9 @@ bool BufferView::fitCursor() } -void BufferView::update() +void BufferView::update(Update::flags flags) { - pimpl_->update(); + pimpl_->update(flags); } @@ -163,12 +159,6 @@ void BufferView::scrollDocView(int value) } -void BufferView::redoCurrentBuffer() -{ - pimpl_->redoCurrentBuffer(); -} - - bool BufferView::available() const { return pimpl_->available(); @@ -217,18 +207,6 @@ void BufferView::center() } -int BufferView::top_y() const -{ - return pimpl_->top_y(); -} - - -void BufferView::top_y(int y) -{ - pimpl_->top_y(y); -} - - string const BufferView::getClipboard() const { return pimpl_->workarea().getClipboard(); @@ -241,46 +219,28 @@ void BufferView::stuffClipboard(string const & stuff) const } -bool BufferView::dispatch(FuncRequest const & ev) +FuncStatus BufferView::getStatus(FuncRequest const & cmd) { - return pimpl_->dispatch(ev); + return pimpl_->getStatus(cmd); } -void BufferView::scroll(int lines) +bool BufferView::dispatch(FuncRequest const & ev) { - pimpl_->scroll(lines); + return pimpl_->dispatch(ev); } -// Inserts a file into current document -bool BufferView::insertLyXFile(string const & filen) - // - // Copyright CHT Software Service GmbH - // Uwe C. Schroeder - // - // Insert a LyXformat - file into current buffer - // - // Moved from lyx_cb.C (Lgb) +void BufferView::scroll(int lines) { - BOOST_ASSERT(!filen.empty()); - - string const fname = MakeAbsPath(filen); - - cursor().clearSelection(); - text()->breakParagraph(cursor()); - - BOOST_ASSERT(cursor().inTexted()); - bool res = buffer()->readFile(fname, cursor().par()); - resize(); - return res; + pimpl_->scroll(lines); } void BufferView::showErrorList(string const & action) const { if (getErrorList().size()) { - string const title = bformat(_("LyX: %1$s errors (%2$s)"), + string const title = bformat(_("%1$s Errors (%2$s)"), action, buffer()->fileName()); owner()->getDialogs().show("errorlist", title); pimpl_->errorlist_.clear(); @@ -304,8 +264,7 @@ void BufferView::setCursorFromRow(int row) if (tmpid == -1) text()->setCursor(cursor(), 0, 0); else - text()->setCursor(cursor(), buffer()->getParFromID(tmpid).pit(), - tmppos); + text()->setCursor(cursor(), buffer()->getParFromID(tmpid).pit(), tmppos); } @@ -315,9 +274,7 @@ void BufferView::gotoLabel(string const & label) vector labels; it->getLabelList(*buffer(), labels); if (find(labels.begin(),labels.end(),label) != labels.end()) { - cursor().clearSelection(); - text()->setCursor(cursor(), it.par(), it.pos()); - cursor().resetAnchor(); + setCursor(it); update(); return; } @@ -330,8 +287,7 @@ void BufferView::hideCursor() screen().hideCursor(); } - -LyXText * BufferView::getLyXText() const +LyXText * BufferView::getLyXText() { LyXText * text = cursor().innerText(); BOOST_ASSERT(text); @@ -339,11 +295,11 @@ LyXText * BufferView::getLyXText() const } -Language const * BufferView::getParentLanguage(InsetOld * inset) const +LyXText const * BufferView::getLyXText() const { - Paragraph const & par = ownerPar(*buffer(), inset); - return par.getFontSettings(buffer()->params(), - par.getPositionOfInset(inset)).language(); + LyXText const * text = cursor().innerText(); + BOOST_ASSERT(text); + return text; } @@ -365,59 +321,51 @@ LyXText * BufferView::text() const } -void BufferView::setCursor(ParIterator const & par, lyx::pos_type pos) +void BufferView::setCursor(DocIterator const & dit) { - int const last = par.size(); - for (int i = 0; i < last; ++i) - par[i].inset().edit(cursor(), true); + size_t const n = dit.depth(); + for (size_t i = 0; i < n; ++i) + dit[i].inset().edit(cursor(), true); - cursor().setCursor(makeDocumentIterator(par, pos), false); + cursor().setCursor(dit); + cursor().selection() = false; } -/* -if the fitCursor call refers to some point in never-explored-land, then we -don't have y information in insets there, then we cannot even do an update -to get it (because we need the y infomation for setting top_y first). So -this is solved in putSelectionAt with: +void BufferView::mouseSetCursor(LCursor & cur) +{ + BOOST_ASSERT(&cur.bv() == this); -- setting top_y to the y of the outerPar (that has good info) -- calling update -- calling cursor().updatePos() -- then call fitCursor() + // Has the cursor just left the inset? + if (&cursor().inset() != &cur.inset()) + cursor().inset().notifyCursorLeaves(cursor()); + + // do the dEPM magic if needed + if (cursor().inTexted()) + cursor().text()->deleteEmptyParagraphMechanism(cur, cursor()); + + cursor() = cur; + cursor().clearSelection(); + cursor().setTargetX(); + finishUndo(); + +} -Ab. -*/ -void BufferView::putSelectionAt(DocumentIterator const & cur, +void BufferView::putSelectionAt(DocIterator const & cur, int length, bool backwards) { - ParIterator par(cur); - cursor().clearSelection(); - LyXText & text = *cur[0].text(); - setCursor(par, cur.pos()); - - // hack for the chicken and egg problem - top_y(text.getPar(par.outerPar()).y); - - update(); - //text.setCursor(cursor(), cur.par(), cur.pos()); - cursor().updatePos(); + setCursor(cur); if (length) { if (backwards) { + cursor().pos() += length; cursor().setSelection(cursor(), -length); - DocumentIterator const it = cursor(); - cursor().setCursor(cursor().anchor_, true); - cursor().anchor_ = it; } else cursor().setSelection(cursor(), length); } - - fitCursor(); - update(); } @@ -431,3 +379,15 @@ LCursor const & BufferView::cursor() const { return pimpl_->cursor_; } + + +lyx::pit_type BufferView::anchor_ref() const +{ + return pimpl_->anchor_ref_; +} + + +int BufferView::offset_ref() const +{ + return pimpl_->offset_ref_; +}