]> git.lyx.org Git - lyx.git/blobdiff - src/Text3.cpp
typo
[lyx.git] / src / Text3.cpp
index 04de6b7bc2ba52779ed472a15c43043b2fe17095..08049f005382689ec374c9291df51a022b5a7560 100644 (file)
@@ -464,7 +464,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        // FIXME: We use the update flag to indicates wether a singlePar or a
        // full screen update is needed. We reset it here but shall we restore it
        // at the end?
-       cur.noUpdate();
+       cur.noScreenUpdate();
 
        LASSERT(cur.text() == this, /**/);
        CursorSlice oldTopSlice = cur.top();
@@ -486,8 +486,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                recUndo(cur, pit, pit + 1);
                cur.finishUndo();
                pars_.swap(pit, pit + 1);
-               cur.buffer()->updateBuffer();
                needsUpdate = true;
+               cur.forceBufferUpdate();
                ++cur.pit();
                break;
        }
@@ -497,9 +497,9 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                recUndo(cur, pit - 1, pit);
                cur.finishUndo();
                pars_.swap(pit, pit - 1);
-               cur.buffer()->updateBuffer();
                --cur.pit();
                needsUpdate = true;
+               cur.forceBufferUpdate();
                break;
        }
 
@@ -523,7 +523,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                par.params().startOfAppendix(start);
 
                // we can set the refreshing parameters now
-               cur.buffer()->updateBuffer();
+               cur.forceBufferUpdate();
                break;
        }
 
@@ -558,7 +558,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        needsUpdate |= cursorTop(cur);
                else
                        cur.undispatched();
-               cur.updateFlags(Update::FitCursor);
+               cur.screenUpdateFlags(Update::FitCursor);
                break;
 
        case LFUN_BUFFER_END:
@@ -568,7 +568,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        needsUpdate |= cursorBottom(cur);
                else
                        cur.undispatched();
-               cur.updateFlags(Update::FitCursor);
+               cur.screenUpdateFlags(Update::FitCursor);
                break;
 
        case LFUN_INSET_BEGIN:
@@ -578,7 +578,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        needsUpdate |= cursorTop(cur);
                else
                        cur.undispatched();
-               cur.updateFlags(Update::FitCursor);
+               cur.screenUpdateFlags(Update::FitCursor);
                break;
 
        case LFUN_INSET_END:
@@ -588,7 +588,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        needsUpdate |= cursorBottom(cur);
                else
                        cur.undispatched();
-               cur.updateFlags(Update::FitCursor);
+               cur.screenUpdateFlags(Update::FitCursor);
                break;
 
        case LFUN_INSET_SELECT_ALL:
@@ -600,7 +600,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        needsUpdate |= cursorBottom(cur);
                } else 
                        cur.undispatched();
-               cur.updateFlags(Update::FitCursor);
+               cur.screenUpdateFlags(Update::FitCursor);
                break;
 
        case LFUN_CHAR_FORWARD:
@@ -624,7 +624,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                                // provide it with two different cursors.
                                Cursor dummy = cur;
                                dummy.pos() = dummy.pit() = 0;
-                               cur.bv().checkDepm(dummy, cur);
+                               if (cur.bv().checkDepm(dummy, cur))
+                                       cur.forceBufferUpdate();;
                        }
                }
                break;
@@ -650,7 +651,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                                Cursor dummy = cur;
                                dummy.pos() = cur.lastpos();
                                dummy.pit() = cur.lastpit();
-                               cur.bv().checkDepm(dummy, cur);
+                               if (cur.bv().checkDepm(dummy, cur))
+                                       cur.forceBufferUpdate();
                        }
                }
                break;
@@ -885,8 +887,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                                                      bv->buffer().params().trackChanges);
                                // Update the selection pos to make sure the selection does not
                                // change as the inserted tab will increase the logical pos.
-                               if (cur.anchor_.pit() == pit)
-                                       cur.anchor_.forwardPos();
+                               if (cur.realAnchor().pit() == pit)
+                                       cur.realAnchor().forwardPos();
                                if (cur.pit() == pit)
                                        cur.forwardPos();
                        }
@@ -912,8 +914,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                                if (par.getChar(0) == '\t') {
                                        if (cur.pit() == pit)
                                                cur.posBackward();
-                                       if (cur.anchor_.pit() == pit && cur.anchor_.pos() > 0 )
-                                               cur.anchor_.backwardPos();
+                                       if (cur.realAnchor().pit() == pit && cur.realAnchor().pos() > 0 )
+                                               cur.realAnchor().backwardPos();
                                        
                                        par.eraseChar(0, tc);
                                } else 
@@ -922,8 +924,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                                             par.getChar(0) == ' ' && n_spaces < 4; ++n_spaces) {
                                                if (cur.pit() == pit)
                                                        cur.posBackward();
-                                               if (cur.anchor_.pit() == pit && cur.anchor_.pos() > 0 )
-                                                       cur.anchor_.backwardPos();
+                                               if (cur.realAnchor().pit() == pit && cur.realAnchor().pos() > 0 )
+                                                       cur.realAnchor().backwardPos();
                                                
                                                par.eraseChar(0, tc);
                                        }
@@ -971,6 +973,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        singleParUpdate = false;
                }
                moveCursor(cur, false);
+               cur.forceBufferUpdate();
                break;
 
        case LFUN_CHAR_DELETE_BACKWARD:
@@ -988,6 +991,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        cutSelection(cur, true, false);
                        singleParUpdate = false;
                }
+               cur.forceBufferUpdate();
                break;
 
        case LFUN_BREAK_PARAGRAPH:
@@ -1046,8 +1050,10 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        }
 
        case LFUN_INSET_DISSOLVE: {
-               if (dissolveInset(cur))
+               if (dissolveInset(cur)) {
                        needsUpdate = true;
+                       cur.forceBufferUpdate();
+               }
                break;
        }
 
@@ -1363,7 +1369,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                case mouse_button::button1:
                        // Set the cursor
                        if (!bv->mouseSetCursor(cur, cmd.argument() == "region-select"))
-                               cur.updateFlags(Update::SinglePar | Update::FitCursor);
+                               cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
                        if (bvcur.wordSelection())
                                selectWord(bvcur, WHOLE_WORD);
                        break;
@@ -1374,7 +1380,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        lyx::dispatch(
                                FuncRequest(LFUN_COMMAND_ALTERNATIVES,
                                            "selection-paste ; primary-selection-paste paragraph"));
-                       cur.noUpdate();
+                       cur.noScreenUpdate();
                        break;
 
                case mouse_button::button3: {
@@ -1382,11 +1388,11 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        // selection, a context menu will popup.
                        if (bvcur.selection() && cur >= bvcur.selectionBegin()
                            && cur < bvcur.selectionEnd()) {
-                               cur.noUpdate();
+                               cur.noScreenUpdate();
                                return;
                        }
                        if (!bv->mouseSetCursor(cur, false))
-                               cur.updateFlags(Update::SinglePar | Update::FitCursor);
+                               cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
                        break;
                }
 
@@ -1398,12 +1404,12 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_MOUSE_MOTION: {
                // Mouse motion with right or middle mouse do nothing for now.
                if (cmd.button() != mouse_button::button1) {
-                       cur.noUpdate();
+                       cur.noScreenUpdate();
                        return;
                }
                // ignore motions deeper nested than the real anchor
                Cursor & bvcur = cur.bv().cursor();
-               if (!bvcur.anchor_.hasPart(cur)) {
+               if (!bvcur.realAnchor().hasPart(cur)) {
                        cur.undispatched();
                        break;
                }
@@ -1431,8 +1437,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                bvcur.setSelection(true);
                if (cur.top() == old) {
                        // We didn't move one iota, so no need to update the screen.
-                       cur.updateFlags(Update::SinglePar | Update::FitCursor);
-                       //cur.noUpdate();
+                       cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
+                       //cur.noScreenUpdate();
                        return;
                }
                break;
@@ -1453,23 +1459,23 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                                cur.bv().cursor().setSelection();
                                // We might have removed an empty but drawn selection
                                // (probably a margin)
-                               cur.updateFlags(Update::SinglePar | Update::FitCursor);
+                               cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
                        } else
-                               cur.noUpdate();
+                               cur.noScreenUpdate();
                        // FIXME: We could try to handle drag and drop of selection here.
                        return;
 
                case mouse_button::button2:
                        // Middle mouse pasting is handled at mouse press time,
                        // see LFUN_MOUSE_PRESS.
-                       cur.noUpdate();
+                       cur.noScreenUpdate();
                        return;
 
                case mouse_button::button3:
                        // Cursor was set at LFUN_MOUSE_PRESS time.
                        // FIXME: If there is a selection we could try to handle a special
                        // drag & drop context menu.
-                       cur.noUpdate();
+                       cur.noScreenUpdate();
                        return;
 
                case mouse_button::none:
@@ -1570,7 +1576,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_ERT_INSERT:
        case LFUN_LISTING_INSERT:
        case LFUN_MARGINALNOTE_INSERT:
-       case LFUN_OPTIONAL_INSERT:
+       case LFUN_ARGUMENT_INSERT:
        case LFUN_INDEX_INSERT:
        case LFUN_PREVIEW_INSERT:
                // Open the inset, and move the current selection
@@ -1579,7 +1585,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                cur.posForward();
                // Some insets are numbered, others are shown in the outline pane so
                // let's update the labels and the toc backend.
-               bv->buffer().updateBuffer();
+               cur.forceBufferUpdate();
                break;
 
        case LFUN_TABULAR_INSERT:
@@ -1633,8 +1639,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                // date metrics.
                FuncRequest cmd_caption(LFUN_CAPTION_INSERT);
                doInsertInset(cur, cur.text(), cmd_caption, true, false);
-               bv->buffer().updateBuffer();
-               cur.updateFlags(Update::Force);
+               cur.forceBufferUpdate();
+               cur.screenUpdateFlags(Update::Force);
                // FIXME: When leaving the Float (or Wrap) inset we should
                // delete any empty paragraph left above or below the
                // caption.
@@ -1665,8 +1671,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        }
        
        case LFUN_NOMENCL_PRINT:
-       case LFUN_TOC_INSERT:
-       case LFUN_LINE_INSERT:
        case LFUN_NEWPAGE_INSERT:
                // do nothing fancy
                doInsertInset(cur, this, cmd, false, false);
@@ -2038,6 +2042,25 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                break;
        }
 
+       case LFUN_SPELLING_REMOVE: {
+               docstring word = from_utf8(cmd.getArg(0));
+               Language * lang;
+               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);
+                       }
+                       lang = const_cast<Language *>(cur.getFont().language());
+               } else
+                       lang = const_cast<Language *>(languages.getLanguage(cmd.getArg(1)));
+               WordLangTuple wl(word, lang);
+               theSpellChecker()->remove(wl);
+               break;
+       }
+
        case LFUN_PARAGRAPH_PARAMS_APPLY: {
                // Given data, an encoding of the ParagraphParameters
                // generated in the Paragraph dialog, this function sets
@@ -2074,26 +2097,26 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_OUTLINE_UP:
                outline(OutlineUp, cur);
                setCursor(cur, cur.pit(), 0);
-               cur.buffer()->updateBuffer();
+               cur.forceBufferUpdate();
                needsUpdate = true;
                break;
 
        case LFUN_OUTLINE_DOWN:
                outline(OutlineDown, cur);
                setCursor(cur, cur.pit(), 0);
-               cur.buffer()->updateBuffer();
+               cur.forceBufferUpdate();
                needsUpdate = true;
                break;
 
        case LFUN_OUTLINE_IN:
                outline(OutlineIn, cur);
-               cur.buffer()->updateBuffer();
+               cur.forceBufferUpdate();
                needsUpdate = true;
                break;
 
        case LFUN_OUTLINE_OUT:
                outline(OutlineOut, cur);
-               cur.buffer()->updateBuffer();
+               cur.forceBufferUpdate();
                needsUpdate = true;
                break;
 
@@ -2121,7 +2144,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                // Inserting characters does not change par height in general. So, try
                // to update _only_ this paragraph. BufferView will detect if a full
                // metrics update is needed anyway.
-               cur.updateFlags(Update::SinglePar | Update::FitCursor);
+               cur.screenUpdateFlags(Update::SinglePar | Update::FitCursor);
                return;
        }
 
@@ -2133,15 +2156,15 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                // FIXME: it would be better if we could just do this
                //
                //if (cur.result().update() != Update::FitCursor)
-               //      cur.noUpdate();
+               //      cur.noScreenUpdate();
                //
                // But some LFUNs do not set Update::FitCursor when needed, so we
                // do it for all. This is not very harmfull as FitCursor will provoke
                // a full redraw only if needed but still, a proper review of all LFUN
                // should be done and this needsUpdate boolean can then be removed.
-               cur.updateFlags(Update::FitCursor);
+               cur.screenUpdateFlags(Update::FitCursor);
        else
-               cur.updateFlags(Update::Force | Update::FitCursor);
+               cur.screenUpdateFlags(Update::Force | Update::FitCursor);
 }
 
 
@@ -2204,6 +2227,8 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                        code = NOMENCL_PRINT_CODE;
                else if (cmd.argument() == "label")
                        code = LABEL_CODE;
+               else if (cmd.argument() == "line")
+                       code = LINE_CODE;
                else if (cmd.argument() == "note")
                        code = NOTE_CODE;
                else if (cmd.argument() == "phantom")
@@ -2288,7 +2313,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                        if (cit == floats.end() ||
                                        // and that we know how to generate a list of them
                            (!cit->second.needsFloatPkg() && cit->second.listCommand().empty())) {
-                               flag.unknown(true);
+                               flag.setUnknown(true);
                                // probably not necessary, but...
                                enable = false;
                        }
@@ -2335,17 +2360,16 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_LABEL_INSERT:
                code = LABEL_CODE;
                break;
-       case LFUN_LINE_INSERT:
-               code = LINE_CODE;
-               break;
        case LFUN_INFO_INSERT:
                code = INFO_CODE;
                break;
-       case LFUN_OPTIONAL_INSERT:
-               code = OPTARG_CODE;
-               enable = cur.paragraph().insetList().count(OPTARG_CODE)
-                       < cur.paragraph().layout().optionalargs;
+       case LFUN_ARGUMENT_INSERT: {
+               code = ARG_CODE;
+               Layout const & lay = cur.paragraph().layout();
+               int const numargs = lay.reqargs + lay.optargs;
+               enable = cur.paragraph().insetList().count(ARG_CODE) < numargs;
                break;
+       }
        case LFUN_INDEX_INSERT:
                code = INDEX_CODE;
                break;
@@ -2366,11 +2390,6 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                // not allowed in description items
                enable = !inDescriptionItem(cur);
                break;
-       case LFUN_TOC_INSERT:
-               code = TOC_CODE;
-               // not allowed in description items
-               enable = !inDescriptionItem(cur);
-               break;
        case LFUN_HYPERLINK_INSERT:
                if (cur.selIsMultiCell() || cur.selIsMultiLine()) {
                        enable = false;
@@ -2583,6 +2602,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        
        case LFUN_SPELLING_ADD:
        case LFUN_SPELLING_IGNORE:
+       case LFUN_SPELLING_REMOVE:
                enable = theSpellChecker();
                break;
 
@@ -2671,7 +2691,6 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_LINE_END:
        case LFUN_CHAR_DELETE_FORWARD:
        case LFUN_CHAR_DELETE_BACKWARD:
-       case LFUN_INSET_INSERT:
        case LFUN_WORD_UPCASE:
        case LFUN_WORD_LOWCASE:
        case LFUN_WORD_CAPITALIZE:
@@ -2687,6 +2706,19 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                enable = true;
                break;
 
+       case LFUN_INSET_INSERT: {
+               string const type = cmd.getArg(0);
+               if (type == "toc") {
+                       code = TOC_CODE;
+                       // not allowed in description items
+                       //FIXME: couldn't this be merged in Inset::insetAllowed()?
+                       enable = !inDescriptionItem(cur);
+               } else {
+                       enable = true;
+               }
+               break;
+       }
+
        default:
                return false;
        }