lyx_mirror/src/textcursor.C
André Pönitz 19f83569df small stuff:
- fix yesterday's selection regression
- remove a few update() calls
- remove unused  Selection::last_sel_cursor member
- ...


git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7504 a592a061-630c-0410-9148-cb99ea01b6c8
2003-08-05 10:54:19 +00:00

82 lines
1.9 KiB
C

#include <config.h>
#include "textcursor.h"
void TextCursor::setSelection()
{
if (!selection.set()) {
selection.start = selection.cursor;
selection.end = selection.cursor;
}
selection.set(true);
// and now the whole selection
if (selection.cursor.par() == cursor.par())
if (selection.cursor.pos() < cursor.pos()) {
selection.end = cursor;
selection.start = selection.cursor;
} else {
selection.end = selection.cursor;
selection.start = cursor;
}
else if (selection.cursor.y() < cursor.y() ||
(selection.cursor.y() == cursor.y()
&& selection.cursor.x() < cursor.x())) {
selection.end = cursor;
selection.start = selection.cursor;
}
else {
selection.end = selection.cursor;
selection.start = cursor;
}
// a selection with no contents is not a selection
if (selection.start.par() == selection.end.par() &&
selection.start.pos() == selection.end.pos())
{
selection.set(false);
}
}
void TextCursor::clearSelection()
{
selection.set(false);
selection.mark(false);
selection.end = cursor;
selection.start = cursor;
selection.cursor = cursor;
}
string const TextCursor::selectionAsString(Buffer const * buffer,
bool label) const
{
if (!selection.set())
return string();
// should be const ...
ParagraphList::iterator startpit = selection.start.par();
ParagraphList::iterator endpit = selection.end.par();
size_t const startpos = selection.start.pos();
size_t const endpos = selection.end.pos();
if (startpit == endpit)
return startpit->asString(buffer, startpos, endpos, label);
// First paragraph in selection
string result =
startpit->asString(buffer, startpos, startpit->size(), label) + "\n\n";
// The paragraphs in between (if any)
ParagraphList::iterator pit = startpit;
for (++pit; pit != endpit; ++pit)
result += pit->asString(buffer, 0, pit->size(), label) + "\n\n";
// Last paragraph in selection
result += endpit->asString(buffer, 0, endpos, label);
return result;
}