]> git.lyx.org Git - lyx.git/blobdiff - src/BufferView_pimpl.C
make boundary property an iterator property instead of a CursorSlice property
[lyx.git] / src / BufferView_pimpl.C
index f0ea8745c5d53947088e3ea7e029a9dd6ae2b70e..1c52d6e331492a1cd2398a980ab57fe763a184ee 100644 (file)
@@ -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 <class T>
 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<InsetBibtex>(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<InsetBibtex>(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);
 }