diff --git a/lib/ui/stdcontext.inc b/lib/ui/stdcontext.inc index 3e490927be..9acf334562 100644 --- a/lib/ui/stdcontext.inc +++ b/lib/ui/stdcontext.inc @@ -358,6 +358,7 @@ Menuset Item "Apply Last Text Style|A" "textstyle-apply" Submenu "Text Style|x" "edit_textstyles" Item "Paragraph Settings...|P" "layout-paragraph" + OptItem "Unify Graphics Groups|U" "graphics-unify" LanguageSelector Separator Item "Fullscreen Mode" "ui-toggle fullscreen" diff --git a/src/BufferView.cpp b/src/BufferView.cpp index 36ac46cdde..edea2eb320 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -1134,6 +1134,10 @@ bool BufferView::getStatus(FuncRequest const & cmd, FuncStatus & flag) flag.setEnabled(true); break; + case LFUN_GRAPHICS_UNIFY: + flag.setEnabled(cur.selection()); + break; + case LFUN_WORD_FINDADV: { FindAndReplaceOptions opt; istringstream iss(to_utf8(cmd.argument())); @@ -1655,6 +1659,47 @@ void BufferView::dispatch(FuncRequest const & cmd, DispatchResult & dr) 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: { DocIterator from, to; if (cur.selection()) { diff --git a/src/FuncCode.h b/src/FuncCode.h index 4a5983147d..cce61f0df5 100644 --- a/src/FuncCode.h +++ b/src/FuncCode.h @@ -476,7 +476,8 @@ enum FuncCode LFUN_DEVEL_MODE_TOGGLE, // lasgouttes 20170723 //370 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 }; diff --git a/src/LyXAction.cpp b/src/LyXAction.cpp index 33d5100a82..871612ed4a 100644 --- a/src/LyXAction.cpp +++ b/src/LyXAction.cpp @@ -3545,6 +3545,17 @@ void LyXAction::init() */ { 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 [] + * \li Params: : 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