]> git.lyx.org Git - lyx.git/blobdiff - src/Text3.cpp
Allow MTag to take attributes.
[lyx.git] / src / Text3.cpp
index af69c654e79311a7cce1254a5862a778ac506cb5..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"
@@ -299,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
@@ -2049,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
@@ -2107,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");
@@ -2528,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)
@@ -2573,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: