]> git.lyx.org Git - lyx.git/blobdiff - src/Text3.cpp
Remove it for real now.
[lyx.git] / src / Text3.cpp
index 26a9d0348cbeb7207b9e54f09cd32865990327fd..ef69765de726a6afa0169bd2040d779dc0e241f3 100644 (file)
 #include "LyXRC.h"
 #include "Paragraph.h"
 #include "ParagraphParameters.h"
+#include "SpellChecker.h"
 #include "TextClass.h"
 #include "TextMetrics.h"
 #include "VSpace.h"
+#include "WordLangTuple.h"
 
 #include "frontends/Application.h"
 #include "frontends/Clipboard.h"
@@ -267,16 +269,19 @@ static bool doInsertInset(Cursor & cur, Text * text,
        cur.clearSelection(); // bug 393
        cur.finishUndo();
        InsetText * insetText = dynamic_cast<InsetText *>(inset);
-       if (insetText && (!insetText->allowMultiPar() || cur.lastpit() == 0)) {
-               // reset first par to default
-               cur.text()->paragraphs().begin()
-                       ->setPlainOrDefaultLayout(bparams.documentClass());
-               cur.pos() = 0;
-               cur.pit() = 0;
-               // Merge multiple paragraphs -- hack
-               while (cur.lastpit() > 0)
-                       mergeParagraph(bparams, cur.text()->paragraphs(), 0);
-               cur.leaveInset(*inset);
+       if (insetText) {
+               insetText->fixParagraphsFont();
+               if (!insetText->allowMultiPar() || cur.lastpit() == 0) {
+                       // reset first par to default
+                       cur.text()->paragraphs().begin()
+                               ->setPlainOrDefaultLayout(bparams.documentClass());
+                       cur.pos() = 0;
+                       cur.pit() = 0;
+                       // Merge multiple paragraphs -- hack
+                       while (cur.lastpit() > 0)
+                               mergeParagraph(bparams, cur.text()->paragraphs(), 0);
+                       cur.leaveInset(*inset);
+               }
        } else {
                cur.leaveInset(*inset);
                // reset surrounding par to default
@@ -286,7 +291,6 @@ static bool doInsertInset(Cursor & cur, Text * text,
                        : dc.defaultLayoutName();
                text->setLayout(cur, layoutname);
        }
-
        return true;
 }
 
@@ -297,59 +301,6 @@ string const freefont2string()
 }
 
 
-static void dragMove(Cursor & cur, int moveid, int movetoid)
-{
-       // Create pointers to buffers
-       Buffer & buf_move = *cur.buffer();
-       DocIterator dit_move = buf_move.getParFromID(moveid);
-       DocIterator dit_dest = buf_move.getParFromID(movetoid);
-
-       pit_type & pit_move = dit_move.pit();
-       pit_type & pit_dest = dit_dest.pit();
-       ParagraphList & pars = dit_move.text()->paragraphs();
-
-       // Create references to the paragraphs to be moved
-       ParagraphList::iterator const bgn = pars.begin();
-       ParagraphList::iterator dest_start = boost::next(bgn, pit_dest);
-
-       // The first paragraph of the area to be copied:
-       ParagraphList::iterator start = boost::next(bgn, pit_move);
-       // The final paragraph of area to be copied:
-       ParagraphList::iterator finish = start;
-       ParagraphList::iterator const end = pars.end();
-
-       // Move out (down) from this section header
-       if (finish != end)
-               ++finish;
-
-       // Seek the one (on same level) below
-       int const thistoclevel = start->layout().toclevel;
-       for (; finish != end; ++finish) {
-               int const toclevel = finish->layout().toclevel;
-               if (toclevel != Layout::NOT_IN_TOC
-                   && toclevel <= thistoclevel)
-                       break;
-       }
-
-       if (start == pars.begin() || start == dest_start)
-               // Nothing to move
-               return;
-
-       pars.insert(dest_start, start, finish);
-       pars.erase(start, finish);
-
-       // FIXME: This only really needs doing for the newly
-       // introduced paragraphs. Something like:
-       //      pit_type const numpars = distance(start, finish);
-       //      start = boost::next(bgn, pit);
-       //      finish = boost::next(start, numpars);
-       //      for (; start != finish; ++start)
-       //              start->setBuffer(buf);
-       // But while this seems to work, it is kind of fragile.
-       buf_move.inset().setBuffer(buf_move);
-}
-
-
 /// the type of outline operation
 enum OutlineOp {
        OutlineUp, // Move this header with text down
@@ -2047,6 +1998,48 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                break;
        }
 
+       case LFUN_SPELLING_ADD: {
+               docstring word = from_utf8(cmd.getArg(0));
+               string code;
+               string variety;
+               if (word.empty()) {
+                       word = cur.selectionAsString(false);
+                       // FIXME
+                       if (word.size() > 100 || word.empty()) {
+                               // Get word or selection
+                               selectWordWhenUnderCursor(cur, WHOLE_WORD);
+                               word = cur.selectionAsString(false);
+                       }
+                       code = cur.getFont().language()->code();
+                       variety = cur.getFont().language()->variety();
+               } else
+                       variety = split(cmd.getArg(1), code, '-');
+               WordLangTuple wl(word, code, variety);
+               theSpellChecker()->insert(wl);
+               break;
+       }
+
+       case LFUN_SPELLING_IGNORE: {
+               docstring word = from_utf8(cmd.getArg(0));
+               string code;
+               string variety;
+               if (word.empty()) {
+                       word = cur.selectionAsString(false);
+                       // FIXME
+                       if (word.size() > 100 || word.empty()) {
+                               // Get word or selection
+                               selectWordWhenUnderCursor(cur, WHOLE_WORD);
+                               word = cur.selectionAsString(false);
+                       }
+                       code = cur.getFont().language()->code();
+                       variety = cur.getFont().language()->variety();
+               } else
+                       variety = split(cmd.getArg(1), code, '-');
+               WordLangTuple wl(word, code, variety);
+               theSpellChecker()->accept(wl);
+               break;
+       }
+
        case LFUN_PARAGRAPH_PARAMS_APPLY: {
                // Given data, an encoding of the ParagraphParameters
                // generated in the Paragraph dialog, this function sets
@@ -2105,16 +2098,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                cur.buffer()->updateLabels();
                needsUpdate = true;
                break;
-       
-       case LFUN_OUTLINE_DRAGMOVE: {
-               int const move_id = convert<int>(cmd.getArg(0));
-               int const move_to_id = convert<int>(cmd.getArg(1));
-               dragMove(cur, move_id, move_to_id);
-               setCursor(cur, cur.pit(), 0);
-               cur.buffer()->updateLabels();
-               needsUpdate = true;
-               break;
-       }
 
        default:
                LYXERR(Debug::ACTION, "Command " << cmd << " not DISPATCHED by Text");
@@ -2526,11 +2509,6 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_OUTLINE_DOWN:
        case LFUN_OUTLINE_IN:
        case LFUN_OUTLINE_OUT:
-       case LFUN_OUTLINE_DRAGMOVE:
-               // FIXME: LyX is not ready for outlining within inset.
-               enable = isMainText()
-                       && cur.paragraph().layout().toclevel != Layout::NOT_IN_TOC;
-               break;
 
        case LFUN_NEWLINE_INSERT:
                // LaTeX restrictions (labels or empty par)
@@ -2571,6 +2549,11 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_BREAK_PARAGRAPH:
                enable = cur.inset().getLayout().isMultiPar();
                break;
+       
+       case LFUN_SPELLING_ADD:
+       case LFUN_SPELLING_IGNORE:
+               enable = theSpellChecker();
+               break;
 
        case LFUN_WORD_DELETE_FORWARD:
        case LFUN_WORD_DELETE_BACKWARD: