mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +00:00
move some selection related stuff over to textcursor.C
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@7218 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
013df200fb
commit
3390fc33d7
@ -231,6 +231,8 @@ lyx_SOURCES = \
|
|||||||
text.C \
|
text.C \
|
||||||
text2.C \
|
text2.C \
|
||||||
text3.C \
|
text3.C \
|
||||||
|
textcursor.C \
|
||||||
|
textcursor.h \
|
||||||
text_funcs.C \
|
text_funcs.C \
|
||||||
text_funcs.h \
|
text_funcs.h \
|
||||||
toc.C \
|
toc.C \
|
||||||
|
@ -277,8 +277,6 @@ public:
|
|||||||
void setSelection();
|
void setSelection();
|
||||||
///
|
///
|
||||||
void clearSelection();
|
void clearSelection();
|
||||||
///
|
|
||||||
string const selectionAsString(Buffer const *, bool label) const;
|
|
||||||
|
|
||||||
/// select the word we need depending on word_location
|
/// select the word we need depending on word_location
|
||||||
void getWord(LyXCursor & from, LyXCursor & to,
|
void getWord(LyXCursor & from, LyXCursor & to,
|
||||||
|
87
src/text2.C
87
src/text2.C
@ -530,7 +530,6 @@ bool LyXText::changeDepth(bv_funcs::DEPTH_CHANGE type, bool test_only)
|
|||||||
LyXCursor tmpcursor;
|
LyXCursor tmpcursor;
|
||||||
setCursor(tmpcursor, start, 0);
|
setCursor(tmpcursor, start, 0);
|
||||||
|
|
||||||
//redoParagraphs(tmpcursor, &(*pastend));
|
|
||||||
redoParagraphs(tmpcursor, pastend);
|
redoParagraphs(tmpcursor, pastend);
|
||||||
|
|
||||||
// We need to actually move the text->cursor. I don't
|
// We need to actually move the text->cursor. I don't
|
||||||
@ -757,98 +756,18 @@ void LyXText::partialRebreak()
|
|||||||
// need the selection cursor:
|
// need the selection cursor:
|
||||||
void LyXText::setSelection()
|
void LyXText::setSelection()
|
||||||
{
|
{
|
||||||
bool const lsel = selection.set();
|
bool const lsel = TextCursor::setSelection();
|
||||||
|
|
||||||
if (!selection.set()) {
|
|
||||||
last_sel_cursor = selection.cursor;
|
|
||||||
selection.start = selection.cursor;
|
|
||||||
selection.end = selection.cursor;
|
|
||||||
}
|
|
||||||
|
|
||||||
selection.set(true);
|
|
||||||
|
|
||||||
// first the toggling area
|
|
||||||
if (cursor.y() < last_sel_cursor.y()
|
|
||||||
|| (cursor.y() == last_sel_cursor.y()
|
|
||||||
&& cursor.x() < last_sel_cursor.x())) {
|
|
||||||
toggle_end_cursor = last_sel_cursor;
|
|
||||||
toggle_cursor = cursor;
|
|
||||||
} else {
|
|
||||||
toggle_end_cursor = cursor;
|
|
||||||
toggle_cursor = last_sel_cursor;
|
|
||||||
}
|
|
||||||
|
|
||||||
last_sel_cursor = cursor;
|
|
||||||
|
|
||||||
// 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);
|
|
||||||
|
|
||||||
if (inset_owner && (selection.set() || lsel))
|
if (inset_owner && (selection.set() || lsel))
|
||||||
inset_owner->setUpdateStatus(bv(), InsetText::SELECTION);
|
inset_owner->setUpdateStatus(bv(), InsetText::SELECTION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
string const LyXText::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();
|
|
||||||
pos_type const startpos(selection.start.pos());
|
|
||||||
pos_type const endpos(selection.end.pos());
|
|
||||||
|
|
||||||
if (startpit == endpit) {
|
|
||||||
return startpit->asString(buffer, startpos, endpos, label);
|
|
||||||
}
|
|
||||||
|
|
||||||
string result;
|
|
||||||
|
|
||||||
// First paragraph in selection
|
|
||||||
result += startpit->asString(buffer, startpos, startpit->size(), label) + "\n\n";
|
|
||||||
|
|
||||||
// The paragraphs in between (if any)
|
|
||||||
ParagraphList::iterator pit = boost::next(startpit);
|
|
||||||
for (; 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void LyXText::clearSelection()
|
void LyXText::clearSelection()
|
||||||
{
|
{
|
||||||
selection.set(false);
|
TextCursor::clearSelection();
|
||||||
selection.mark(false);
|
|
||||||
last_sel_cursor = selection.end = selection.start = selection.cursor = cursor;
|
|
||||||
// reset this in the bv_owner!
|
// reset this in the bv_owner!
|
||||||
if (bv_owner && bv_owner->text)
|
if (bv_owner && bv_owner->text)
|
||||||
bv_owner->text->xsel_cache.set(false);
|
bv_owner->text->xsel_cache.set(false);
|
||||||
|
95
src/textcursor.C
Normal file
95
src/textcursor.C
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
|
||||||
|
#include "textcursor.h"
|
||||||
|
|
||||||
|
bool TextCursor::setSelection()
|
||||||
|
{
|
||||||
|
bool const lsel = selection.set();
|
||||||
|
|
||||||
|
if (!selection.set()) {
|
||||||
|
last_sel_cursor = selection.cursor;
|
||||||
|
selection.start = selection.cursor;
|
||||||
|
selection.end = selection.cursor;
|
||||||
|
}
|
||||||
|
|
||||||
|
selection.set(true);
|
||||||
|
|
||||||
|
// first the toggling area
|
||||||
|
if (cursor.y() < last_sel_cursor.y()
|
||||||
|
|| (cursor.y() == last_sel_cursor.y()
|
||||||
|
&& cursor.x() < last_sel_cursor.x())) {
|
||||||
|
toggle_end_cursor = last_sel_cursor;
|
||||||
|
toggle_cursor = cursor;
|
||||||
|
} else {
|
||||||
|
toggle_end_cursor = cursor;
|
||||||
|
toggle_cursor = last_sel_cursor;
|
||||||
|
}
|
||||||
|
|
||||||
|
last_sel_cursor = cursor;
|
||||||
|
|
||||||
|
// 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);
|
||||||
|
|
||||||
|
return lsel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TextCursor::clearSelection()
|
||||||
|
{
|
||||||
|
selection.set(false);
|
||||||
|
selection.mark(false);
|
||||||
|
last_sel_cursor = selection.end = selection.start = 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;
|
||||||
|
}
|
@ -56,6 +56,13 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct TextCursor {
|
struct TextCursor {
|
||||||
|
/// returns true if selection was set previously
|
||||||
|
bool setSelection();
|
||||||
|
///
|
||||||
|
void clearSelection();
|
||||||
|
///
|
||||||
|
string const selectionAsString(Buffer const * buffer, bool label) const;
|
||||||
|
|
||||||
// actual cursor position
|
// actual cursor position
|
||||||
LyXCursor cursor;
|
LyXCursor cursor;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user