[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-kimageshop
Subject:    [krita/krita-grids-kazakov] /: FEATURE: Quick Ungroup action (Ctrl+Alt+G)
From:       Dmitry Kazakov <dimula73 () gmail ! com>
Date:       2016-03-07 9:55:32
Message-ID: E1acrsy-0002sU-4A () scm ! kde ! org
[Download RAW message or body]

Git commit 711d80a232695d30b24f602b185c58850b8b25b8 by Dmitry Kazakov.
Committed on 07/03/2016 at 09:54.
Pushed by dkazakov into branch 'krita-grids-kazakov'.

FEATURE: Quick Ungroup action (Ctrl+Alt+G)

1) If a group is selected, all the child layers are ungrouped and
   the group itself is removed.

2) If all the child layers are selected, they get ungrouped and
   the group itself is removed.

3) If only some child layers are selected, they just get ungrouped.
   Their parent is kept alive.

CC:kimageshop@kde.org

M  +12   -0    krita/krita.action
M  +1    -0    krita/krita.rc
M  +35   -0    libs/ui/kis_node_manager.cpp
M  +1    -0    libs/ui/kis_node_manager.h
M  +1    -0    plugins/extensions/dockers/defaultdockers/kis_layer_box.cpp

http://commits.kde.org/krita/711d80a232695d30b24f602b185c58850b8b25b8

diff --git a/krita/krita.action b/krita/krita.action
index 6607a42..5c22cd4 100644
--- a/krita/krita.action
+++ b/krita/krita.action
@@ -2384,6 +2384,18 @@
       <isCheckable>false</isCheckable>
       <statusTip></statusTip>
     </Action>
+    <Action name="quick_ungroup">
+      <icon></icon>
+      <text>Quick Ungroup</text>
+      <whatsThis></whatsThis>
+      <toolTip>Remove grouping of the layers or remove one layer out of the \
group</toolTip> +      <iconText>Quick Ungroup</iconText>
+      <activationFlags>0</activationFlags>
+      <activationConditions>0</activationConditions>
+      <shortcut>Ctrl+Alt+G</shortcut>
+      <isCheckable>false</isCheckable>
+      <statusTip></statusTip>
+    </Action>
     <Action name="create_quick_clipping_group">
       <icon></icon>
       <text>Quick Clipping Group</text>
diff --git a/krita/krita.rc b/krita/krita.rc
index 2812bc1..64ba4a5 100644
--- a/krita/krita.rc
+++ b/krita/krita.rc
@@ -219,6 +219,7 @@ xsi:schemaLocation="http://www.kde.org/standards/kxmlgui/1.0  \
http://www.kde.org  <Separator/>
       <Action name="create_quick_group"/>
       <Action name="create_quick_clipping_group"/>
+      <Action name="quick_ungroup"/>
     </Menu>
     <Menu name="Select">
       <text>&amp;Select</text>
diff --git a/libs/ui/kis_node_manager.cpp b/libs/ui/kis_node_manager.cpp
index 1b97a19..5b26ce9 100644
--- a/libs/ui/kis_node_manager.cpp
+++ b/libs/ui/kis_node_manager.cpp
@@ -265,6 +265,9 @@ void KisNodeManager::setup(KActionCollection * actionCollection, \
KisActionManage  action = actionManager->createAction("create_quick_clipping_group");
     connect(action, SIGNAL(triggered()), this, SLOT(createQuickClippingGroup()));
 
+    action = actionManager->createAction("quick_ungroup");
+    connect(action, SIGNAL(triggered()), this, SLOT(quickUngroup()));
+
     action = actionManager->createAction("select_all_layers");
     connect(action, SIGNAL(triggered()), this, SLOT(selectAllNodes()));
 
@@ -1201,6 +1204,38 @@ void KisNodeManager::createQuickClippingGroup()
     juggler->addNode(KisNodeList() << maskLayer, parent, above);
 }
 
+void KisNodeManager::quickUngroup()
+{
+    KisNodeSP active = activeNode();
+    if (!active) return;
+
+    KisNodeSP parent = active->parent();
+    KisNodeSP aboveThis = active;
+
+    KUndo2MagicString actionName = kundo2_i18n("Quick Ungroup");
+
+    if (parent && dynamic_cast<KisGroupLayer*>(active.data())) {
+        KisNodeList nodes = active->childNodes(QStringList(), KoProperties());
+
+        KisNodeJugglerCompressed *juggler = m_d->lazyGetJuggler(actionName);
+        juggler->moveNode(nodes, parent, active);
+        juggler->removeNode(KisNodeList() << active);
+    } else if (parent && parent->parent()) {
+        KisNodeSP grandParent = parent->parent();
+
+        KisNodeList allChildNodes = parent->childNodes(QStringList(), \
KoProperties()); +        KisNodeList allSelectedNodes = selectedNodes();
+
+        const bool removeParent = KritaUtils::compareListsUnordered(allChildNodes, \
allSelectedNodes); +
+        KisNodeJugglerCompressed *juggler = m_d->lazyGetJuggler(actionName);
+        juggler->moveNode(allSelectedNodes, grandParent, parent);
+        if (removeParent) {
+            juggler->removeNode(KisNodeList() << parent);
+        }
+    }
+}
+
 void KisNodeManager::selectLayersImpl(const KoProperties &props, const KoProperties \
&invertedProps)  {
     KisImageSP image = m_d->view->image();
diff --git a/libs/ui/kis_node_manager.h b/libs/ui/kis_node_manager.h
index a01365f..1b218e7 100644
--- a/libs/ui/kis_node_manager.h
+++ b/libs/ui/kis_node_manager.h
@@ -212,6 +212,7 @@ public Q_SLOTS:
 
     void createQuickGroup();
     void createQuickClippingGroup();
+    void quickUngroup();
 
     void selectAllNodes();
     void selectVisibleNodes();
diff --git a/plugins/extensions/dockers/defaultdockers/kis_layer_box.cpp \
b/plugins/extensions/dockers/defaultdockers/kis_layer_box.cpp index 6db3c6b..8c5296c \
                100644
--- a/plugins/extensions/dockers/defaultdockers/kis_layer_box.cpp
+++ b/plugins/extensions/dockers/defaultdockers/kis_layer_box.cpp
@@ -522,6 +522,7 @@ void KisLayerBox::slotContextMenuRequested(const QPoint &pos, \
const QModelIndex  menu.addSeparator();
             addActionToMenu(&menu, "create_quick_group");
             addActionToMenu(&menu, "create_quick_clipping_group");
+            addActionToMenu(&menu, "quick_ungroup");
             menu.addSeparator();
 
             menu.addAction(m_removeAction);
_______________________________________________
Krita mailing list
kimageshop@kde.org
https://mail.kde.org/mailman/listinfo/kimageshop


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic