]> git.lyx.org Git - lyx.git/blobdiff - src/Text3.cpp
Remove the bogus fixme.
[lyx.git] / src / Text3.cpp
index ef69765de726a6afa0169bd2040d779dc0e241f3..79dcff2279922c1440ab52ffeb610a67bac90c22 100644 (file)
@@ -37,7 +37,7 @@
 #include "Language.h"
 #include "Layout.h"
 #include "LyXAction.h"
-#include "LyXFunc.h"
+#include "LyX.h"
 #include "Lexer.h"
 #include "LyXRC.h"
 #include "Paragraph.h"
@@ -200,7 +200,7 @@ void regexpDispatch(Cursor & cur, FuncRequest const & cmd)
 {
        BOOST_ASSERT(cmd.action == LFUN_REGEXP_MODE);
        if (cur.inRegexped()) {
-               cur.message(_("Already in regexp mode"));
+               cur.message(_("Already in regular expression mode"));
                return;
        }
        cur.recordUndo();
@@ -2000,8 +2000,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 
        case LFUN_SPELLING_ADD: {
                docstring word = from_utf8(cmd.getArg(0));
-               string code;
-               string variety;
+               Language * lang;
                if (word.empty()) {
                        word = cur.selectionAsString(false);
                        // FIXME
@@ -2010,19 +2009,17 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                                selectWordWhenUnderCursor(cur, WHOLE_WORD);
                                word = cur.selectionAsString(false);
                        }
-                       code = cur.getFont().language()->code();
-                       variety = cur.getFont().language()->variety();
+                       lang = const_cast<Language *>(cur.getFont().language());
                } else
-                       variety = split(cmd.getArg(1), code, '-');
-               WordLangTuple wl(word, code, variety);
+                       lang = const_cast<Language *>(languages.getLanguage(cmd.getArg(1)));
+               WordLangTuple wl(word, lang);
                theSpellChecker()->insert(wl);
                break;
        }
 
        case LFUN_SPELLING_IGNORE: {
                docstring word = from_utf8(cmd.getArg(0));
-               string code;
-               string variety;
+               Language * lang;
                if (word.empty()) {
                        word = cur.selectionAsString(false);
                        // FIXME
@@ -2031,11 +2028,10 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                                selectWordWhenUnderCursor(cur, WHOLE_WORD);
                                word = cur.selectionAsString(false);
                        }
-                       code = cur.getFont().language()->code();
-                       variety = cur.getFont().language()->variety();
+                       lang = const_cast<Language *>(cur.getFont().language());
                } else
-                       variety = split(cmd.getArg(1), code, '-');
-               WordLangTuple wl(word, code, variety);
+                       lang = const_cast<Language *>(languages.getLanguage(cmd.getArg(1)));
+               WordLangTuple wl(word, lang);
                theSpellChecker()->accept(wl);
                break;
        }
@@ -2393,6 +2389,11 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                code = MATH_HULL_CODE;
                break;
 
+       case LFUN_REGEXP_MODE:
+               code = MATH_HULL_CODE;
+               enable = cur.buffer()->isInternal() && !cur.inRegexped();
+               break;
+
        case LFUN_INSET_MODIFY:
                // We need to disable this, because we may get called for a
                // tabular cell via
@@ -2403,31 +2404,38 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
 
        case LFUN_FONT_EMPH:
                flag.setOnOff(fontinfo.emph() == FONT_ON);
+               enable = !cur.inset().getLayout().isPassThru();
                break;
 
        case LFUN_FONT_ITAL:
                flag.setOnOff(fontinfo.shape() == ITALIC_SHAPE);
+               enable = !cur.inset().getLayout().isPassThru();
                break;
 
        case LFUN_FONT_NOUN:
                flag.setOnOff(fontinfo.noun() == FONT_ON);
+               enable = !cur.inset().getLayout().isPassThru();
                break;
 
        case LFUN_FONT_BOLD:
        case LFUN_FONT_BOLDSYMBOL:
                flag.setOnOff(fontinfo.series() == BOLD_SERIES);
+               enable = !cur.inset().getLayout().isPassThru();
                break;
 
        case LFUN_FONT_SANS:
                flag.setOnOff(fontinfo.family() == SANS_FAMILY);
+               enable = !cur.inset().getLayout().isPassThru();
                break;
 
        case LFUN_FONT_ROMAN:
                flag.setOnOff(fontinfo.family() == ROMAN_FAMILY);
+               enable = !cur.inset().getLayout().isPassThru();
                break;
 
        case LFUN_FONT_TYPEWRITER:
                flag.setOnOff(fontinfo.family() == TYPEWRITER_FAMILY);
+               enable = !cur.inset().getLayout().isPassThru();
                break;
 
        case LFUN_CUT:
@@ -2509,6 +2517,10 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_OUTLINE_DOWN:
        case LFUN_OUTLINE_IN:
        case LFUN_OUTLINE_OUT:
+               // 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)
@@ -2544,6 +2556,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
 
        case LFUN_LANGUAGE:
                enable = !cur.inset().getLayout().isPassThru();
+               flag.setOnOff(to_utf8(cmd.argument()) == cur.real_current_font.language()->lang());
                break;
 
        case LFUN_BREAK_PARAGRAPH:
@@ -2555,6 +2568,47 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                enable = theSpellChecker();
                break;
 
+       case LFUN_LAYOUT:
+               enable = !cur.inset().forcePlainLayout();
+               break;
+               
+       case LFUN_LAYOUT_PARAGRAPH:
+       case LFUN_PARAGRAPH_PARAMS:
+       case LFUN_PARAGRAPH_PARAMS_APPLY:
+       case LFUN_PARAGRAPH_UPDATE:
+               enable = cur.inset().allowParagraphCustomization();
+               break;
+
+       // FIXME: why are accent lfuns forbidden with pass_thru layouts?
+       case LFUN_ACCENT_ACUTE:
+       case LFUN_ACCENT_BREVE:
+       case LFUN_ACCENT_CARON:
+       case LFUN_ACCENT_CEDILLA:
+       case LFUN_ACCENT_CIRCLE:
+       case LFUN_ACCENT_CIRCUMFLEX:
+       case LFUN_ACCENT_DOT:
+       case LFUN_ACCENT_GRAVE:
+       case LFUN_ACCENT_HUNGARIAN_UMLAUT:
+       case LFUN_ACCENT_MACRON:
+       case LFUN_ACCENT_OGONEK:
+       case LFUN_ACCENT_TIE:
+       case LFUN_ACCENT_TILDE:
+       case LFUN_ACCENT_UMLAUT:
+       case LFUN_ACCENT_UNDERBAR:
+       case LFUN_ACCENT_UNDERDOT:
+       case LFUN_FONT_DEFAULT:
+       case LFUN_FONT_FRAK:
+       case LFUN_FONT_SIZE:
+       case LFUN_FONT_STATE:
+       case LFUN_FONT_UNDERLINE:
+       case LFUN_FONT_STRIKEOUT:
+       case LFUN_FONT_UULINE:
+       case LFUN_FONT_UWAVE:
+       case LFUN_TEXTSTYLE_APPLY:
+       case LFUN_TEXTSTYLE_UPDATE:
+               enable = !cur.inset().getLayout().isPassThru();
+               break;
+
        case LFUN_WORD_DELETE_FORWARD:
        case LFUN_WORD_DELETE_BACKWARD:
        case LFUN_LINE_DELETE:
@@ -2584,6 +2638,15 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_WORD_LEFT_SELECT:
        case LFUN_WORD_SELECT:
        case LFUN_SECTION_SELECT:
+       case LFUN_BUFFER_BEGIN:
+       case LFUN_BUFFER_END:
+       case LFUN_BUFFER_BEGIN_SELECT:
+       case LFUN_BUFFER_END_SELECT:
+       case LFUN_INSET_BEGIN:
+       case LFUN_INSET_END:
+       case LFUN_INSET_BEGIN_SELECT:
+       case LFUN_INSET_END_SELECT:
+       case LFUN_INSET_SELECT_ALL:
        case LFUN_PARAGRAPH_UP:
        case LFUN_PARAGRAPH_DOWN:
        case LFUN_LINE_BEGIN:
@@ -2598,48 +2661,10 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_SERVER_GET_XY:
        case LFUN_SERVER_SET_XY:
        case LFUN_SERVER_GET_LAYOUT:
-       case LFUN_LAYOUT:
        case LFUN_SELF_INSERT:
-       case LFUN_FONT_DEFAULT:
-       case LFUN_FONT_UNDERLINE:
-       case LFUN_FONT_STRIKEOUT:
-       case LFUN_FONT_UULINE:
-       case LFUN_FONT_UWAVE:
-       case LFUN_FONT_SIZE:
-       case LFUN_TEXTSTYLE_APPLY:
-       case LFUN_TEXTSTYLE_UPDATE:
-       case LFUN_LAYOUT_PARAGRAPH:
-       case LFUN_PARAGRAPH_UPDATE:
-       case LFUN_ACCENT_UMLAUT:
-       case LFUN_ACCENT_CIRCUMFLEX:
-       case LFUN_ACCENT_GRAVE:
-       case LFUN_ACCENT_ACUTE:
-       case LFUN_ACCENT_TILDE:
-       case LFUN_ACCENT_CEDILLA:
-       case LFUN_ACCENT_MACRON:
-       case LFUN_ACCENT_DOT:
-       case LFUN_ACCENT_UNDERDOT:
-       case LFUN_ACCENT_UNDERBAR:
-       case LFUN_ACCENT_CARON:
-       case LFUN_ACCENT_BREVE:
-       case LFUN_ACCENT_TIE:
-       case LFUN_ACCENT_HUNGARIAN_UMLAUT:
-       case LFUN_ACCENT_CIRCLE:
-       case LFUN_ACCENT_OGONEK:
+       case LFUN_UNICODE_INSERT:
        case LFUN_THESAURUS_ENTRY:
-       case LFUN_PARAGRAPH_PARAMS_APPLY:
-       case LFUN_PARAGRAPH_PARAMS:
        case LFUN_ESCAPE:
-       case LFUN_BUFFER_BEGIN:
-       case LFUN_BUFFER_END:
-       case LFUN_BUFFER_BEGIN_SELECT:
-       case LFUN_BUFFER_END_SELECT:
-       case LFUN_INSET_BEGIN:
-       case LFUN_INSET_END:
-       case LFUN_INSET_BEGIN_SELECT:
-       case LFUN_INSET_END_SELECT:
-       case LFUN_INSET_SELECT_ALL:
-       case LFUN_UNICODE_INSERT:
                // these are handled in our dispatch()
                enable = true;
                break;
@@ -2654,48 +2679,6 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                || cur.paragraph().layout().pass_thru))
                enable = false;
 
-       switch (cmd.action) {
-       case LFUN_ACCENT_ACUTE:
-       case LFUN_ACCENT_BREVE:
-       case LFUN_ACCENT_CARON:
-       case LFUN_ACCENT_CEDILLA:
-       case LFUN_ACCENT_CIRCLE:
-       case LFUN_ACCENT_CIRCUMFLEX:
-       case LFUN_ACCENT_DOT:
-       case LFUN_ACCENT_GRAVE:
-       case LFUN_ACCENT_HUNGARIAN_UMLAUT:
-       case LFUN_ACCENT_MACRON:
-       case LFUN_ACCENT_OGONEK:
-       case LFUN_ACCENT_TIE:
-       case LFUN_ACCENT_TILDE:
-       case LFUN_ACCENT_UMLAUT:
-       case LFUN_ACCENT_UNDERBAR:
-       case LFUN_ACCENT_UNDERDOT:
-       case LFUN_FONT_BOLD:
-       case LFUN_FONT_BOLDSYMBOL:
-       case LFUN_FONT_TYPEWRITER:
-       case LFUN_FONT_DEFAULT:
-       case LFUN_FONT_EMPH:
-       case LFUN_FONT_NOUN:
-       case LFUN_FONT_ROMAN:
-       case LFUN_FONT_SANS:
-       case LFUN_FONT_FRAK:
-       case LFUN_FONT_ITAL:
-       case LFUN_FONT_SIZE:
-       case LFUN_FONT_STATE:
-       case LFUN_FONT_UNDERLINE:
-       case LFUN_FONT_STRIKEOUT:
-       case LFUN_FONT_UULINE:
-       case LFUN_FONT_UWAVE:
-       case LFUN_TEXTSTYLE_APPLY:
-       case LFUN_TEXTSTYLE_UPDATE:
-               if (cur.inset().getLayout().isPassThru())
-                       enable = false;
-               break;
-       default:
-               break;
-       }
-
        flag.setEnabled(enable);
        return true;
 }