Author: jghali
Date: Mon Jul 20 08:47:02 2020
New Revision: 23937

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23937
Log:
#16178, 16179: fix ability to modify locked layer after saving doc or reopening 
doc

Modified:
    trunk/Scribus/scribus/appmodehelper.cpp
    trunk/Scribus/scribus/appmodehelper.h
    trunk/Scribus/scribus/pluginmanager.cpp
    trunk/Scribus/scribus/pluginmanager.h
    trunk/Scribus/scribus/scplugin.cpp
    trunk/Scribus/scribus/scribus.cpp

Modified: trunk/Scribus/scribus/appmodehelper.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23937&path=/trunk/Scribus/scribus/appmodehelper.cpp
==============================================================================
--- trunk/Scribus/scribus/appmodehelper.cpp     (original)
+++ trunk/Scribus/scribus/appmodehelper.cpp     Mon Jul 20 08:47:02 2020
@@ -24,6 +24,7 @@
 #include "pluginmanager.h"
 #include "prefsmanager.h"
 #include "scmimedata.h"
+#include "scplugin.h"
 #include "scribus.h"
 #include "scribuscore.h"
 #include "scribusdoc.h"
@@ -114,6 +115,7 @@
        if (newMode != modeNormal && newMode != modeStoryEditor)
                scmw->activateWindow();
 
+       bool layerUnlocked = !doc->layerLocked(doc->activeLayer());
 
        switch (oldMode)
        {
@@ -217,7 +219,7 @@
                                (*a_scrActions)["editCut"]->setEnabled(currItem 
!= nullptr);
                                
(*a_scrActions)["editCopy"]->setEnabled(currItem != nullptr);
                                
(*a_scrActions)["editClearContents"]->setEnabled(currItem != nullptr);
-                               
(*a_scrActions)["editPaste"]->setEnabled(ScMimeData::clipboardHasScribusData());
+                               
(*a_scrActions)["editPaste"]->setEnabled(layerUnlocked && 
ScMimeData::clipboardHasScribusData());
                                
(*a_scrActions)["editTruncateContents"]->setEnabled((currItem != nullptr) && 
currItem->isTextFrame());
 
                                
scmw->propertiesPalette->setGradientEditMode(false);
@@ -1300,6 +1302,42 @@
                (*a_scrActions)["ExportAsImage"]->setEnabled(b2);
 }
 
+void AppModeHelper::updateActionPluginsActions(ScribusDoc* doc)
+{
+       int selectedType = -1;
+       if (doc->m_Selection->count() > 0)
+       {
+               PageItem *currItem = doc->m_Selection->itemAt(0);
+               selectedType = currItem->itemType();
+       }
+       bool isLayerLocked = doc->layerLocked(doc->activeLayer());
+
+       PluginManager& pluginManager(PluginManager::instance());
+       QStringList pluginNames(pluginManager.pluginNames(false));
+       ScPlugin* plugin;
+       ScActionPlugin* actionPlug;
+       ScrAction* pluginAction = nullptr;
+       QString pName;
+       for (int i = 0; i < pluginNames.count(); ++i)
+       {
+               pName = pluginNames.at(i);
+               plugin = pluginManager.getPlugin(pName, true);
+               Q_ASSERT(plugin); // all the returned names should represent 
loaded plugins
+               if (!plugin->inherits("ScActionPlugin"))
+                       continue;
+               actionPlug = dynamic_cast<ScActionPlugin*>(plugin);
+               Q_ASSERT(actionPlug);
+               ScActionPlugin::ActionInfo actionInfo(actionPlug->actionInfo());
+               pluginAction = 
ScCore->primaryMainWindow()->scrActions[actionInfo.name];
+               if (!pluginAction)
+                       continue;
+               if (isLayerLocked && !actionInfo.enabledOnStartup)
+                       pluginAction->setEnabled(false);
+               else
+                       
pluginAction->setEnabled(actionPlug->handleSelection(doc, selectedType));
+       }
+}
+
 void AppModeHelper::updateTableMenuActions(ScribusDoc* doc)
 {
        // Determine state.
@@ -1387,10 +1425,14 @@
        (*a_scrActions)["toolsPDFListBox"]->setEnabled(setter2);
        (*a_scrActions)["toolsPDFAnnotText"]->setEnabled(setter2);
        (*a_scrActions)["toolsPDFAnnotLink"]->setEnabled(setter);
+
+       updateActionPluginsActions(doc);
 }
 
 void AppModeHelper::mainWindowHasNewDoc(ScribusDoc *doc, bool 
clipScrapHaveData)
 {
+       bool layerUnlocked = !doc->layerLocked(doc->activeLayer());
+
        (*a_scrActions)["filePrint"]->setEnabled(true);
        (*a_scrActions)["fileSave"]->setEnabled(!doc->isConverted);
        (*a_scrActions)["fileClose"]->setEnabled(true);
@@ -1416,7 +1458,7 @@
 
        (*a_scrActions)["editCut"]->setEnabled(false);
        (*a_scrActions)["editCopy"]->setEnabled(false);
-       (*a_scrActions)["editPaste"]->setEnabled(clipScrapHaveData);
+       (*a_scrActions)["editPaste"]->setEnabled(layerUnlocked && 
clipScrapHaveData);
        (*a_scrActions)["editCopyContents"]->setEnabled(false);
        (*a_scrActions)["editPasteContents"]->setEnabled(false);
        (*a_scrActions)["editPasteContentsAbs"]->setEnabled(false);

Modified: trunk/Scribus/scribus/appmodehelper.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23937&path=/trunk/Scribus/scribus/appmodehelper.h
==============================================================================
--- trunk/Scribus/scribus/appmodehelper.h       (original)
+++ trunk/Scribus/scribus/appmodehelper.h       Mon Jul 20 08:47:02 2020
@@ -48,6 +48,7 @@
                void setSymbolEditMode(bool b, ScribusDoc* doc);
                void setInlineEditMode(bool b, ScribusDoc* doc);
                void setMasterPageEditMode(bool b, ScribusDoc *doc);
+               void updateActionPluginsActions(ScribusDoc* doc);
                void updateTableMenuActions(ScribusDoc* doc);
                void changeLayer(ScribusDoc *doc, bool clipScrapHaveData);
                void mainWindowHasNewDoc(ScribusDoc *doc, bool 
clipScrapHaveData);

Modified: trunk/Scribus/scribus/pluginmanager.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23937&path=/trunk/Scribus/scribus/pluginmanager.cpp
==============================================================================
--- trunk/Scribus/scribus/pluginmanager.cpp     (original)
+++ trunk/Scribus/scribus/pluginmanager.cpp     Mon Jul 20 08:47:02 2020
@@ -455,31 +455,36 @@
 void PluginManager::enablePluginActionsForSelection(ScribusMainWindow* mw)
 {
        Q_CHECK_PTR(mw);
-       ScribusDoc* doc=mw->doc;
+       ScribusDoc* doc = mw->doc;
        if (!doc)
                return;
 
-       ScActionPlugin* ixplug = nullptr;
+       int selectedType = -1;
+       if ( doc->m_Selection->count() > 0)
+       {
+               PageItem *currItem = doc->m_Selection->itemAt(0);
+               selectedType = currItem->itemType();
+       }
+       bool isLayerLocked = doc->layerLocked(doc->activeLayer());
+
+       ScActionPlugin* actionPlug = nullptr;
        ScrAction* pluginAction = nullptr;
        for (PluginMap::Iterator it = pluginMap.begin(); it != pluginMap.end(); 
++it)
        {
-               if (it.value().plugin->inherits("ScActionPlugin"))
-               {
-                       ixplug = 
dynamic_cast<ScActionPlugin*>(it.value().plugin);
-                       Q_ASSERT(ixplug);
-                       if (ixplug)
-                       {
-                               ScActionPlugin::ActionInfo 
ai(ixplug->actionInfo());
-                               pluginAction = mw->scrActions[ai.name];
-                               if (pluginAction != nullptr)
-                               {
-                                       if (doc->m_Selection->count() != 0)
-                                               
pluginAction->setEnabled(ixplug->handleSelection(doc, 
doc->m_Selection->itemAt(0)->itemType()));
-                                       else
-                                               
pluginAction->setEnabled(ixplug->handleSelection(doc));
-                               }
-                       }
-               }
+               if (!it.value().plugin->inherits("ScActionPlugin"))
+                       continue;
+               actionPlug = dynamic_cast<ScActionPlugin*>(it.value().plugin);
+               if (!actionPlug)
+                       continue;
+
+               ScActionPlugin::ActionInfo actionInfo(actionPlug->actionInfo());
+               pluginAction = mw->scrActions[actionInfo.name];
+               if (pluginAction == nullptr)
+                       continue;
+               if (isLayerLocked && !actionInfo.enabledOnStartup)
+                       pluginAction->setEnabled(false);
+               else
+                       
pluginAction->setEnabled(actionPlug->handleSelection(doc, selectedType));
        }
 }
 

Modified: trunk/Scribus/scribus/pluginmanager.h
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23937&path=/trunk/Scribus/scribus/pluginmanager.h
==============================================================================
--- trunk/Scribus/scribus/pluginmanager.h       (original)
+++ trunk/Scribus/scribus/pluginmanager.h       Mon Jul 20 08:47:02 2020
@@ -72,9 +72,14 @@
        /*! \brief Called when the last doc is closed
         */
        void enableOnlyStartupPluginActions(ScribusMainWindow*);
-       /*! \brief Called when the last doc is closed
+
+       /*! \brief Called when selection change
         */
        void enablePluginActionsForSelection(ScribusMainWindow*);
+
+       /*! \brief Called when selection change
+        */
+       void enablePluginActionsForSelection(ScribusDoc*);
 
        /*! \brief Checks if is the plugin is in the plugin map, is loaded, and 
is enabled.
         *

Modified: trunk/Scribus/scribus/scplugin.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23937&path=/trunk/Scribus/scribus/scplugin.cpp
==============================================================================
--- trunk/Scribus/scribus/scplugin.cpp  (original)
+++ trunk/Scribus/scribus/scplugin.cpp  Mon Jul 20 08:47:02 2020
@@ -122,7 +122,7 @@
 
 bool ScActionPlugin::handleSelection(ScribusDoc* doc, int SelectedType)
 {
-       const int docSelectionCount=doc->m_Selection->count();
+       const int docSelectionCount = doc->m_Selection->count();
        ActionInfo ai(actionInfo());
        if (SelectedType != -1)
        {

Modified: trunk/Scribus/scribus/scribus.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23937&path=/trunk/Scribus/scribus/scribus.cpp
==============================================================================
--- trunk/Scribus/scribus/scribus.cpp   (original)
+++ trunk/Scribus/scribus/scribus.cpp   Mon Jul 20 08:47:02 2020
@@ -2787,6 +2787,12 @@
                pagePalette->enablePalette(true);
                setPreviewToolbar();
        }
+
+       bool setter = !doc->layerLocked( doc->activeLayer() );
+       scrMenuMgr->setMenuEnabled("EditPasteRecent", 
((scrapbookPalette->tempBView->objectMap.count() > 0) && (setter)));
+       scrMenuMgr->setMenuEnabled("Insert", setter);
+       scrMenuMgr->setMenuEnabled("ItemLayer", doc->layerCount() > 1);
+       appModeHelper->changeLayer(doc, (ScMimeData::clipboardHasScribusData() 
|| (scrapbookPalette->tempHasContents())));
 }
 
 void ScribusMainWindow::HaveNewDoc()
@@ -2843,13 +2849,13 @@
 {
        if (doc == nullptr)
                return;
-       int SelectedType = -1;
+       int selectedType = -1;
        PageItem *currItem = nullptr;
        const int docSelectionCount = doc->m_Selection->count();
        if (docSelectionCount > 0)
        {
                currItem = doc->m_Selection->itemAt(0);
-               SelectedType = currItem->itemType();
+               selectedType = currItem->itemType();
        }
        assert (docSelectionCount == 0 || currItem != nullptr); // help 
coverity analysis
 
@@ -2863,7 +2869,7 @@
        if (!doc->inAnEditMode())
                appModeHelper->enableActionsForSelection(this, doc);
 
-       switch (SelectedType)
+       switch (selectedType)
        {
        case -1: // None
                outlinePalette->slotShowSelect(doc->currentPageNumber(), 
nullptr);
@@ -2927,33 +2933,13 @@
                propertiesPalette->setTextFlowMode(currItem->textFlowMode());
        }
 
-       if (SelectedType != -1)
+       if (selectedType != -1)
        {
                outlinePalette->slotShowSelect(currItem->OwnPage, currItem);
                actionManager->connectNewSelectionActions(view, doc);
        }
 
-       PluginManager& pluginManager(PluginManager::instance());
-       QStringList pluginNames(pluginManager.pluginNames(false));
-       ScPlugin* plugin;
-       ScActionPlugin* ixplug;
-       ScrAction* pluginAction = nullptr;
-       QString pName;
-       for (int i = 0; i < pluginNames.count(); ++i)
-       {
-               pName = pluginNames.at(i);
-               plugin = pluginManager.getPlugin(pName, true);
-               Q_ASSERT(plugin); // all the returned names should represent 
loaded plugins
-               if (plugin->inherits("ScActionPlugin"))
-               {
-                       ixplug = dynamic_cast<ScActionPlugin*>(plugin);
-                       Q_ASSERT(ixplug);
-                       ScActionPlugin::ActionInfo ai(ixplug->actionInfo());
-                       pluginAction = 
ScCore->primaryMainWindow()->scrActions[ai.name];
-                       if (pluginAction != nullptr)
-                               
pluginAction->setEnabled(ixplug->handleSelection(doc, SelectedType));
-               }
-       }
+       appModeHelper->updateActionPluginsActions(doc);
 }
 
 void ScribusMainWindow::slotDocCh(bool /*reb*/)
@@ -3171,7 +3157,7 @@
        {
                UndoTransaction pasteAction;
                if (UndoManager::undoEnabled())
-                       pasteAction = 
m_undoManager->beginTransaction(Um::SelectionGroup, Um::IGroup, 
Um::Create,"",Um::ICreate);
+                       pasteAction = 
m_undoManager->beginTransaction(Um::SelectionGroup, Um::IGroup, Um::Create, 
QString(), Um::ICreate);
                view->deselectItems(true);
                int docItemCount = doc->Items->count();
                bool savedAlignGrid = doc->SnapGrid;


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

Reply via email to