]> git.lyx.org Git - lyx.git/blobdiff - src/Cursor.cpp
Embedding: saving inzip name to .lyx file so that embedded files can always be found...
[lyx.git] / src / Cursor.cpp
index aa051340d8e805ecd31709171d8d7913aa56646a..eb23d79533094ea87ecf8ad64ba81515eabe79dc 100644 (file)
 
 #include <boost/assert.hpp>
 #include <boost/bind.hpp>
-#include <boost/current_function.hpp>
 
 #include <sstream>
 #include <limits>
 #include <map>
 
-using std::string;
-using std::vector;
-using std::endl;
-using std::min;
-using std::for_each;
-
+using namespace std;
 
 namespace lyx {
 
@@ -85,7 +79,7 @@ bool positionable(DocIterator const & cursor, DocIterator const & anchor)
 // Used only in mathed
 DocIterator bruteFind2(Cursor const & c, int x, int y)
 {
-       double best_dist = std::numeric_limits<double>::max();
+       double best_dist = numeric_limits<double>::max();
 
        DocIterator result;
 
@@ -97,9 +91,9 @@ DocIterator bruteFind2(Cursor const & c, int x, int y)
                int xo;
                int yo;
                Inset const * inset = &it.inset();
-               std::map<Inset const *, Geometry> const & data =
+               map<Inset const *, Geometry> const & data =
                        c.bv().coordCache().getInsets().getData();
-               std::map<Inset const *, Geometry>::const_iterator I = data.find(inset);
+               map<Inset const *, Geometry>::const_iterator I = data.find(inset);
 
                // FIXME: in the case where the inset is not in the cache, this
                // means that no part of it is visible on screen. In this case
@@ -156,7 +150,7 @@ bool bruteFind(Cursor & cursor,
        else
                ++et.pit();
 
-       double best_dist = std::numeric_limits<double>::max();;
+       double best_dist = numeric_limits<double>::max();;
        DocIterator best_cursor = et;
 
        for ( ; it != et; it.forwardPos(true)) {
@@ -213,7 +207,7 @@ bool bruteFind3(Cursor & cur, int x, int y, bool up)
        it.pit() = from;
        DocIterator et = doc_iterator_end(inset);
 
-       double best_dist = std::numeric_limits<double>::max();
+       double best_dist = numeric_limits<double>::max();
        DocIterator best_cursor = et;
 
        for ( ; it != et; it.forwardPos()) {
@@ -293,8 +287,7 @@ void Cursor::setCursor(DocIterator const & cur)
 
 void Cursor::dispatch(FuncRequest const & cmd0)
 {
-       LYXERR(Debug::DEBUG, BOOST_CURRENT_FUNCTION
-                            << " cmd: " << cmd0 << '\n' << *this);
+       LYXERR(Debug::DEBUG, "cmd: " << cmd0 << '\n' << *this);
        if (empty())
                return;
 
@@ -303,7 +296,6 @@ void Cursor::dispatch(FuncRequest const & cmd0)
        Cursor safe = *this;
        
        // store some values to be used inside of the handlers
-       getPos(beforeDispX_, beforeDispY_);
        beforeDispatchCursor_ = *this;
        for (; depth(); pop()) {
                LYXERR(Debug::DEBUG, "Cursor::dispatch: cmd: "
@@ -427,7 +419,8 @@ void Cursor::getPos(int & x, int & y) const
 
 Row const & Cursor::textRow() const
 {
-       ParagraphMetrics const & pm = bv().parMetrics(text(), pit());
+       CursorSlice const & cs = innerTextSlice();
+       ParagraphMetrics const & pm = bv().parMetrics(cs.text(), cs.pit());
        BOOST_ASSERT(!pm.rows().empty());
        return pm.getRow(pos(), boundary());
 }
@@ -585,6 +578,8 @@ void Cursor::info(odocstream & os) const
 bool Cursor::selHandle(bool sel)
 {
        //lyxerr << "Cursor::selHandle" << endl;
+       if (mark())
+               sel = true;
        if (sel == selection())
                return false;
 
@@ -597,7 +592,7 @@ bool Cursor::selHandle(bool sel)
 }
 
 
-std::ostream & operator<<(std::ostream & os, Cursor const & cur)
+ostream & operator<<(ostream & os, Cursor const & cur)
 {
        os << "\n cursor:                                | anchor:\n";
        for (size_t i = 0, n = cur.depth(); i != n; ++i) {
@@ -650,7 +645,7 @@ namespace lyx {
 //#define FILEDEBUG 1
 
 
-bool Cursor::isInside(Inset const * p)
+bool Cursor::isInside(Inset const * p) const
 {
        for (size_t i = 0; i != depth(); ++i)
                if (&operator[](i).inset() == p)
@@ -1081,8 +1076,8 @@ bool Cursor::upDownInMath(bool up)
        int xo = 0;
        int yo = 0;
        getPos(xo, yo);
-       xo = beforeDispX_;
-
+       xo = theLyXFunc().cursorBeforeDispatchX();
+       
        // check if we had something else in mind, if not, this is the future
        // target
        if (x_target_ == -1)
@@ -1131,8 +1126,9 @@ bool Cursor::upDownInMath(bool up)
                                int x;
                                int y;
                                getPos(x, y);
-                               if ((!up && y <= beforeDispY_) ||
-                                               (up && y >= beforeDispY_))
+                               int oy = theLyXFunc().cursorBeforeDispatchY();
+                               if ((!up && y <= oy) ||
+                                               (up && y >= oy))
                                        operator=(old);
                                else
                                        return true;
@@ -1151,8 +1147,9 @@ bool Cursor::upDownInMath(bool up)
                                int x;
                                int y;
                                getPos(x, y);
-                               if ((!up && y <= beforeDispY_) ||
-                                               (up && y >= beforeDispY_))
+                               int oy = theLyXFunc().cursorBeforeDispatchY();
+                               if ((!up && y <= oy) ||
+                                               (up && y >= oy))
                                        operator=(old);
                                else
                                        return true;
@@ -1174,8 +1171,9 @@ bool Cursor::upDownInMath(bool up)
                //lyxerr << "updown: popBackward succeeded" << endl;
                int xnew;
                int ynew;
+               int yold = theLyXFunc().cursorBeforeDispatchY();
                getPos(xnew, ynew);
-               if (up ? ynew < beforeDispY_ : ynew > beforeDispY_)
+               if (up ? ynew < yold : ynew > yold)
                        return true;
        }
        
@@ -1193,8 +1191,8 @@ bool Cursor::upDownInText(bool up, bool & updateNeeded)
        int xo = 0;
        int yo = 0;
        getPos(xo, yo);
-       xo = beforeDispX_;
-       
+       xo = theLyXFunc().cursorBeforeDispatchX();
+
        // update the targetX - this is here before the "return false"
        // to set a new target which can be used by InsetTexts above
        // if we cannot move up/down inside this inset anymore
@@ -1276,18 +1274,18 @@ bool Cursor::upDownInText(bool up, bool & updateNeeded)
                Cursor old = *this;
                if (up) {
                        if (row > 0) {
-                               top().pos() = std::min(tm.x2pos(pit(), row - 1, xo), top().lastpos());
+                               top().pos() = min(tm.x2pos(pit(), row - 1, xo), top().lastpos());
                        } else if (pit() > 0) {
                                --pit();
                                ParagraphMetrics const & pmcur = bv_->parMetrics(text(), pit());
-                               top().pos() = std::min(tm.x2pos(pit(), pmcur.rows().size() - 1, xo), top().lastpos());
+                               top().pos() = min(tm.x2pos(pit(), pmcur.rows().size() - 1, xo), top().lastpos());
                        }
                } else {
                        if (row + 1 < int(pm.rows().size())) {
-                               top().pos() = std::min(tm.x2pos(pit(), row + 1, xo), top().lastpos());
+                               top().pos() = min(tm.x2pos(pit(), row + 1, xo), top().lastpos());
                        } else if (pit() + 1 < int(text()->paragraphs().size())) {
                                ++pit();
-                               top().pos() = std::min(tm.x2pos(pit(), 0, xo), top().lastpos());
+                               top().pos() = min(tm.x2pos(pit(), 0, xo), top().lastpos());
                        }
                }
 
@@ -1301,7 +1299,7 @@ bool Cursor::upDownInText(bool up, bool & updateNeeded)
 
 void Cursor::handleFont(string const & font)
 {
-       LYXERR(Debug::DEBUG, BOOST_CURRENT_FUNCTION << ": " << font);
+       LYXERR(Debug::DEBUG, font);
        docstring safe;
        if (selection()) {
                macroModeClose();