AutoInsert option also for flex insets

This commit is contained in:
Juergen Spitzmueller 2012-12-17 13:32:40 +01:00
parent 01a6d4252b
commit e5ebe17b92
4 changed files with 44 additions and 4 deletions

View File

@ -10974,7 +10974,7 @@ Classic
\begin_layout Itemize
\change_inserted -712698321 1355661160
\change_inserted -712698321 1355747298
\begin_inset Flex Code
status collapsed
@ -11013,8 +11013,8 @@ status collapsed
\end_inset
, this argument is automatically inserted when the respective style is selected.
This option is currently only available for paragraph styles, not for InsetLayo
uts.
Currently, only one argument per style\SpecialChar \slash{}
layout can be automatically inserted.
\change_inserted 155139281 1354198988
\end_layout

View File

@ -1348,6 +1348,7 @@ InsetLayout Flex:Alert
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
AutoInsert 1
EndArgument
End
@ -1365,6 +1366,7 @@ InsetLayout Flex:Structure
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
AutoInsert 1
EndArgument
End
@ -1382,6 +1384,7 @@ InsetLayout Flex:Only
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
AutoInsert 1
EndArgument
End
@ -1399,6 +1402,7 @@ InsetLayout Flex:Uncover
Tooltip "Specify the overlay settings (see beamer manual)"
LeftDelim <
RightDelim >
AutoInsert 1
EndArgument
End

View File

@ -295,6 +295,8 @@ static bool doInsertInset(Cursor & cur, Text * text,
// Merge multiple paragraphs -- hack
while (cur.lastpit() > 0)
mergeParagraph(bparams, cur.text()->paragraphs(), 0);
if (cmd.action() == LFUN_FLEX_INSERT)
return true;
Cursor old = cur;
cur.leaveInset(*inset);
if (cmd.action() == LFUN_PREVIEW_INSERT
@ -1699,7 +1701,6 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
case LFUN_CAPTION_INSERT:
case LFUN_FOOTNOTE_INSERT:
case LFUN_NOTE_INSERT:
case LFUN_FLEX_INSERT:
case LFUN_BOX_INSERT:
case LFUN_BRANCH_INSERT:
case LFUN_PHANTOM_INSERT:
@ -1720,6 +1721,37 @@ void Text::dispatch(Cursor & cur, FuncRequest & cmd)
cur.forceBufferUpdate();
break;
case LFUN_FLEX_INSERT: {
// Open the inset, and move the current selection
// inside it.
bool const sel = cur.selection();
doInsertInset(cur, this, cmd, true, true);
// Insert auto-insert arguments
bool autoargs = false;
Layout::LaTeXArgMap args = cur.inset().getLayout().latexargs();
Layout::LaTeXArgMap::const_iterator lait = args.begin();
Layout::LaTeXArgMap::const_iterator const laend = args.end();
for (; lait != laend; ++lait) {
Layout::latexarg arg = (*lait).second;
if (arg.autoinsert) {
// The cursor might have been invalidated by the replaceSelection.
cur.buffer()->changed(true);
FuncRequest cmd(LFUN_ARGUMENT_INSERT, (*lait).first);
lyx::dispatch(cmd);
autoargs = true;
}
}
if (!autoargs) {
if (sel)
cur.leaveInset(cur.inset());
cur.posForward();
}
// Some insets are numbered, others are shown in the outline pane so
// let's update the labels and the toc backend.
cur.forceBufferUpdate();
break;
}
case LFUN_TABULAR_INSERT:
// if there were no arguments, just open the dialog
if (doInsertInset(cur, this, cmd, false, true))

View File

@ -511,6 +511,7 @@ void InsetLayout::readArgument(Lexer & lex)
{
Layout::latexarg arg;
arg.mandatory = false;
arg.autoinsert = false;
bool error = false;
bool finished = false;
arg.font = inherit_font;
@ -534,6 +535,9 @@ void InsetLayout::readArgument(Lexer & lex)
} else if (tok == "mandatory") {
lex.next();
arg.mandatory = lex.getBool();
} else if (tok == "autoinsert") {
lex.next();
arg.autoinsert = lex.getBool();
} else if (tok == "leftdelim") {
lex.next();
arg.ldelim = lex.getDocString();