Author: jghali
Date: Thu Oct 10 06:12:31 2019
New Revision: 23249

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23249
Log:
#15836: Undoing on Attach Text to Path returns a bigger selected Text Frame

Modified:
    trunk/Scribus/scribus/pageitem.cpp
    trunk/Scribus/scribus/scpage.cpp
    trunk/Scribus/scribus/scribusdoc.cpp
    trunk/Scribus/scribus/scribusdoc.h
    trunk/Scribus/scribus/selection.cpp
    trunk/Scribus/scribus/selection.h

Modified: trunk/Scribus/scribus/pageitem.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23249&path=/trunk/Scribus/scribus/pageitem.cpp
==============================================================================
--- trunk/Scribus/scribus/pageitem.cpp  (original)
+++ trunk/Scribus/scribus/pageitem.cpp  Thu Oct 10 06:12:31 2019
@@ -6849,8 +6849,9 @@
        QString fill(state->get("OLD_FILL"));
        if (!isUndo)
                fill = state->get("NEW_FILL");
-       select();
-       m_Doc->itemSelection_SetItemBrush(fill);
+       Selection tempSelection(0, false);
+       tempSelection.addItem(this);
+       m_Doc->itemSelection_SetItemBrush(fill, &tempSelection);
 }
 
 void PageItem::restoreResTyp(SimpleState *state, bool isUndo)
@@ -6867,8 +6868,9 @@
        int shade = state->getInt("OLD_SHADE");
        if (!isUndo)
                shade = state->getInt("NEW_SHADE");
-       select();
-       m_Doc->itemSelection_SetItemBrushShade(shade);
+       Selection tempSelection(0, false);
+       tempSelection.addItem(this);
+       m_Doc->itemSelection_SetItemBrushShade(shade, &tempSelection);
 }
 
 void PageItem::restoreLineColor(SimpleState *state, bool isUndo)
@@ -6876,8 +6878,9 @@
        QString fill(state->get("OLD_COLOR"));
        if (!isUndo)
                fill = state->get("NEW_COLOR");
-       select();
-       m_Doc->itemSelection_SetItemPen(fill);
+       Selection tempSelection(0, false);
+       tempSelection.addItem(this);
+       m_Doc->itemSelection_SetItemPen(fill, &tempSelection);
 }
 
 void PageItem::restoreLineShade(SimpleState *state, bool isUndo)
@@ -6885,8 +6888,9 @@
        int shade = state->getInt("OLD_SHADE");
        if (!isUndo)
                shade = state->getInt("NEW_SHADE");
-       select();
-       m_Doc->itemSelection_SetItemPenShade(shade);
+       Selection tempSelection(0, false);
+       tempSelection.addItem(this);
+       m_Doc->itemSelection_SetItemPenShade(shade, &tempSelection);
 }
 
 void PageItem::restoreFillTP(SimpleState *state, bool isUndo)
@@ -6894,8 +6898,9 @@
        double tp = state->getDouble("OLD_TP");
        if (!isUndo)
                tp = state->getDouble("NEW_TP");
-       select();
-       m_Doc->itemSelection_SetItemFillTransparency(tp);
+       Selection tempSelection(0, false);
+       tempSelection.addItem(this);
+       m_Doc->itemSelection_SetItemFillTransparency(tp, &tempSelection);
 }
 
 void PageItem::restoreLineTP(SimpleState *state, bool isUndo)
@@ -6903,8 +6908,9 @@
        double tp = state->getDouble("OLD_TP");
        if (!isUndo)
                tp = state->getDouble("NEW_TP");
-       select();
-       m_Doc->itemSelection_SetItemLineTransparency(tp);
+       Selection tempSelection(0, false);
+       tempSelection.addItem(this);
+       m_Doc->itemSelection_SetItemLineTransparency(tp, &tempSelection);
 }
 
 
@@ -6913,8 +6919,9 @@
        Qt::PenStyle ps = static_cast<Qt::PenStyle>(state->getInt("OLD_STYLE"));
        if (!isUndo)
                ps = static_cast<Qt::PenStyle>(state->getInt("NEW_STYLE"));
-       select();
-       m_Doc->itemSelection_SetLineArt(ps);
+       Selection tempSelection(0, false);
+       tempSelection.addItem(this);
+       m_Doc->itemSelection_SetLineArt(ps, &tempSelection);
 }
 
 void PageItem::restoreLineEnd(SimpleState *state, bool isUndo)
@@ -6922,8 +6929,9 @@
        Qt::PenCapStyle pcs = 
static_cast<Qt::PenCapStyle>(state->getInt("OLD_STYLE"));
        if (!isUndo)
                pcs = static_cast<Qt::PenCapStyle>(state->getInt("NEW_STYLE"));
-       select();
-       m_Doc->itemSelection_SetLineEnd(pcs);
+       Selection tempSelection(0, false);
+       tempSelection.addItem(this);
+       m_Doc->itemSelection_SetLineEnd(pcs, &tempSelection);
 }
 
 void PageItem::restoreLineJoin(SimpleState *state, bool isUndo)
@@ -6931,8 +6939,9 @@
        Qt::PenJoinStyle pjs = 
static_cast<Qt::PenJoinStyle>(state->getInt("OLD_STYLE"));
        if (!isUndo)
                pjs = static_cast<Qt::PenJoinStyle>(state->getInt("NEW_STYLE"));
-       select();
-       m_Doc->itemSelection_SetLineJoin(pjs);
+       Selection tempSelection(0, false);
+       tempSelection.addItem(this);
+       m_Doc->itemSelection_SetLineJoin(pjs, &tempSelection);
 }
 
 void PageItem::restoreLineWidth(SimpleState *state, bool isUndo)
@@ -6940,8 +6949,9 @@
        double w = state->getDouble("OLD_LINEWIDTH");
        if (!isUndo)
                w = state->getDouble("NEW_LINEWIDTH");
-       select();
-       m_Doc->itemSelection_SetLineWidth(w);
+       Selection tempSelection(0, false);
+       tempSelection.addItem(this);
+       m_Doc->itemSelection_SetLineWidth(w, &tempSelection);
 }
 
 void PageItem::restoreCustomLineStyle(SimpleState *state, bool isUndo)

Modified: trunk/Scribus/scribus/scpage.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23249&path=/trunk/Scribus/scribus/scpage.cpp
==============================================================================
--- trunk/Scribus/scribus/scpage.cpp    (original)
+++ trunk/Scribus/scribus/scpage.cpp    Thu Oct 10 06:12:31 2019
@@ -384,11 +384,11 @@
        if (isUndo)
        {
                //CB #3373 reinsert at old position and renumber items
-               PageItem* ite = itemList.at(id2);
-               if (ite->Parent && ite->Parent->isGroup())
-                       ite->Parent->asGroupFrame()->groupItemList.insert(id, 
ite);
-               else
-                       m_Doc->Items->insert(id, ite);
+               PageItem* oldItem = itemList.at(id2);
+               if (oldItem->Parent && oldItem->Parent->isGroup())
+                       
oldItem->Parent->asGroupFrame()->groupItemList.insert(id, oldItem);
+               else
+                       m_Doc->Items->insert(id, oldItem);
                for (int i = 0; i < itemList.count(); ++i)
                {
                        PageItem* ite = itemList.at(i);
@@ -428,10 +428,12 @@
                m_Doc->Items->replace(m_Doc->Items->indexOf(newItem), oldItem);
                oldItem->updatePolyClip();
                m_Doc->adjustItemSize(oldItem);
+               m_Doc->m_Selection->replaceItem(newItem, oldItem);
        }
        else
        {
                m_Doc->Items->replace(m_Doc->Items->indexOf(oldItem), newItem);
+               m_Doc->m_Selection->replaceItem(oldItem, newItem);
        }
        m_Doc->setMasterPageMode(oldMPMode);
 }
@@ -454,10 +456,12 @@
                m_Doc->adjustItemSize(oldItem);
                if (m_Doc->docPatterns.contains(patternName))
                        m_Doc->removePattern(patternName);
+               m_Doc->m_Selection->replaceItem(newItem, oldItem);
        }
        else
        {
                m_Doc->Items->replace(m_Doc->Items->indexOf(oldItem), newItem);
+               m_Doc->m_Selection->replaceItem(oldItem, newItem);
        }
        m_Doc->setMasterPageMode(oldMPMode);
 }

Modified: trunk/Scribus/scribus/scribusdoc.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23249&path=/trunk/Scribus/scribus/scribusdoc.cpp
==============================================================================
--- trunk/Scribus/scribus/scribusdoc.cpp        (original)
+++ trunk/Scribus/scribus/scribusdoc.cpp        Thu Oct 10 06:12:31 2019
@@ -7694,11 +7694,13 @@
 
 }
 
-void ScribusDoc::itemSelection_SetLineWidth(double w)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetLineWidth(double w, Selection* 
customSelection)
+{
+       Selection *itemSelection = (customSelection != nullptr) ? 
customSelection : m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
+
        UndoTransaction activeTransaction;
        m_updateManager.setUpdatesDisabled();
        if (UndoManager::undoEnabled() && selectedItemCount > 1)
@@ -7706,7 +7708,7 @@
                                                                                
                                  Um::IGroup, Um::LineWidth, "", 
Um::ILineStyle);
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               PageItem *currItem = m_Selection->itemAt(i);
+               PageItem *currItem = itemSelection->itemAt(i);
                QRectF oldRect = currItem->getVisualBoundingRect();
                //cb moved to setlinewidth
                //currItem->m_oldLineWidth = currItem->lineWidth();
@@ -7733,9 +7735,10 @@
 
 
 
-void ScribusDoc::itemSelection_SetLineArt(Qt::PenStyle w)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetLineArt(Qt::PenStyle w, Selection* 
customSelection)
+{
+       Selection* itemSelection = (customSelection != nullptr) ? 
customSelection : m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
        UndoTransaction activeTransaction;
@@ -7744,8 +7747,9 @@
                activeTransaction = 
m_undoManager->beginTransaction(Um::SelectionGroup, Um::IGroup, Um::LineStyle, 
"", Um::ILineStyle);
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               m_Selection->itemAt(i)->setLineStyle(w);
-               m_Selection->itemAt(i)->update();
+               PageItem* item = itemSelection->itemAt(i);
+               item->setLineStyle(w);
+               item->update();
        }
        if (activeTransaction)
                activeTransaction.commit();
@@ -7755,19 +7759,22 @@
 
 
 
-void ScribusDoc::itemSelection_SetLineJoin(Qt::PenJoinStyle w)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetLineJoin(Qt::PenJoinStyle w, Selection* 
customSelection)
+{
+       Selection* itemSelection = (customSelection != nullptr) ? 
customSelection : m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
+
        UndoTransaction activeTransaction;
        m_updateManager.setUpdatesDisabled();
        if (UndoManager::undoEnabled() && selectedItemCount > 1)
                activeTransaction = 
m_undoManager->beginTransaction(Um::SelectionGroup, Um::IGroup, Um::LineJoin, 
"", Um::ILineStyle);
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               m_Selection->itemAt(i)->setLineJoin(w);
-               m_Selection->itemAt(i)->update();
+               PageItem* item = itemSelection->itemAt(i);
+               item->setLineJoin(w);
+               item->update();
        }
        if (activeTransaction)
                activeTransaction.commit();
@@ -7777,19 +7784,22 @@
 
 
 
-void ScribusDoc::itemSelection_SetLineEnd(Qt::PenCapStyle w)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetLineEnd(Qt::PenCapStyle w, Selection* 
customSelection)
+{
+       Selection* itemSelection = (customSelection != nullptr) ? 
customSelection : m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
+
        UndoTransaction activeTransaction;
        m_updateManager.setUpdatesDisabled();
        if (UndoManager::undoEnabled() && selectedItemCount > 1)
                activeTransaction = 
m_undoManager->beginTransaction(Um::SelectionGroup, Um::IGroup, Um::LineEnd, 
"", Um::ILineStyle);
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               m_Selection->itemAt(i)->setLineEnd(w);
-               m_Selection->itemAt(i)->update();
+               PageItem* item = itemSelection->itemAt(i);
+               item->setLineEnd(w);
+               item->update();
        }
        if (activeTransaction)
                activeTransaction.commit();
@@ -7818,7 +7828,7 @@
        {
                if (!AddFont(font))
                {
-                       PageItem *currItem = m_Selection->itemAt(0);
+                       PageItem *currItem = itemSelection->itemAt(0);
                        newFont = currItem->currentCharStyle().font().scName();
                }
        }
@@ -7904,27 +7914,28 @@
 }
 
 
-void ScribusDoc::itemSelection_SetItemPen(QString farbe)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetItemPen(QString color, Selection* 
customSelection)
+{
+       Selection* itemSelection = (customSelection!=nullptr) ? customSelection 
: m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount <= 0)
                return;
 
        UndoTransaction activeTransaction;
        m_updateManager.setUpdatesDisabled();
-       if (farbe == CommonStrings::tr_NoneColor)
-               farbe = CommonStrings::None;
+       if (color == CommonStrings::tr_NoneColor)
+               color = CommonStrings::None;
        if (selectedItemCount > 1 && UndoManager::undoEnabled())
                activeTransaction = 
m_undoManager->beginTransaction(Um::SelectionGroup,
-                                                                               
                                        Um::IGroup, Um::SetLineColor, farbe, 
Um::IFill);
+                                                                               
                                        Um::IGroup, Um::SetLineColor, color, 
Um::IFill);
        PageItem *currItem;
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               currItem = m_Selection->itemAt(i);
-               if ((currItem->asLine()) && (farbe == CommonStrings::None))
+               currItem = itemSelection->itemAt(i);
+               if ((currItem->asLine()) && (color == CommonStrings::None))
                        continue;
 
-               currItem->setLineColor(farbe);
+               currItem->setLineColor(color);
                currItem->update();
        }
        if (activeTransaction)
@@ -8049,37 +8060,41 @@
        itemSelection_ApplyCharStyle(newStyle, customSelection, 
"OUTLINE_WIDTH");
 }
 
-void ScribusDoc::itemSelection_SetItemBrush(QString farbe)
-{
-       if (farbe == CommonStrings::tr_NoneColor)
-               farbe = CommonStrings::None;
-       int selectedItemCount = m_Selection->count();
-       if (selectedItemCount != 0)
-       {
-               UndoTransaction activeTransaction;
-               m_updateManager.setUpdatesDisabled();
-               if (selectedItemCount > 1 && UndoManager::undoEnabled())
-                       activeTransaction = 
m_undoManager->beginTransaction(Um::SelectionGroup,
-                                                                               
                                          Um::IGroup, Um::SetFill, farbe, 
Um::IFill);
-               PageItem *currItem;
-               for (int i = 0; i < selectedItemCount; ++i)
-               {
-                       currItem = m_Selection->itemAt(i);
-                       currItem->setFillColor(farbe);
-                       currItem->update();
-               }
-               if (activeTransaction)
-                       activeTransaction.commit();
-               m_updateManager.setUpdatesEnabled();
-               changed();
-       }
-}
-
-void ScribusDoc::itemSelection_SetItemBrushShade(int sha)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetItemBrush(QString colorName, Selection* 
customSelection)
+{
+       Selection* itemSelection = (customSelection!=nullptr) ? customSelection 
: m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
+
+       if (colorName == CommonStrings::tr_NoneColor)
+               colorName = CommonStrings::None;
+
+       UndoTransaction activeTransaction;
+       m_updateManager.setUpdatesDisabled();
+       if (selectedItemCount > 1 && UndoManager::undoEnabled())
+               activeTransaction = 
m_undoManager->beginTransaction(Um::SelectionGroup,
+                                                                               
                                        Um::IGroup, Um::SetFill, colorName, 
Um::IFill);
+       PageItem *currItem;
+       for (int i = 0; i < selectedItemCount; ++i)
+       {
+               currItem = itemSelection->itemAt(i);
+               currItem->setFillColor(colorName);
+               currItem->update();
+       }
+       if (activeTransaction)
+               activeTransaction.commit();
+       m_updateManager.setUpdatesEnabled();
+       changed();
+}
+
+void ScribusDoc::itemSelection_SetItemBrushShade(int sha, Selection* 
customSelection)
+{
+       Selection* itemSelection = (customSelection!=nullptr) ? customSelection 
: m_Selection;
+       int selectedItemCount = itemSelection->count();
+       if (selectedItemCount == 0)
+               return;
+
        UndoTransaction activeTransaction;
        m_updateManager.setUpdatesDisabled();
        if (UndoManager::undoEnabled() && selectedItemCount > 1)
@@ -8089,7 +8104,7 @@
        PageItem *currItem;
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               currItem = m_Selection->itemAt(i);
+               currItem = itemSelection->itemAt(i);
                currItem->setFillShade(sha);
                currItem->update();
        }
@@ -8099,11 +8114,13 @@
        changed();
 }
 
-void ScribusDoc::itemSelection_SetItemPenShade(int sha)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetItemPenShade(int sha, Selection* 
customSelection)
+{
+       Selection* itemSelection = (customSelection!=nullptr) ? customSelection 
: m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
+
        UndoTransaction activeTransaction;
        m_updateManager.setUpdatesDisabled();
        if (selectedItemCount > 1 && UndoManager::undoEnabled())
@@ -8112,7 +8129,7 @@
        PageItem *currItem;
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               currItem = m_Selection->itemAt(i);
+               currItem = itemSelection->itemAt(i);
                currItem->setLineShade(sha);
                currItem->update();
        }
@@ -8122,11 +8139,13 @@
        changed();
 }
 
-void ScribusDoc::itemSelection_SetItemGradMask(int typ)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetItemGradMask(int typ, Selection* 
customSelection)
+{
+       Selection* itemSelection = (customSelection!=nullptr) ? customSelection 
: m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
+
        UndoTransaction activeTransaction;
        m_updateManager.setUpdatesDisabled();
        PageItem *currItem;
@@ -8134,7 +8153,7 @@
                activeTransaction = 
m_undoManager->beginTransaction(Um::Selection,Um::IFill,Um::GradTypeMask,"",Um::IFill);
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               currItem = m_Selection->itemAt(i);
+               currItem = itemSelection->itemAt(i);
                currItem->setMaskType(typ);
                if ((typ > 0) && (typ < 9))
                        currItem->updateGradientVectors();
@@ -8146,19 +8165,21 @@
        changed();
 }
 
-void ScribusDoc::itemSelection_SetItemGradStroke(int typ)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetItemGradStroke(int typ, Selection* 
customSelection)
+{
+       Selection* itemSelection = (customSelection!=nullptr) ? customSelection 
: m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
+
        UndoTransaction activeTransaction;
        m_updateManager.setUpdatesDisabled();
        PageItem *currItem;
        if (UndoManager::undoEnabled())
-               activeTransaction = 
m_undoManager->beginTransaction(Um::Selection,Um::IFill,Um::GradTypeMask,"",Um::IFill);
+               activeTransaction = 
m_undoManager->beginTransaction(Um::Selection, Um::IFill, Um::GradTypeMask, "", 
Um::IFill);
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               currItem = m_Selection->itemAt(i);
+               currItem = itemSelection->itemAt(i);
                currItem->setStrokeGradientType(typ);
                if (currItem->strokeGradientType() == 0)
                {
@@ -8196,11 +8217,13 @@
        changed();
 }
 
-void ScribusDoc::itemSelection_SetItemGradFill(int typ)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetItemGradFill(int typ, Selection* 
customSelection)
+{
+       Selection* itemSelection = (customSelection!=nullptr) ? customSelection 
: m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
+
        UndoTransaction trans;
        m_updateManager.setUpdatesDisabled();
        PageItem *currItem;
@@ -8208,7 +8231,7 @@
                trans = 
m_undoManager->beginTransaction(Um::Selection,Um::IPolygon,Um::SetFill,"",Um::IFill);
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               currItem = m_Selection->itemAt(i);
+               currItem = itemSelection->itemAt(i);
                currItem->setGradientType(typ);
                switch (currItem->gradientType())
                {
@@ -8279,7 +8302,26 @@
        changed();
 }
 
-void ScribusDoc::itemSelection_SetItemPatternFill(const QString& pattern)
+void ScribusDoc::itemSelection_SetItemPatternFill(const QString& pattern, 
Selection* customSelection)
+{
+       Selection* itemSelection = (customSelection!=nullptr) ? customSelection 
: m_Selection;
+       int selectedItemCount = itemSelection->count();
+       if (selectedItemCount == 0)
+               return;
+
+       m_updateManager.setUpdatesDisabled();
+       PageItem *currItem;
+       for (int i = 0; i < selectedItemCount; ++i)
+       {
+               currItem = itemSelection->itemAt(i);
+               currItem->setPattern(pattern);
+               currItem->update();
+       }
+       m_updateManager.setUpdatesEnabled();
+       changed();
+}
+
+void ScribusDoc::itemSelection_SetItemPatternProps(double imageScaleX, double 
imageScaleY, double offsetX, double offsetY, double rotation, double skewX, 
double skewY, bool mirrorX, bool mirrorY)
 {
        int selectedItemCount = m_Selection->count();
        if (selectedItemCount == 0)
@@ -8289,110 +8331,103 @@
        for (int i = 0; i < selectedItemCount; ++i)
        {
                currItem = m_Selection->itemAt(i);
-               currItem->setPattern(pattern);
+               currItem->setPatternTransform(imageScaleX, imageScaleY, 
offsetX, offsetY, rotation, skewX, skewY);
+               currItem->setPatternFlip(mirrorX, mirrorY);
                currItem->update();
        }
        m_updateManager.setUpdatesEnabled();
        changed();
 }
 
-void ScribusDoc::itemSelection_SetItemPatternProps(double imageScaleX, double 
imageScaleY, double offsetX, double offsetY, double rotation, double skewX, 
double skewY, bool mirrorX, bool mirrorY)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetItemStrokePattern(const QString& pattern, 
Selection* customSelection)
+{
+       Selection* itemSelection = (customSelection!=nullptr) ? customSelection 
: m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
+
        m_updateManager.setUpdatesDisabled();
        PageItem *currItem;
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               currItem = m_Selection->itemAt(i);
-               currItem->setPatternTransform(imageScaleX, imageScaleY, 
offsetX, offsetY, rotation, skewX, skewY);
-               currItem->setPatternFlip(mirrorX, mirrorY);
+               currItem = itemSelection->itemAt(i);
+               currItem->setStrokePattern(pattern);
                currItem->update();
        }
        m_updateManager.setUpdatesEnabled();
        changed();
 }
 
-void ScribusDoc::itemSelection_SetItemStrokePattern(const QString& pattern)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetItemStrokePatternProps(double imageScaleX, 
double imageScaleY, double offsetX, double offsetY, double rotation, double 
skewX, double skewY, double space, bool mirrorX, bool mirrorY, Selection* 
customSelection)
+{
+       Selection* itemSelection = (customSelection!=nullptr) ? customSelection 
: m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
+
        m_updateManager.setUpdatesDisabled();
        PageItem *currItem;
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               currItem = m_Selection->itemAt(i);
-               currItem->setStrokePattern(pattern);
+               currItem = itemSelection->itemAt(i);
+               currItem->setStrokePatternTransform(imageScaleX, imageScaleY, 
offsetX, offsetY, rotation, skewX, skewY, space);
+               currItem->setStrokePatternFlip(mirrorX, mirrorY);
                currItem->update();
        }
        m_updateManager.setUpdatesEnabled();
        changed();
 }
 
-void ScribusDoc::itemSelection_SetItemStrokePatternProps(double imageScaleX, 
double imageScaleY, double offsetX, double offsetY, double rotation, double 
skewX, double skewY, double space, bool mirrorX, bool mirrorY)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetItemStrokePatternType(bool type, Selection* 
customSelection)
+{
+       Selection* itemSelection = (customSelection!=nullptr) ? customSelection 
: m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
+
        m_updateManager.setUpdatesDisabled();
        PageItem *currItem;
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               currItem = m_Selection->itemAt(i);
-               currItem->setStrokePatternTransform(imageScaleX, imageScaleY, 
offsetX, offsetY, rotation, skewX, skewY, space);
-               currItem->setStrokePatternFlip(mirrorX, mirrorY);
+               currItem = itemSelection->itemAt(i);
+               currItem->setStrokePatternToPath(type);
                currItem->update();
        }
        m_updateManager.setUpdatesEnabled();
        changed();
 }
 
-void ScribusDoc::itemSelection_SetItemStrokePatternType(bool type)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetItemPatternMask(const QString& pattern, 
Selection* customSelection)
+{
+       Selection* itemSelection = (customSelection!=nullptr) ? customSelection 
: m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
+
        m_updateManager.setUpdatesDisabled();
        PageItem *currItem;
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               currItem = m_Selection->itemAt(i);
-               currItem->setStrokePatternToPath(type);
+               currItem = itemSelection->itemAt(i);
+               currItem->setPatternMask(pattern);
                currItem->update();
        }
        m_updateManager.setUpdatesEnabled();
        changed();
 }
 
-void ScribusDoc::itemSelection_SetItemPatternMask(const QString& pattern)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetItemPatternMaskProps(double imageScaleX, 
double imageScaleY, double offsetX, double offsetY, double rotation, double 
skewX, double skewY, bool mirrorX, bool mirrorY, Selection* customSelection)
+{
+       Selection* itemSelection = (customSelection!=nullptr) ? customSelection 
: m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
+
        m_updateManager.setUpdatesDisabled();
        PageItem *currItem;
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               currItem = m_Selection->itemAt(i);
-               currItem->setPatternMask(pattern);
-               currItem->update();
-       }
-       m_updateManager.setUpdatesEnabled();
-       changed();
-}
-
-void ScribusDoc::itemSelection_SetItemPatternMaskProps(double imageScaleX, 
double imageScaleY, double offsetX, double offsetY, double rotation, double 
skewX, double skewY, bool mirrorX, bool mirrorY)
-{
-       int selectedItemCount = m_Selection->count();
-       if (selectedItemCount == 0)
-               return;
-       m_updateManager.setUpdatesDisabled();
-       PageItem *currItem;
-       for (int i = 0; i < selectedItemCount; ++i)
-       {
-               currItem = m_Selection->itemAt(i);
+               currItem = itemSelection->itemAt(i);
                currItem->setMaskTransform(imageScaleX, imageScaleY, offsetX, 
offsetY, rotation, skewX, skewY);
                currItem->setMaskFlip(mirrorX, mirrorY);
                currItem->update();
@@ -11470,14 +11505,16 @@
 }
 
 
-void ScribusDoc::itemSelection_SetItemFillTransparency(double t)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetItemFillTransparency(double t, Selection* 
customSelection)
+{
+       Selection* itemSelection = (customSelection!=nullptr) ? customSelection 
: m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
+
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               PageItem *currItem = m_Selection->itemAt(i);
+               PageItem *currItem = itemSelection->itemAt(i);
                if (currItem->isGroup())
                        continue;
                currItem->setFillTransparency(t);
@@ -11487,14 +11524,16 @@
 }
 
 
-void ScribusDoc::itemSelection_SetItemLineTransparency(double t)
-{
-       int selectedItemCount = m_Selection->count();
+void ScribusDoc::itemSelection_SetItemLineTransparency(double t, Selection* 
customSelection)
+{
+       Selection* itemSelection = (customSelection!=nullptr) ? customSelection 
: m_Selection;
+       int selectedItemCount = itemSelection->count();
        if (selectedItemCount == 0)
                return;
+
        for (int i = 0; i < selectedItemCount; ++i)
        {
-               PageItem *currItem = m_Selection->itemAt(i);
+               PageItem *currItem = itemSelection->itemAt(i);
                currItem->setLineTransparency(t);
        }
        regionsChanged()->update(QRectF());

Modified: trunk/Scribus/scribus/scribusdoc.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23249&path=/trunk/Scribus/scribus/scribusdoc.h
==============================================================================
--- trunk/Scribus/scribus/scribusdoc.h  (original)
+++ trunk/Scribus/scribus/scribusdoc.h  Thu Oct 10 06:12:31 2019
@@ -1073,10 +1073,10 @@
        void itemSelection_SetNamedCharStyle(const QString & name, Selection* 
customSelection = nullptr);
        void itemSelection_SetNamedLineStyle(const QString & name, Selection* 
customSelection = nullptr);
        void itemSelection_SetSoftShadow(bool has, QString color, double dx, 
double dy, double radius, int shade, double opac, int blend, bool erase, bool 
objopa);
-       void itemSelection_SetLineWidth(double w);
-       void itemSelection_SetLineArt(Qt::PenStyle w);
-       void itemSelection_SetLineJoin(Qt::PenJoinStyle w);
-       void itemSelection_SetLineEnd(Qt::PenCapStyle w);
+       void itemSelection_SetLineWidth(double w, Selection* customSelection = 
nullptr);
+       void itemSelection_SetLineArt(Qt::PenStyle w, Selection* 
customSelection = nullptr);
+       void itemSelection_SetLineJoin(Qt::PenJoinStyle w, Selection* 
customSelection = nullptr);
+       void itemSelection_SetLineEnd(Qt::PenCapStyle w, Selection* 
customSelection = nullptr);
        void itemSelection_SetAlignment(int w, Selection* customSelection = 
nullptr);
        void itemSelection_SetDirection(int w, Selection* customSelection = 
nullptr);
        void itemSelection_SetLineSpacing(double w, Selection* customSelection 
= nullptr);
@@ -1484,11 +1484,11 @@
        void itemSelection_TruncateItem(Selection* customSelection = nullptr);
        //! Delete the items in the current selection. When force is true, we 
do not warn the user and make SE happy too. Force is used from @sa 
Page::restorePageItemCreation
        void itemSelection_DeleteItem(Selection* customSelection = nullptr, 
bool forceDeletion=false);
-       void itemSelection_SetItemFillTransparency(double t);
+       void itemSelection_SetItemFillTransparency(double t, Selection* 
customSelection = nullptr);
        void itemSelection_SetHyphenWordMin(int wordMin, Selection* 
customSelection = nullptr);
        void itemSelection_SetHyphenConsecutiveLines(int consecutiveLines, 
Selection* customSelection = nullptr);
        void itemSelection_SetHyphenChar(uint hyphenChar, Selection* 
customSelection = nullptr);
-       void itemSelection_SetItemLineTransparency(double t);
+       void itemSelection_SetItemLineTransparency(double t, Selection* 
customSelection = nullptr);
        void itemSelection_SetItemFillBlend(int t);
        void itemSelection_SetItemLineBlend(int t);
        void itemSelection_SetLineGradient(VGradient& newGradient, Selection* 
customSelection = nullptr);
@@ -1554,20 +1554,20 @@
        void itemSelection_ApplyArrowHead(int startArrowID=-1, int 
endArrowID=-1, Selection* customSelection = nullptr);
        void itemSelection_ApplyArrowScale(int startArrowSc, int endArrowSc, 
Selection* customSelection);
 
-       void itemSelection_SetItemPen(QString farbe);
-       void itemSelection_SetItemPenShade(int sha);
-       void itemSelection_SetItemGradStroke(int typ);
-       void itemSelection_SetItemBrush(QString farbe);
-       void itemSelection_SetItemBrushShade(int sha);
-       void itemSelection_SetItemGradMask(int typ);
-       void itemSelection_SetItemGradFill(int typ);
-       void itemSelection_SetItemPatternFill(const QString& pattern);
+       void itemSelection_SetItemPen(QString color, Selection* customSelection 
= nullptr);
+       void itemSelection_SetItemPenShade(int sha, Selection* customSelection 
= nullptr);
+       void itemSelection_SetItemGradStroke(int typ, Selection* 
customSelection = nullptr);
+       void itemSelection_SetItemBrush(QString colorName, Selection* 
customSelection = nullptr);
+       void itemSelection_SetItemBrushShade(int sha, Selection* 
customSelection = nullptr);
+       void itemSelection_SetItemGradMask(int typ, Selection* customSelection 
= nullptr);
+       void itemSelection_SetItemGradFill(int typp, Selection* customSelection 
= nullptr);
+       void itemSelection_SetItemPatternFill(const QString& pattern, 
Selection* customSelection = nullptr);
        void itemSelection_SetItemPatternProps(double scaleX, double scaleY, 
double offsetX, double offsetY, double rotation, double skewX, double skewY, 
bool mirrorX, bool mirrorY);
-       void itemSelection_SetItemStrokePattern(const QString& pattern);
-       void itemSelection_SetItemStrokePatternProps(double scaleX, double 
scaleY, double offsetX, double offsetY, double rotation, double skewX, double 
skewY, double space, bool mirrorX, bool mirrorY);
-       void itemSelection_SetItemStrokePatternType(bool type);
-       void itemSelection_SetItemPatternMask(const QString& pattern);
-       void itemSelection_SetItemPatternMaskProps(double scaleX, double 
scaleY, double offsetX, double offsetY, double rotation, double skewX, double 
skewY, bool mirrorX, bool mirrorY);
+       void itemSelection_SetItemStrokePattern(const QString& pattern, 
Selection* customSelection = nullptr);
+       void itemSelection_SetItemStrokePatternProps(double scaleX, double 
scaleY, double offsetX, double offsetY, double rotation, double skewX, double 
skewY, double space, bool mirrorX, bool mirrorY, Selection* customSelection = 
nullptr);
+       void itemSelection_SetItemStrokePatternType(bool type, Selection* 
customSelection = nullptr);
+       void itemSelection_SetItemPatternMask(const QString& pattern, 
Selection* customSelection = nullptr);
+       void itemSelection_SetItemPatternMaskProps(double scaleX, double 
scaleY, double offsetX, double offsetY, double rotation, double skewX, double 
skewY, bool mirrorX, bool mirrorY, Selection* customSelection = nullptr);
 
        // Table related slots.
 

Modified: trunk/Scribus/scribus/selection.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23249&path=/trunk/Scribus/scribus/selection.cpp
==============================================================================
--- trunk/Scribus/scribus/selection.cpp (original)
+++ trunk/Scribus/scribus/selection.cpp Thu Oct 10 06:12:31 2019
@@ -154,7 +154,7 @@
                return ret;
        if (m_SelList.count() == 1)
        {
-               QPointer<PageItem> pi=m_SelList.first();
+               QPointer<PageItem> pi = m_SelList.first();
                //Quick check to see if the pointer is nullptr, if its nullptr, 
we should remove it from the list now
                if (pi.isNull())
                {
@@ -235,7 +235,7 @@
 {
        if (!m_SelList.isEmpty() && index<m_SelList.count())
        {
-               QPointer<PageItem> pi=m_SelList[index];
+               QPointer<PageItem> pi = m_SelList[index];
                //If not nullptr return it, otherwise remove from the list and 
return nullptr
                if (!pi.isNull())
                        return pi;
@@ -330,6 +330,17 @@
 
        bool itemsRemoved = (oldSelCount != m_SelList.count());
        return itemsRemoved;
+}
+
+void Selection::replaceItem(PageItem* oldItem, PageItem* newItem)
+{
+       delaySignalsOn();
+
+       int itemIndex = findItem(oldItem);
+       if (itemIndex >= 0)
+               m_SelList.replace(itemIndex, newItem);
+
+       delaySignalsOff();
 }
 
 PageItem* Selection::takeItem(int itemIndex)

Modified: trunk/Scribus/scribus/selection.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23249&path=/trunk/Scribus/scribus/selection.h
==============================================================================
--- trunk/Scribus/scribus/selection.h   (original)
+++ trunk/Scribus/scribus/selection.h   Thu Oct 10 06:12:31 2019
@@ -98,7 +98,7 @@
                 */
                bool removeItem(PageItem *item);
                /**
-                * \briefRemove items from specified layer
+                * \brief Remove items from specified layer
                 */
                bool removeItemsOfLayer(int layedID);
                /**
@@ -110,6 +110,12 @@
                 * \brief Unused
                 */
                bool removeGroup();
+
+               /**
+                * Replace item in selection by another
+                */
+               void replaceItem(PageItem* oldItem, PageItem* newItem);
+
                /**
                 * \brief Remove an item from list listNumber and return a 
pointer to it
                 * @param itemIndex Index of the item in the list


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to