#include <config.h>
#include "Bidi.h"
-#include "BufferView.h"
#include "Buffer.h"
-#include "Cursor.h"
+#include "BufferView.h"
#include "CoordCache.h"
+#include "Cursor.h"
#include "CutAndPaste.h"
#include "DispatchResult.h"
#include "Encoding.h"
+#include "Font.h"
#include "FuncRequest.h"
#include "Language.h"
#include "lfuns.h"
-#include "Font.h"
#include "LyXFunc.h" // only for setMessage()
#include "LyXRC.h"
-#include "Row.h"
-#include "Text.h"
-#include "Paragraph.h"
#include "paragraph_funcs.h"
+#include "Paragraph.h"
#include "ParIterator.h"
+#include "Row.h"
+#include "Text.h"
#include "TextMetrics.h"
+#include "TocBackend.h"
#include "support/debug.h"
#include "support/docstream.h"
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: "
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());
}
bool Cursor::selHandle(bool sel)
{
//lyxerr << "Cursor::selHandle" << endl;
+ if (mark())
+ sel = true;
if (sel == selection())
return false;
//#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)
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)
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;
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;
//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;
}
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
{
if (empty())
return 0;
- int s = 0;
- // go up until first non-0 text is hit
- // (innermost text is 0 in mathed)
- for (s = depth() - 1; s >= 0; --s)
- if (operator[](s).text())
- break;
- CursorSlice const & sl = operator[](s);
+ CursorSlice const & sl = innerTextSlice();
Text const & text = *sl.text();
Font font = text.getPar(sl.pit()).getFont(
bv().buffer().params(), sl.pos(), outerFont(sl.pit(), text.paragraphs()));
// if a character is entered.
// HACK. far from being perfect...
- // go up until first non-0 text is hit
- // (innermost text is 0 in mathed)
- int s = 0;
- for (s = depth() - 1; s >= 0; --s)
- if (operator[](s).text())
- break;
- CursorSlice const & sl = operator[](s);
+
+ CursorSlice const & sl = innerTextSlice();
Text const & text = *sl.text();
Paragraph const & par = text.getPar(sl.pit());
}
+void Cursor::checkBufferStructure()
+{
+ if (paragraph().layout()->toclevel == Layout::NOT_IN_TOC)
+ return;
+ Buffer const * master = buffer().masterBuffer();
+ master->tocBackend().updateItem(ParConstIterator(*this));
+ master->structureChanged();
+}
+
+
} // namespace lyx