Author: jghali
Date: Tue Sep  3 01:05:50 2019
New Revision: 23175

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23175
Log:
#15798 follow-up: when marking a layer as locked or invisible, remove from 
selection items of corresponding layers

Modified:
    trunk/Scribus/scribus/scribus.cpp
    trunk/Scribus/scribus/selection.cpp
    trunk/Scribus/scribus/selection.h
    trunk/Scribus/scribus/ui/layers.cpp
    trunk/Scribus/scribus/ui/layers.h
    trunk/Scribus/scribus/ui/outlinepalette.cpp

Modified: trunk/Scribus/scribus/scribus.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23175&path=/trunk/Scribus/scribus/scribus.cpp
==============================================================================
--- trunk/Scribus/scribus/scribus.cpp   (original)
+++ trunk/Scribus/scribus/scribus.cpp   Tue Sep  3 01:05:50 2019
@@ -4346,13 +4346,13 @@
        m_styleManager->setDoc(nullptr);
        marksManager->setDoc(nullptr);
        nsEditor->setDoc(nullptr);
-       layerPalette->ClearInhalt();
+       layerPalette->clearContent();
        docCheckerPalette->buildErrorList(nullptr);
        HaveDoc--;
        delete doc;
        doc = nullptr;
        ActWin = nullptr;
-       if ( HaveDoc == 0 )
+       if (HaveDoc == 0)
        {
                QString prefsDocDir( PrefsManager::instance().documentDir() );
                if ( QDir().exists(prefsDocDir) )

Modified: trunk/Scribus/scribus/selection.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23175&path=/trunk/Scribus/scribus/selection.cpp
==============================================================================
--- trunk/Scribus/scribus/selection.cpp (original)
+++ trunk/Scribus/scribus/selection.cpp Tue Sep  3 01:05:50 2019
@@ -276,49 +276,81 @@
 
 bool Selection::removeItem(PageItem *item)
 {
-    bool removeOk(false);
-       if (!m_SelList.isEmpty() && m_SelList.contains(item))
-       {
-               removeOk = (m_SelList.removeAll(item)==1);
-               if (removeOk)
-               {
-                       if (m_isGUISelection)
-                       {
-                               item->setSelected(false);
+       if (m_SelList.isEmpty() || !m_SelList.contains(item))
+               return false;
+
+       bool removeOk = (m_SelList.removeAll(item) == 1);
+       if (removeOk)
+       {
+               if (m_isGUISelection)
+               {
+                       item->setSelected(false);
+                       item->disconnectFromGUI();
+               }
+               item->isSingleSel = false;
+       }
+
+       if (m_isGUISelection)
+       {
+               m_sigSelectionChanged = true;
+               sendSignals();
+       }
+       return removeOk;
+}
+
+bool Selection::removeItemsOfLayer(int layedID)
+{
+       if (m_SelList.isEmpty())
+               return false;
+
+       int oldSelCount = m_SelList.count();
+
+       delaySignalsOn();
+       
+       int selIndex = 0;
+       while (selIndex < m_SelList.count())
+       {
+               QPointer<PageItem> pi = m_SelList.at(selIndex);
+               if (pi.isNull())
+               {
+                       removeItem(itemAt(selIndex));
+                       continue;
+               }
+
+               if (pi->m_layerID != layedID)
+               {
+                       ++selIndex;
+                       continue;
+               }
+
+               removeItem(itemAt(selIndex));
+       }
+
+       delaySignalsOff();
+
+       bool itemsRemoved = (oldSelCount != m_SelList.count());
+       return itemsRemoved;
+}
+
+PageItem* Selection::takeItem(int itemIndex)
+{
+       if (m_SelList.isEmpty() || itemIndex >= m_SelList.count())
+               return nullptr;
+
+       PageItem *item =  m_SelList[itemIndex];
+       bool removeOk = (m_SelList.removeAll(item) == 1);
+       if (removeOk)
+       {
+               item->isSingleSel = false;
+               if (m_isGUISelection)
+               {
+                       item->setSelected(false);
+                       m_sigSelectionChanged = true;
+                       if (itemIndex == 0)
                                item->disconnectFromGUI();
-                       }
-                       item->isSingleSel = false;
-               }
-
-               if (m_isGUISelection)
-               {
-                       m_sigSelectionChanged = true;
-                       sendSignals();
-               }
-               return removeOk;
-       }
-       return removeOk;
-}
-
-PageItem* Selection::takeItem(int itemIndex)
-{
-       if (!m_SelList.isEmpty() && itemIndex<m_SelList.count())
-       {
-               PageItem *item =  m_SelList[itemIndex];
-               bool removeOk = (m_SelList.removeAll(item) == 1);
-               if (removeOk)
-               {
-                       item->isSingleSel = false;
-                       if (m_isGUISelection)
-                       {
-                               item->setSelected(false);
-                               m_sigSelectionChanged = true;
-                               if (itemIndex == 0)
-                                       item->disconnectFromGUI();
-                       }
-                       sendSignals();
-                       return item;
-               }
+               }
+               sendSignals();
+               return item;
        }
        return nullptr;
 }

Modified: trunk/Scribus/scribus/selection.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23175&path=/trunk/Scribus/scribus/selection.h
==============================================================================
--- trunk/Scribus/scribus/selection.h   (original)
+++ trunk/Scribus/scribus/selection.h   Tue Sep  3 01:05:50 2019
@@ -97,6 +97,10 @@
                 * @param item page item
                 */
                bool removeItem(PageItem *item);
+               /**
+                * \briefRemove items from specified layer
+                */
+               bool removeItemsOfLayer(int layedID);
                /**
                 * \brief Remove the first item from the list
                 * @return If the remove was successful

Modified: trunk/Scribus/scribus/ui/layers.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23175&path=/trunk/Scribus/scribus/ui/layers.cpp
==============================================================================
--- trunk/Scribus/scribus/ui/layers.cpp (original)
+++ trunk/Scribus/scribus/ui/layers.cpp Tue Sep  3 01:05:50 2019
@@ -35,6 +35,7 @@
 #include "sccombobox.h"
 #include "scribus.h"
 #include "scribusdoc.h"
+#include "selection.h"
 #include "ui/scrspinbox.h"
 #include "undomanager.h"
 
@@ -145,7 +146,7 @@
        LayerPaletteLayout->addLayout( Layout1 );
        containerWidget->setLayout( LayerPaletteLayout );
        setWidget( containerWidget );
-       ClearInhalt();
+       clearContent();
        languageChange();
 
        connect(newLayerButton, SIGNAL(clicked()), this, SLOT(addLayer()));
@@ -159,7 +160,7 @@
        connect(header, SIGNAL(sectionClicked(int)), this, 
SLOT(toggleAllfromHeader(int)));
 }
 
-void LayerPalette::ClearInhalt()
+void LayerPalette::clearContent()
 {
        disconnect(blendMode, SIGNAL(activated(int)), this, 
SLOT(changeBlendMode(int)));
        disconnect(opacitySpinBox, SIGNAL(valueChanged(double)), this, 
SLOT(changeOpacity()));
@@ -191,7 +192,7 @@
                lowerLayerButton->setEnabled(false);
                markActiveLayer(0);
        }
-       layers=&m_Doc->Layers;
+       layers = &m_Doc->Layers;
        rebuildList();
 
        markActiveLayer(m_Doc->activeLayer());
@@ -338,11 +339,11 @@
 {
        if (!m_Doc)
                return;
-       int layerCount=m_Doc->layerCount();
+       int layerCount = m_Doc->layerCount();
        if (layerCount < 2)
                return;
        int level = layerCount-1-Table->currentRow();
-       int layerID=m_Doc->layerIDFromLevel(level);
+       int layerID = m_Doc->layerIDFromLevel(level);
        bool delToo = false;
        if (m_Doc->layerContainsItems(layerID))
        {
@@ -368,7 +369,7 @@
 {
        if (!m_Doc)
                return;
-       int layerCount=m_Doc->layerCount();
+       int layerCount = m_Doc->layerCount();
        if ((layerCount < 2) || (Table->currentRow() == 0))
                return;
        int layerLevel = layerCount-1-Table->currentRow();
@@ -384,7 +385,7 @@
 {
        if (!m_Doc)
                return;
-       int layerCount=m_Doc->layerCount();
+       int layerCount = m_Doc->layerCount();
        if ((layerCount < 2) || (Table->currentRow() == 
static_cast<int>(layerCount) - 1))
                return;
        int layerLevel = layerCount-1-Table->currentRow();
@@ -403,8 +404,8 @@
        if (col == 7)
        {
                int layerLevel = m_Doc->layerCount()-1-row;
-               int layerID=m_Doc->layerIDFromLevel(layerLevel);
-               if (layerID!=-1)
+               int layerID = m_Doc->layerIDFromLevel(layerLevel);
+               if (layerID != -1)
                        m_Doc->changeLayerName(layerID, Table->item(row, 
col)->text());
        }
        m_Doc->scMW()->changeLayer(m_Doc->activeLayer());
@@ -415,13 +416,16 @@
        if (!m_Doc)
                return;
        int level = QString(sender()->objectName()).toInt();
-       int layerID=m_Doc->layerIDFromLevel(level);
-       if (layerID==-1)
-               return;
-       const QObject* senderBox=sender();
+       int layerID = m_Doc->layerIDFromLevel(level);
+       if (layerID == -1)
+               return;
+       const QObject* senderBox = sender();
        if (strcmp(senderBox->metaObject()->className(), "QCheckBox") == 0)
        {
-               
m_Doc->setLayerVisible(layerID,((QCheckBox*)(senderBox))->isChecked());
+               bool isLayerVisible = ((QCheckBox*)(senderBox))->isChecked();
+               m_Doc->setLayerVisible(layerID, isLayerVisible);
+               if (!isLayerVisible)
+                       m_Doc->m_Selection->removeItemsOfLayer(layerID);
                setActiveLayer(Table->currentRow(), -1);
                emit LayerChanged();
        }
@@ -432,13 +436,13 @@
        if (!m_Doc)
                return;
        int level = QString(sender()->objectName()).toInt();
-       int layerID=m_Doc->layerIDFromLevel(level);
-       if (layerID==-1)
-               return;
-       const QObject* senderBox=sender();
+       int layerID = m_Doc->layerIDFromLevel(level);
+       if (layerID == -1)
+               return;
+       const QObject* senderBox = sender();
        if (strcmp(senderBox->metaObject()->className(), "QCheckBox") == 0)
        {
-               
m_Doc->setLayerPrintable(layerID,((QCheckBox*)(senderBox))->isChecked());
+               m_Doc->setLayerPrintable(layerID, 
((QCheckBox*)(senderBox))->isChecked());
                setActiveLayer(Table->currentRow(), -1);
                emit LayerChanged();
        }
@@ -449,14 +453,17 @@
        if (!m_Doc)
                return;
        int level = QString(sender()->objectName()).toInt();
-       int layerID=m_Doc->layerIDFromLevel(level);
-       if (layerID==-1)
-               return;
-       const QObject* senderBox=sender();
+       int layerID = m_Doc->layerIDFromLevel(level);
+       if (layerID == -1)
+               return;
+       const QObject* senderBox = sender();
        if (strcmp(senderBox->metaObject()->className(), "QCheckBox") == 0)
        {
-               
m_Doc->setLayerLocked(layerID,((QCheckBox*)(senderBox))->isChecked());
-               
deleteLayerButton->setEnabled(!((QCheckBox*)(senderBox))->isChecked());
+               bool isLayerLocked = ((QCheckBox*)(senderBox))->isChecked();
+               m_Doc->setLayerLocked(layerID, isLayerLocked);
+               if (isLayerLocked)
+                       m_Doc->m_Selection->removeItemsOfLayer(layerID);
+               deleteLayerButton->setEnabled(!isLayerLocked);
                setActiveLayer(Table->currentRow(), -1);
        }
        m_Doc->scMW()->changeLayer(m_Doc->activeLayer());
@@ -467,13 +474,13 @@
        if (!m_Doc)
                return;
        int level = QString(sender()->objectName()).toInt();
-       int layerID=m_Doc->layerIDFromLevel(level);
-       if (layerID==-1)
-               return;
-       const QObject* senderBox=sender();
+       int layerID = m_Doc->layerIDFromLevel(level);
+       if (layerID == -1)
+               return;
+       const QObject* senderBox = sender();
        if (strcmp(senderBox->metaObject()->className(), "QCheckBox") == 0)
        {
-               
m_Doc->setLayerFlow(layerID,((QCheckBox*)(senderBox))->isChecked());
+               m_Doc->setLayerFlow(layerID, 
((QCheckBox*)(senderBox))->isChecked());
                emit LayerChanged();
                setActiveLayer(Table->currentRow(), -1);
        }
@@ -484,13 +491,13 @@
        if (!m_Doc)
                return;
        int level = QString(sender()->objectName()).toInt();
-       int layerID=m_Doc->layerIDFromLevel(level);
-       if (layerID==-1)
-               return;
-       const QObject* senderBox=sender();
+       int layerID = m_Doc->layerIDFromLevel(level);
+       if (layerID == -1)
+               return;
+       const QObject* senderBox = sender();
        if (strcmp(senderBox->metaObject()->className(), "QCheckBox") == 0)
        {
-               
m_Doc->setLayerOutline(layerID,((QCheckBox*)(senderBox))->isChecked());
+               m_Doc->setLayerOutline(layerID, 
((QCheckBox*)(senderBox))->isChecked());
                emit LayerChanged();
                setActiveLayer(Table->currentRow(), -1);
        }
@@ -501,13 +508,14 @@
        if (!m_Doc)
                return;
        int level = QString(sender()->objectName()).toInt();
-       int layerID=m_Doc->layerIDFromLevel(level);
-       if (layerID==-1)
-               return;
-       const QObject* senderBox=sender();
+       int layerID = m_Doc->layerIDFromLevel(level);
+       if (layerID == -1)
+               return;
+       const QObject* senderBox = sender();
        if (strcmp(senderBox->metaObject()->className(), "QCheckBox") == 0)
        {
-               
m_Doc->setLayerSelectable(layerID,((QCheckBox*)(senderBox))->isChecked());
+               bool isLayerSelectable = ((QCheckBox*)(senderBox))->isChecked();
+               m_Doc->setLayerSelectable(layerID, isLayerSelectable);
                emit LayerChanged();
                setActiveLayer(Table->currentRow(), -1);
        }
@@ -556,10 +564,10 @@
        if (!m_Doc)
                return;
        int level = QString(sender()->objectName()).toInt();
-       int layerID=m_Doc->layerIDFromLevel(level);
-       if (layerID==-1)
-               return;
-       const QObject* senderBox=sender();
+       int layerID = m_Doc->layerIDFromLevel(level);
+       if (layerID == -1)
+               return;
+       const QObject* senderBox = sender();
        if (strcmp(senderBox->metaObject()->className(), "QToolButton") == 0)
        {
                QColor neu = QColor();
@@ -601,18 +609,18 @@
        disconnect(blendMode, SIGNAL(activated(int)), this, 
SLOT(changeBlendMode(int)));
        disconnect(opacitySpinBox, SIGNAL(valueChanged(double)), this, 
SLOT(changeOpacity()));
        disconnect(Table, SIGNAL(cellClicked(int, int)), this, 
SLOT(setActiveLayer(int, int)));
-       int layerToMark=layerID;
-       if (layerID==-1)
-               layerToMark=m_Doc->activeLayer();
+       int layerToMark = layerID;
+       if (layerID == -1)
+               layerToMark = m_Doc->activeLayer();
        
Table->setCurrentCell(m_Doc->layerCount()-1-m_Doc->layerLevelFromID(layerToMark),
 6);
        opacitySpinBox->setValue(qRound(m_Doc->layerTransparency(layerToMark) * 
100));
        blendMode->setCurrentIndex(m_Doc->layerBlendMode(layerToMark));
-       deleteLayerButton->setEnabled(m_Doc->layerCount()>1 && 
!m_Doc->layerLocked( m_Doc->activeLayer() ));
+       deleteLayerButton->setEnabled(m_Doc->layerCount() > 1 && 
!m_Doc->layerLocked( m_Doc->activeLayer() ));
                
-       if (layers->count()>1)
-       {
-               raiseLayerButton->setEnabled(Table->currentRow()!=0);
-               
lowerLayerButton->setEnabled(Table->currentRow()!=Table->rowCount()-1);
+       if (layers->count() > 1)
+       {
+               raiseLayerButton->setEnabled(Table->currentRow() != 0);
+               lowerLayerButton->setEnabled(Table->currentRow() != 
Table->rowCount() - 1);
        }
        else
        {
@@ -635,15 +643,15 @@
        }
        disconnect(blendMode, SIGNAL(activated(int)), this, 
SLOT(changeBlendMode(int)));
        disconnect(opacitySpinBox, SIGNAL(valueChanged(double)), this, 
SLOT(changeOpacity()));
-       int layerID=m_Doc->layerIDFromLevel(m_Doc->layerCount()-1-row);
+       int layerID = m_Doc->layerIDFromLevel(m_Doc->layerCount()-1-row);
        bool found=m_Doc->setActiveLayer(layerID);
        if (found)
        {
                m_Doc->scMW()->changeLayer(m_Doc->activeLayer());
                
opacitySpinBox->setValue(qRound(m_Doc->layerTransparency(m_Doc->activeLayer()) 
* 100));
                
blendMode->setCurrentIndex(m_Doc->layerBlendMode(m_Doc->activeLayer()));
-               deleteLayerButton->setEnabled(m_Doc->layerCount()>1 && 
!m_Doc->layerLocked( m_Doc->activeLayer() ));
-               if (layers->count()>1)
+               deleteLayerButton->setEnabled(m_Doc->layerCount() > 1 && 
!m_Doc->layerLocked( m_Doc->activeLayer() ));
+               if (layers->count() > 1)
                {
                        raiseLayerButton->setEnabled(Table->currentRow()!= 0);
                        lowerLayerButton->setEnabled(Table->currentRow()!= 
Table->rowCount()-1);

Modified: trunk/Scribus/scribus/ui/layers.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23175&path=/trunk/Scribus/scribus/ui/layers.h
==============================================================================
--- trunk/Scribus/scribus/ui/layers.h   (original)
+++ trunk/Scribus/scribus/ui/layers.h   Tue Sep  3 01:05:50 2019
@@ -61,7 +61,7 @@
        void changeOpacity();
        void changeBlendMode(int blend);
        void setActiveLayer(int row, int col);
-       void ClearInhalt();
+       void clearContent();
        void markActiveLayer(int layerID=-1);
        void languageChange();
 

Modified: trunk/Scribus/scribus/ui/outlinepalette.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23175&path=/trunk/Scribus/scribus/ui/outlinepalette.cpp
==============================================================================
--- trunk/Scribus/scribus/ui/outlinepalette.cpp (original)
+++ trunk/Scribus/scribus/ui/outlinepalette.cpp Tue Sep  3 01:05:50 2019
@@ -624,7 +624,10 @@
 
 void OutlinePalette::setLayerVisible(int layerID)
 {
-       currDoc->setLayerVisible(layerID, !currDoc->layerVisible(layerID));
+       bool isLayerVisible = !currDoc->layerVisible(layerID);
+       currDoc->setLayerVisible(layerID, isLayerVisible);
+       if (!isLayerVisible)
+               currDoc->m_Selection->removeItemsOfLayer(layerID);
        currDoc->scMW()->showLayer();
        currDoc->scMW()->layerPalette->rebuildList();
        currDoc->scMW()->layerPalette->markActiveLayer();
@@ -632,7 +635,10 @@
 
 void OutlinePalette::setLayerLocked(int layerID)
 {
-       currDoc->setLayerLocked(layerID, !currDoc->layerLocked(layerID));
+       bool isLayerLocked = !currDoc->layerLocked(layerID);
+       currDoc->setLayerLocked(layerID, isLayerLocked);
+       if (isLayerLocked)
+               currDoc->m_Selection->removeItemsOfLayer(layerID);
        currDoc->scMW()->layerPalette->rebuildList();
        currDoc->scMW()->layerPalette->markActiveLayer();
 }


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

Reply via email to