commit e836cc0aacb4a90e582690ca26f61fb94fbe8280
Author: Pavel Sanda <sa...@lyx.org>
Date:   Thu Feb 8 21:33:37 2018 +0100

    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 deletions(-)

diff --git a/lib/ui/stdcontext.inc b/lib/ui/stdcontext.inc
index 3e49092..9acf334 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 36ac46c..edea2eb 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 4a59831..cce61f0 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 33d5100..871612e 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 [<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

Reply via email to