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
+ if (finish != end)
+ ++finish;
+ // Seek the one (on same level) below
+ for (; finish != end; ++finish) {
+ toclevel = finish->layout().toclevel;
+ if (toclevel != Layout::NOT_IN_TOC && toclevel <= thistoclevel) {
+ break;
+ }
+ }
+
switch (mode) {
case OutlineUp: {
- // Move out (down) from this section header
- if (finish != end)
- ++finish;
- // Seek the one (on same level) below
- for (; finish != end; ++finish) {
- toclevel = finish->layout()->toclevel;
- if (toclevel != Layout::NOT_IN_TOC
- && toclevel <= thistoclevel) {
- break;
- }
- }
ParagraphList::iterator dest = start;
// Move out (up) from this header
if (dest == bgn)
- break;
+ return;
// 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));
// Not found; do nothing
if (toclevel == Layout::NOT_IN_TOC || toclevel > thistoclevel)
- break;
+ return;
pit_type const newpit = distance(bgn, dest);
pit_type const len = distance(start, finish);
pit_type const deletepit = pit + len;
start = boost::next(pars.begin(), deletepit);
pit = newpit;
pars.erase(start, finish);
- break;
+ return;
}
case OutlineDown: {
- // Go down out of current header:
- if (finish != end)
- ++finish;
- // Find next same-level header:
- for (; finish != end; ++finish) {
- toclevel = finish->layout()->toclevel;
- if (toclevel != Layout::NOT_IN_TOC && toclevel <= thistoclevel)
- break;
- }
ParagraphList::iterator dest = finish;
- // Go one down from *this* header:
- if (dest != end)
- ++dest;
- else
- break;
- // Go further down to find header to insert in front of:
- for (; dest != end; ++dest) {
- toclevel = dest->layout()->toclevel;
- if (toclevel != Layout::NOT_IN_TOC && toclevel <= thistoclevel)
- break;
- }
// One such was found:
pit_type newpit = distance(bgn, dest);
pit_type const len = distance(start, finish);
start = boost::next(bgn, pit);
pit = newpit - len;
pars.erase(start, finish);
- break;
+ return;
}
- case OutlineIn:
- buf.undo().recordUndo(cur);
- for (size_t i = 0; i != tc.layoutCount(); ++i) {
- LayoutPtr const & lt = tc.layout(i);
- if (lt->toclevel == thistoclevel + 1 &&
- start->layout()->labeltype == lt->labeltype) {
- start->setLayout(lt);
- break;
+ case OutlineIn: {
+ 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;
+ if (toclevel == Layout::NOT_IN_TOC)
+ continue;
+ DocumentClass::const_iterator lit = tc.begin();
+ DocumentClass::const_iterator len = tc.end();
+ for (; lit != len; ++lit) {
+ if (lit->toclevel == toclevel + 1 &&
+ start->layout().labeltype == lit->labeltype) {
+ start->setLayout(*lit);
+ break;
+ }
}
}
- break;
- case OutlineOut:
- buf.undo().recordUndo(cur);
- for (size_t i = 0; i != tc.layoutCount(); ++i) {
- LayoutPtr const & lt = tc.layout(i);
- if (lt->toclevel == thistoclevel - 1 &&
- start->layout()->labeltype == lt->labeltype) {
- start->setLayout(lt);
- break;
+ return;
+ }
+ case OutlineOut: {
+ 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;
+ if (toclevel == Layout::NOT_IN_TOC)
+ continue;
+ DocumentClass::const_iterator lit = tc.begin();
+ DocumentClass::const_iterator len = tc.end();
+ for (; lit != len; ++lit) {
+ if (lit->toclevel == toclevel - 1 &&
+ start->layout().labeltype == lit->labeltype) {
+ start->setLayout(*lit);
+ break;
+ }
}
}
- break;
- default:
- break;
+ return;
+ }
}
}
needsUpdate |= cursorDownParagraph(cur);
break;
- case LFUN_SCREEN_UP_SELECT:
- needsUpdate |= cur.selHandle(true);
- if (cur.pit() == 0 && cur.textRow().pos() == 0)
- cur.undispatched();
- else {
- tm.cursorPrevious(cur);
- }
- break;
-
- case LFUN_SCREEN_DOWN_SELECT:
- needsUpdate |= cur.selHandle(true);
- if (cur.pit() == cur.lastpit()
- && cur.textRow().endpos() == cur.lastpos())
- cur.undispatched();
- else {
- tm.cursorNext(cur);
- }
- break;
-
case LFUN_LINE_BEGIN:
case LFUN_LINE_BEGIN_SELECT:
needsUpdate |= cur.selHandle(cmd.action == LFUN_LINE_BEGIN_SELECT);
/*
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':
*/
if (cur.selection())
cutSelection(cur, true, false);
- insertInset(cur, inset);
+ cur.insert(inset);
cur.posForward();
}
break;
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);
pasteFromStack(cur, bv->buffer().errorList("Paste"),
convert<unsigned int>(arg));
} else {
- Clipboard::GraphicsType type;
+ Clipboard::GraphicsType type = Clipboard::AnyGraphicsType;
if (arg == "pdf")
type = Clipboard::PdfGraphicsType;
else if (arg == "png")
break;
case LFUN_SERVER_GET_LAYOUT:
- cur.message(cur.paragraph().layout()->name());
+ cur.message(cur.paragraph().layout().name());
break;
case LFUN_LAYOUT: {
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())
// 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;
}
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;
}
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
else
c = par.getChar(pos - 1);
string arg = to_utf8(cmd.argument());
- InsetQuotes * iq;
- if (arg == "single")
- iq = new InsetQuotes(c, bufparams.quotes_language,
- InsetQuotes::SingleQ);
- else
- iq = new InsetQuotes(c, bufparams.quotes_language,
- InsetQuotes::DoubleQ);
- iq->setBuffer(bv->buffer());
- cur.insert(iq);
+ cur.insert(new InsetQuotes(c, bufparams.quotes_language,
+ (arg == "single") ? InsetQuotes::SingleQuotes
+ : InsetQuotes::DoubleQuotes));
cur.posForward();
}
else
}
#if 0
case LFUN_LIST_INSERT:
- case LFUN_THEOREM_INSERT:
#endif
case LFUN_CAPTION_INSERT:
case LFUN_FOOTNOTE_INSERT:
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:
return true;
case LFUN_BIBITEM_INSERT:
- enable = (cur.paragraph().layout()->labeltype == LABEL_BIBLIO
+ enable = (cur.paragraph().layout().labeltype == LABEL_BIBLIO
&& cur.pos() == 0);
break;
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")
code = ERT_CODE;
break;
case LFUN_LISTING_INSERT:
- code = LISTINGS_CODE;
+ code = LISTINGS_CODE;
break;
case LFUN_FOOTNOTE_INSERT:
code = FOOT_CODE;
case LFUN_LIST_INSERT:
code = LIST_CODE;
break;
- case LFUN_THEOREM_INSERT:
- code = THEOREM_CODE;
- break;
#endif
case LFUN_CAPTION_INSERT:
code = CAPTION_CODE;
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;
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;
// 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;
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:
case LFUN_DOWN_SELECT:
case LFUN_PARAGRAPH_UP_SELECT:
case LFUN_PARAGRAPH_DOWN_SELECT:
- case LFUN_SCREEN_UP_SELECT:
- case LFUN_SCREEN_DOWN_SELECT:
case LFUN_LINE_BEGIN_SELECT:
case LFUN_LINE_END_SELECT:
case LFUN_WORD_FORWARD_SELECT: