Unify graphics-groups inside marked block functionality.

Fixes #11026.

https://www.mail-archive.com/lyx-devel@lists.lyx.org/msg203683.html
This commit is contained in:
Pavel Sanda 2018-02-08 21:33:37 +01:00
parent c8230ab0d0
commit e836cc0aac
4 changed files with 59 additions and 1 deletions

View File

@ -358,6 +358,7 @@ Menuset
Item "Apply Last Text Style|A" "textstyle-apply" Item "Apply Last Text Style|A" "textstyle-apply"
Submenu "Text Style|x" "edit_textstyles" Submenu "Text Style|x" "edit_textstyles"
Item "Paragraph Settings...|P" "layout-paragraph" Item "Paragraph Settings...|P" "layout-paragraph"
OptItem "Unify Graphics Groups|U" "graphics-unify"
LanguageSelector LanguageSelector
Separator Separator
Item "Fullscreen Mode" "ui-toggle fullscreen" Item "Fullscreen Mode" "ui-toggle fullscreen"

View File

@ -1134,6 +1134,10 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag)
flag.setEnabled(true); flag.setEnabled(true);
break; break;
case LFUN_GRAPHICS_UNIFY:
flag.setEnabled(cur.selection());
break;
case LFUN_WORD_FINDADV: { case LFUN_WORD_FINDADV: {
FindAndReplaceOptions opt; FindAndReplaceOptions opt;
istringstream iss(to_utf8(cmd.argument())); istringstream iss(to_utf8(cmd.argument()));
@ -1655,6 +1659,47 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr)
break; break;
} }
case LFUN_GRAPHICS_UNIFY: {
cur.recordUndoFullBuffer();
DocIterator from, to;
from = cur.selectionBegin();
to = cur.selectionEnd();
string newId = cmd.getArg(0);
bool fetchId=newId.empty(); //if we wait for groupId from first graphics inset
InsetGraphicsParams grp_par;
InsetGraphics::string2params(graphics::getGroupParams(buffer_, newId), buffer_, grp_par);
if (!from.nextInset()) //move to closest inset
from.forwardInset();
while (!from.empty() && from < to) {
Inset * inset = from.nextInset();
if (!inset)
break;
if (inset->lyxCode() == GRAPHICS_CODE) {
InsetGraphics * ig = inset->asInsetGraphics();
if (!ig)
break;
InsetGraphicsParams inspar = ig->getParams();
if (fetchId) {
grp_par = inspar;
fetchId = false;
} else {
grp_par.filename = inspar.filename;
ig->setParams(grp_par);
}
}
from.forwardInset();
}
dr.screenUpdate(Update::Force); //needed if triggered from context menu
break;
}
case LFUN_STATISTICS: { case LFUN_STATISTICS: {
DocIterator from, to; DocIterator from, to;
if (cur.selection()) { if (cur.selection()) {

View File

@ -476,7 +476,8 @@ enum FuncCode
LFUN_DEVEL_MODE_TOGGLE, // lasgouttes 20170723 LFUN_DEVEL_MODE_TOGGLE, // lasgouttes 20170723
//370 //370
LFUN_EXPORT_CANCEL, // rgh, 20171227 LFUN_EXPORT_CANCEL, // rgh, 20171227
LFUN_BUFFER_ANONYMIZE, // sanda, 20180201 LFUN_BUFFER_ANONYMIZE, // sanda, 20180201
LFUN_GRAPHICS_UNIFY, // sanda, 20180207
LFUN_LASTACTION // end of the table LFUN_LASTACTION // end of the table
}; };

View File

@ -3545,6 +3545,17 @@ void LyXAction::init()
*/ */
{ LFUN_SET_GRAPHICS_GROUP, "set-graphics-group", Noop, Edit }, { LFUN_SET_GRAPHICS_GROUP, "set-graphics-group", Noop, Edit },
/*!
* \var lyx::FuncCode lyx::LFUN_GRAPHICS_UNIFY
* \li Action: Set the same group for all graphics insets in the marked block.
* \li Syntax: graphics-unify [<GROUP>]
* \li Params: <GROUP>: Id for an existing group. In case the Id is an empty string,
the group Id from the first graphics inset will be used.
* \li Origin: sanda, 7 Feb 2018
* \endvar
*/
{ LFUN_GRAPHICS_UNIFY, "graphics-unify", Noop, Edit },
/*! /*!
* \var lyx::FuncCode lyx::LFUN_SPACE_INSERT * \var lyx::FuncCode lyx::LFUN_SPACE_INSERT