From b88ed81e7f1d2f59bb606351d95e093380b4eead Mon Sep 17 00:00:00 2001 From: Pavel Sanda Date: Thu, 8 Feb 2018 21:33:37 +0100 Subject: [PATCH] Unify graphics-groups inside marked block functionality. Fixes #11026. https://www.mail-archive.com/lyx-devel@lists.lyx.org/msg203683.html --- lib/ui/stdcontext.inc | 1 + src/BufferView.cpp | 45 +++++++++++++++++++++++++++++++++++++++++++ src/FuncCode.h | 3 ++- src/LyXAction.cpp | 11 +++++++++++ 4 files changed, 59 insertions(+), 1 deletion(-) 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 b2e3186b17..ad8ed46e58 100644 --- a/src/BufferView.cpp +++ b/src/BufferView.cpp @@ -1151,6 +1151,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())); @@ -1697,6 +1701,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 193c822cd2..a4bc7d1fad 100644 --- a/src/LyXAction.cpp +++ b/src/LyXAction.cpp @@ -3555,6 +3555,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