This moves most of 'setSelection', 'clearSelection' and 'selectionAsString'
over to a new  textcursor.C

Andre'

-- 
Those who desire to give up Freedom in order to gain Security, will not have,
nor do they deserve, either one.     (T. Jefferson or B. Franklin or both...)
Index: Makefile.am
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/Makefile.am,v
retrieving revision 1.177
diff -u -p -r1.177 Makefile.am
--- Makefile.am 20 Jun 2003 12:46:22 -0000      1.177
+++ Makefile.am 27 Jun 2003 12:27:07 -0000
@@ -231,6 +231,8 @@ lyx_SOURCES = \
        text.C \
        text2.C \
        text3.C \
+       textcursor.C \
+       textcursor.h \
        text_funcs.C \
        text_funcs.h \
        toc.C \
Index: lyxtext.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/lyxtext.h,v
retrieving revision 1.180
diff -u -p -r1.180 lyxtext.h
--- lyxtext.h   27 Jun 2003 11:53:40 -0000      1.180
+++ lyxtext.h   27 Jun 2003 12:27:07 -0000
@@ -277,8 +277,6 @@ public:
        void setSelection();
        ///
        void clearSelection();
-       ///
-       string const selectionAsString(Buffer const *, bool label) const;
 
        /// select the word we need depending on word_location
        void getWord(LyXCursor & from, LyXCursor & to,
Index: text2.C
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/text2.C,v
retrieving revision 1.375
diff -u -p -r1.375 text2.C
--- text2.C     27 Jun 2003 09:44:25 -0000      1.375
+++ text2.C     27 Jun 2003 12:27:07 -0000
@@ -530,7 +530,6 @@ bool LyXText::changeDepth(bv_funcs::DEPT
        LyXCursor tmpcursor;
        setCursor(tmpcursor, start, 0);
 
-       //redoParagraphs(tmpcursor, &(*pastend));
        redoParagraphs(tmpcursor, pastend);
 
        // We need to actually move the text->cursor. I don't
@@ -757,98 +756,18 @@ void LyXText::partialRebreak()
 // need the selection cursor:
 void LyXText::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);
+       bool const lsel = TextCursor::setSelection();
 
        if (inset_owner && (selection.set() || lsel))
                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()
 {
-       selection.set(false);
-       selection.mark(false);
-       last_sel_cursor = selection.end = selection.start = selection.cursor = cursor;
+       TextCursor::clearSelection();
+
        // reset this in the bv_owner!
        if (bv_owner && bv_owner->text)
                bv_owner->text->xsel_cache.set(false);
Index: textcursor.C
===================================================================
RCS file: textcursor.C
diff -N textcursor.C
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ textcursor.C        27 Jun 2003 12:27:07 -0000
@@ -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;
+}
Index: textcursor.h
===================================================================
RCS file: /usr/local/lyx/cvsroot/lyx-devel/src/textcursor.h,v
retrieving revision 1.1
diff -u -p -r1.1 textcursor.h
--- textcursor.h        27 Jun 2003 11:53:40 -0000      1.1
+++ textcursor.h        27 Jun 2003 12:27:07 -0000
@@ -56,6 +56,13 @@ private:
 };
 
 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
        LyXCursor cursor;
 

Reply via email to