]> git.lyx.org Git - lyx.git/blobdiff - src/Text3.cpp
* src/BufferView.cpp:
[lyx.git] / src / Text3.cpp
index 5926c31eabe801f408d98d9dd185f12dcb61e3f7..2ede8d0d5fa10e562cb046451c28af4c196a7803 100644 (file)
@@ -268,7 +268,7 @@ static void outline(OutlineOp mode, Cursor & cur)
 
        DocumentClass const & tc = buf.params().documentClass();
 
-       int const thistoclevel = start->layout()->toclevel;
+       int const thistoclevel = start->layout().toclevel;
        int toclevel;
 
        // Move out (down) from this section header
@@ -276,7 +276,7 @@ static void outline(OutlineOp mode, Cursor & cur)
                ++finish;
        // Seek the one (on same level) below
        for (; finish != end; ++finish) {
-               toclevel = finish->layout()->toclevel;
+               toclevel = finish->layout().toclevel;
                if (toclevel != Layout::NOT_IN_TOC && toclevel <= thistoclevel) {
                        break;
                }
@@ -291,7 +291,7 @@ static void outline(OutlineOp mode, Cursor & cur)
                        // Search previous same-level header above
                        do {
                                --dest;
-                               toclevel = dest->layout()->toclevel;
+                               toclevel = dest->layout().toclevel;
                        } while(dest != bgn
                                && (toclevel == Layout::NOT_IN_TOC
                                    || toclevel > thistoclevel));
@@ -324,16 +324,15 @@ static void outline(OutlineOp mode, Cursor & cur)
                        pit_type const len = distance(start, finish);
                        buf.undo().recordUndo(cur, ATOMIC_UNDO, pit, pit + len - 1);
                        for (; start != finish; ++start) {
-                               toclevel = start->layout()->toclevel;
+                               toclevel = start->layout().toclevel;
                                if (toclevel == Layout::NOT_IN_TOC)
                                        continue;
                                DocumentClass::const_iterator lit = tc.begin();
                                DocumentClass::const_iterator len = tc.end();
                                for (; lit != len; ++lit) {
-                                       LayoutPtr const & lt = *lit;
-                                       if (lt->toclevel == toclevel + 1 &&
-                                           start->layout()->labeltype == lt->labeltype) {
-                                               start->setLayout(lt);
+                                       if (lit->toclevel == toclevel + 1 &&
+                                           start->layout().labeltype == lit->labeltype) {
+                                               start->setLayout(*lit);
                                                break;
                                        }
                                }
@@ -344,16 +343,15 @@ static void outline(OutlineOp mode, Cursor & cur)
                        pit_type const len = distance(start, finish);
                        buf.undo().recordUndo(cur, ATOMIC_UNDO, pit, pit + len - 1);
                        for (; start != finish; ++start) {
-                               toclevel = start->layout()->toclevel;
+                               toclevel = start->layout().toclevel;
                                if (toclevel == Layout::NOT_IN_TOC)
                                        continue;
                                DocumentClass::const_iterator lit = tc.begin();
                                DocumentClass::const_iterator len = tc.end();
                                for (; lit != len; ++lit) {
-                                       LayoutPtr const & lt = *lit;
-                                       if (lt->toclevel == toclevel - 1 &&
-                                               start->layout()->labeltype == lt->labeltype) {
-                                                       start->setLayout(lt);
+                                       if (lit->toclevel == toclevel - 1 &&
+                                               start->layout().labeltype == lit->labeltype) {
+                                                       start->setLayout(*lit);
                                                        break;
                                        }
                                }
@@ -827,7 +825,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        /*
                        Paragraph & par = pars_[cur.pit()];
                        if (inset->lyxCode() == LABEL_CODE
-                               && par.layout()->labeltype == LABEL_COUNTER) {
+                               && par.layout().labeltype == LABEL_COUNTER) {
                                // Go to the end of the paragraph
                                // Warning: Because of Change-Tracking, the last
                                // position is 'size()' and not 'size()-1':
@@ -849,12 +847,20 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                needsUpdate |= dissolveInset(cur);
                break;
 
-       case LFUN_INSET_SETTINGS:
+       case LFUN_INSET_SETTINGS: {
+               // if there is an inset at cursor, access this
+               Inset * inset = cur.nextInset();
+               if (inset) {
+                       inset->showInsetDialog(bv);
+                       break;
+               }
+               // if not work, access the underlying inset.
                cur.inset().showInsetDialog(bv);
                break;
+       }
 
        case LFUN_SPACE_INSERT:
-               if (cur.paragraph().layout()->free_spacing)
+               if (cur.paragraph().layout().free_spacing)
                        insertChar(cur, ' ');
                else {
                        doInsertInset(cur, this, cmd, false, false);
@@ -980,7 +986,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                break;
 
        case LFUN_SERVER_GET_LAYOUT:
-               cur.message(cur.paragraph().layout()->name());
+               cur.message(cur.paragraph().layout().name());
                break;
 
        case LFUN_LAYOUT: {
@@ -988,7 +994,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                LYXERR(Debug::INFO, "LFUN_LAYOUT: (arg) " << to_utf8(layout));
 
                Paragraph const & para = cur.paragraph();
-               docstring const old_layout = para.layout()->name();
+               docstring const old_layout = para.layout().name();
                DocumentClass const & tclass = bv->buffer().params().documentClass();
 
                if (layout.empty())
@@ -1011,7 +1017,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
 
                // If the entry is obsolete, use the new one instead.
                if (hasLayout) {
-                       docstring const & obs = tclass[layout]->obsoleted_by();
+                       docstring const & obs = tclass[layout].obsoleted_by();
                        if (!obs.empty())
                                layout = obs;
                }
@@ -1030,7 +1036,7 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        pit_type spit = cur.selBegin().pit();
                        pit_type epit = cur.selEnd().pit() + 1;
                        while (spit != epit) {
-                               if (pars_[spit].layout()->name() != old_layout) {
+                               if (pars_[spit].layout().name() != old_layout) {
                                        change_layout = true;
                                        break;
                                }
@@ -1075,8 +1081,8 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                Paragraph & par = cur.paragraph();
                pos_type pos = cur.pos();
                BufferParams const & bufparams = bv->buffer().params();
-               LayoutPtr const & style = par.layout();
-               if (!style->pass_thru
+               Layout const & style = par.layout();
+               if (!style.pass_thru
                    && par.getFontSettings(bufparams, pos).language()->lang() != "hebrew") {
                        // this avoids a double undo
                        // FIXME: should not be needed, ideally
@@ -1092,14 +1098,9 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
                        else
                                c = par.getChar(pos - 1);
                        string arg = to_utf8(cmd.argument());
-                       if (arg == "single")
-                               cur.insert(new InsetQuotes(c,
-                                   bufparams.quotes_language,
-                                   InsetQuotes::SingleQ));
-                       else
-                               cur.insert(new InsetQuotes(c,
-                                   bufparams.quotes_language,
-                                   InsetQuotes::DoubleQ));
+                       cur.insert(new InsetQuotes(c, bufparams.quotes_language,
+                               (arg == "single") ? InsetQuotes::SingleQuotes
+                                       : InsetQuotes::DoubleQuotes));
                        cur.posForward();
                }
                else
@@ -1415,7 +1416,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
        case LFUN_INDEX_PRINT:
        case LFUN_NOMENCL_PRINT:
        case LFUN_TOC_INSERT:
-       case LFUN_HFILL_INSERT:
        case LFUN_LINE_INSERT:
        case LFUN_NEWPAGE_INSERT:
        case LFUN_PAGEBREAK_INSERT:
@@ -1834,7 +1834,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                return true;
 
        case LFUN_BIBITEM_INSERT:
-               enable = (cur.paragraph().layout()->labeltype == LABEL_BIBLIO
+               enable = (cur.paragraph().layout().labeltype == LABEL_BIBLIO
                          && cur.pos() == 0);
                break;
 
@@ -1871,6 +1871,8 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                        code = NOTE_CODE;
                else if (cmd.argument() == "ref")
                        code = REF_CODE;
+               else if (cmd.argument() == "space")
+                       code = SPACE_CODE;
                else if (cmd.argument() == "toc")
                        code = TOC_CODE;
                else if (cmd.argument() == "vspace")
@@ -1885,7 +1887,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                code = ERT_CODE;
                break;
        case LFUN_LISTING_INSERT:
-           code = LISTINGS_CODE;
+               code = LISTINGS_CODE;
                break;
        case LFUN_FOOTNOTE_INSERT:
                code = FOOT_CODE;
@@ -1916,6 +1918,9 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                break;
        case LFUN_NOTE_INSERT:
                code = NOTE_CODE;
+               // in commands (sections etc., only Notes are allowed)
+               enable = (cmd.argument().empty() || cmd.getArg(0) == "Note" ||
+                         !cur.paragraph().layout().isCommand());
                break;
        case LFUN_FLEX_INSERT: {
                code = FLEX_CODE;
@@ -1946,7 +1951,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_OPTIONAL_INSERT:
                code = OPTARG_CODE;
                enable = cur.paragraph().insetList().count(OPTARG_CODE)
-                       < cur.paragraph().layout()->optionalargs;
+                       < cur.paragraph().layout().optionalargs;
                break;
        case LFUN_ENVIRONMENT_INSERT:
                code = BOX_CODE;
@@ -1973,7 +1978,6 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
                // always allow this, since we will inset a raw quote
                // if an inset is not allowed.
                break;
-       case LFUN_HFILL_INSERT:
        case LFUN_SPECIALCHAR_INSERT:
                code = SPECIALCHAR_CODE;
                break;
@@ -2094,7 +2098,7 @@ bool Text::getStatus(Cursor & cur, FuncRequest const & cmd,
        case LFUN_OUTLINE_DOWN:
        case LFUN_OUTLINE_IN:
        case LFUN_OUTLINE_OUT:
-               enable = (cur.paragraph().layout()->toclevel != Layout::NOT_IN_TOC);
+               enable = (cur.paragraph().layout().toclevel != Layout::NOT_IN_TOC);
                break;
 
        case LFUN_WORD_DELETE_FORWARD: