X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView.C;h=2be15d5e9009e3e493bc6c649a330df6f615f08f;hb=37e82a546392d43f787826b85481a11f2a27af15;hp=53defc5c60f1d3b99155cea30d68296f442f7e72;hpb=87a0c7598fbf04a9e55782632c1560a8d1f8afa2;p=lyx.git diff --git a/src/BufferView.C b/src/BufferView.C index 53defc5c60..2be15d5e90 100644 --- a/src/BufferView.C +++ b/src/BufferView.C @@ -20,17 +20,20 @@ #include "bufferlist.h" #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 "iterators.h" +#include "insetiterator.h" #include "language.h" #include "lyxlayout.h" #include "lyxtext.h" #include "lyxtextclass.h" #include "paragraph.h" #include "paragraph_funcs.h" -#include "PosIterator.h" +#include "pariterator.h" #include "texrow.h" #include "undo.h" #include "WordLangTuple.h" @@ -45,11 +48,9 @@ #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; using std::distance; using std::find; @@ -61,9 +62,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)) {} @@ -142,9 +142,9 @@ bool BufferView::fitCursor() } -void BufferView::update() +void BufferView::update(bool fitcursor, bool forceupdate) { - pimpl_->update(); + pimpl_->update(fitcursor, forceupdate); } @@ -160,12 +160,6 @@ void BufferView::scrollDocView(int value) } -void BufferView::redoCurrentBuffer() -{ - pimpl_->redoCurrentBuffer(); -} - - bool BufferView::available() const { return pimpl_->available(); @@ -214,18 +208,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(); @@ -238,40 +220,21 @@ 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()); - LyXText * text = cursor().text(); - bool res = buffer()->readFile(fname, text->getPar(cursor().par())); - resize(); - return res; + pimpl_->scroll(lines); } @@ -302,23 +265,18 @@ void BufferView::setCursorFromRow(int row) if (tmpid == -1) text()->setCursor(cursor(), 0, 0); else - text()->setCursor(cursor(), - text()->parOffset(buffer()->getParFromID(tmpid).pit()), - tmppos); + text()->setCursor(cursor(), buffer()->getParFromID(tmpid).pit(), tmppos); } void BufferView::gotoLabel(string const & label) { - for (Buffer::inset_iterator it = buffer()->inset_iterator_begin(); - it != buffer()->inset_iterator_end(); ++it) { + for (InsetIterator it = inset_iterator_begin(buffer()->inset()); it; ++it) { vector labels; it->getLabelList(*buffer(), labels); if (find(labels.begin(),labels.end(),label) != labels.end()) { cursor().clearSelection(); - text()->setCursor(cursor(), - distance(text()->paragraphs().begin(), it.getPar()), - it.getPos()); + text()->setCursor(cursor(), it.pit(), it.pos()); cursor().resetAnchor(); update(); return; @@ -341,14 +299,6 @@ LyXText * BufferView::getLyXText() const } -Language const * BufferView::getParentLanguage(InsetOld * inset) const -{ - Paragraph const & par = ownerPar(*buffer(), inset); - return par.getFontSettings(buffer()->params(), - par.getPositionOfInset(inset)).language(); -} - - void BufferView::haveSelection(bool sel) { pimpl_->workarea().haveSelection(sel); @@ -369,65 +319,30 @@ LyXText * BufferView::text() const void BufferView::setCursor(ParIterator const & par, lyx::pos_type pos) { - LCursor & cur = cursor(); - cur.reset(buffer()->inset()); - ParIterator::PosHolder const & positions = par.positions(); - int const last = par.size() - 1; - for (int i = 0; i < last; ++i) - (*positions[i].it)->inset->edit(cur, true); - cur.resetAnchor(); - LyXText & text = *par.text(*buffer()); - text.setCursor(cur, text.parOffset(par.pit()), pos); -} - - -/* -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: + for (int i = 0, n = par.size(); i < n; ++i) + par[i].inset().edit(cursor(), true); -- setting top_y to the y of the outerPar (that has good info) -- calling update -- calling cursor().updatePos() -- then call fitCursor() + cursor().setCursor(makeDocIterator(par, pos)); + cursor().selection() = false; +} -Ab. -*/ -void BufferView::putSelectionAt(PosIterator const & cur, - int length, bool backwards) +void BufferView::putSelectionAt(DocIterator const & cur, + int length, bool backwards) { ParIterator par(cur); cursor().clearSelection(); - LyXText * text = par.text(*buffer()); setCursor(par, cur.pos()); - - // hack for the chicken and egg problem - if (par.inset()) - top_y(par.outerPar()->y); - update(); - text->setCursor(cursor(), text->parOffset(cur.pit()), cur.pos()); - cursor().updatePos(); if (length) { - text->setSelectionRange(cursor(), length); - cursor().setSelection(); if (backwards) { -#if 0 - swap(cursor().cursor_, cursor().anchor_); -#else - DocumentIterator it = cursor(); - cursor().setCursor(cursor().anchor_, false); - cursor().anchor_ = it; -#endif - } + cursor().pos() += length; + cursor().setSelection(cursor(), -length); + } else + cursor().setSelection(cursor(), length); } - - fitCursor(); - update(); } @@ -441,3 +356,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_; +}