X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FBufferView_pimpl.C;h=1c52d6e331492a1cd2398a980ab57fe763a184ee;hb=41ecabf5197a74719dd125e974b062184208c96b;hp=f0ea8745c5d53947088e3ea7e029a9dd6ae2b70e;hpb=14d9845a294f9e41338690ec4fdf97eaabdf2811;p=lyx.git diff --git a/src/BufferView_pimpl.C b/src/BufferView_pimpl.C index f0ea8745c5..1c52d6e331 100644 --- a/src/BufferView_pimpl.C +++ b/src/BufferView_pimpl.C @@ -51,6 +51,7 @@ #include "undo.h" #include "vspace.h" +#include "insets/insetbibtex.h" #include "insets/insetref.h" #include "insets/insettext.h" @@ -122,7 +123,7 @@ boost::signals::connection selectioncon; boost::signals::connection lostcon; -/// Get next inset of this class from current cursor position +/// Return an inset of this class if it exists at the current cursor position template T * getInsetByCode(LCursor & cur, InsetBase::Code code) { @@ -475,7 +476,7 @@ void BufferView::Pimpl::scrollDocView(int value) cur.clearSelection(); break; case bv_funcs::CUR_INSIDE: - int const y = bv_funcs::getPos(cur).y_; + int const y = bv_funcs::getPos(cur, cur.boundary()).y_; int const newy = min(last, max(y, first)); if (y != newy) { cur.reset(buffer_->inset()); @@ -595,7 +596,7 @@ bool BufferView::Pimpl::fitCursor() LyXFont const font = cursor_.getFont(); int const asc = font_metrics::maxAscent(font); int const des = font_metrics::maxDescent(font); - Point p = bv_funcs::getPos(cursor_); + Point const p = bv_funcs::getPos(cursor_, cursor_.boundary()); if (p.y_ - asc >= 0 && p.y_ + des < workarea().workHeight()) return false; } @@ -606,11 +607,12 @@ bool BufferView::Pimpl::fitCursor() void BufferView::Pimpl::update(Update::flags flags) { - lyxerr << BOOST_CURRENT_FUNCTION - << "[fitcursor = " << (flags & Update::FitCursor) - << ", forceupdate = " << (flags & Update::Force) - << ", singlepar = " << (flags & Update::SinglePar) - << "] buffer: " << buffer_ << endl; + lyxerr[Debug::DEBUG] + << BOOST_CURRENT_FUNCTION + << "[fitcursor = " << (flags & Update::FitCursor) + << ", forceupdate = " << (flags & Update::Force) + << ", singlepar = " << (flags & Update::SinglePar) + << "] buffer: " << buffer_ << endl; // Check needed to survive LyX startup if (buffer_) { @@ -619,9 +621,9 @@ void BufferView::Pimpl::update(Update::flags flags) CoordCache backup; std::swap(theCoords, backup); - + // This, together with doneUpdating(), verifies (using - // asserts) that screen redraw is not called from + // asserts) that screen redraw is not called from // within itself. theCoords.startUpdating(); @@ -764,8 +766,8 @@ void BufferView::Pimpl::center() bot.text()->redoParagraph(pit); Paragraph const & par = bot.text()->paragraphs()[pit]; anchor_ref_ = pit; - offset_ref_ = bv_funcs::coordOffset(cursor_).y_ + par.ascent() - - workarea().workHeight() / 2; + offset_ref_ = bv_funcs::coordOffset(cursor_, cursor_.boundary()).y_ + + par.ascent() - workarea().workHeight() / 2; } @@ -873,8 +875,7 @@ void BufferView::Pimpl::trackChanges() bool BufferView::Pimpl::workAreaDispatch(FuncRequest const & cmd0) { - lyxerr << BOOST_CURRENT_FUNCTION - << "[ cmd0 " << cmd0 << "]" << endl; + //lyxerr << BOOST_CURRENT_FUNCTION << "[ cmd0 " << cmd0 << "]" << endl; // This is only called for mouse related events including // LFUN_FILE_OPEN generated by drag-and-drop. @@ -908,10 +909,10 @@ bool BufferView::Pimpl::workAreaDispatch(FuncRequest const & cmd0) // Build temporary cursor. cmd.y = min(max(cmd.y,-1), workarea().workHeight()); InsetBase * inset = bv_->text()->editXY(cur, cmd.x, cmd.y); - lyxerr << BOOST_CURRENT_FUNCTION - << " * hit inset at tip: " << inset << endl; - lyxerr << BOOST_CURRENT_FUNCTION - << " * created temp cursor:" << cur << endl; + //lyxerr << BOOST_CURRENT_FUNCTION + // << " * hit inset at tip: " << inset << endl; + //lyxerr << BOOST_CURRENT_FUNCTION + // << " * created temp cursor:" << cur << endl; // Put anchor at the same position. cur.resetAnchor(); @@ -982,6 +983,8 @@ FuncStatus BufferView::Pimpl::getStatus(FuncRequest const & cmd) case LFUN_MARK_ON: case LFUN_SETMARK: case LFUN_CENTER: + case LFUN_BIBDB_ADD: + case LFUN_BIBDB_DEL: case LFUN_WORDS_COUNT: flag.enabled(true); break; @@ -1213,6 +1216,26 @@ bool BufferView::Pimpl::dispatch(FuncRequest const & cmd) center(); break; + case LFUN_BIBDB_ADD: { + LCursor tmpcur = cursor_; + bv_funcs::findInset(tmpcur, InsetBase::BIBTEX_CODE, false); + InsetBibtex * inset = getInsetByCode(tmpcur, + InsetBase::BIBTEX_CODE); + if (inset) + inset->addDatabase(cmd.argument); + break; + } + + case LFUN_BIBDB_DEL: { + LCursor tmpcur = cursor_; + bv_funcs::findInset(tmpcur, InsetBase::BIBTEX_CODE, false); + InsetBibtex * inset = getInsetByCode(tmpcur, + InsetBase::BIBTEX_CODE); + if (inset) + inset->delDatabase(cmd.argument); + break; + } + case LFUN_WORDS_COUNT: { DocIterator from, to; if (cur.selection()) { @@ -1266,11 +1289,12 @@ ViewMetricsInfo BufferView::Pimpl::metrics(bool singlepar) int pit2 = pit; size_t const npit = text->paragraphs().size(); - lyxerr << BOOST_CURRENT_FUNCTION - << " npit: " << npit - << " pit1: " << pit1 - << " pit2: " << pit2 - << endl; + lyxerr[Debug::DEBUG] + << BOOST_CURRENT_FUNCTION + << " npit: " << npit + << " pit1: " << pit1 + << " pit2: " << pit2 + << endl; // Rebreak anchor par text->redoParagraph(pit); @@ -1320,10 +1344,11 @@ ViewMetricsInfo BufferView::Pimpl::metrics(bool singlepar) y += text->getPar(pit).descent(); } - lyxerr << BOOST_CURRENT_FUNCTION - << " y1: " << y1 - << " y2: " << y2 - << endl; + lyxerr[Debug::DEBUG] + << BOOST_CURRENT_FUNCTION + << " y1: " << y1 + << " y2: " << y2 + << endl; return ViewMetricsInfo(pit1, pit2, y1, y2, singlepar); }