Krita Source Code Documentation
Loading...
Searching...
No Matches
layergroupswitcher.cpp
Go to the documentation of this file.
1/*
2 * layergroupswitcher.cpp -- Part of Krita
3 *
4 * SPDX-FileCopyrightText: 2013 Boudewijn Rempt (boud@valdyas.org)
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
8
10
11#include <klocalizedstring.h>
12#include <kis_debug.h>
13#include <kpluginfactory.h>
14
15#include <kis_image.h>
16#include <kis_layer.h>
17#include <kis_group_layer.h>
18#include <kis_node.h>
19#include <kis_node_manager.h>
20#include <kis_global.h>
21#include <kis_types.h>
22#include <KisViewManager.h>
23
24#include "kis_action.h"
25
26K_PLUGIN_FACTORY_WITH_JSON(LayerGroupSwitcherFactory, "kritalayergroupswitcher.json", registerPlugin<LayerGroupSwitcher>();)
27
28LayerGroupSwitcher::LayerGroupSwitcher(QObject *parent, const QVariantList &)
29 : KisActionPlugin(parent)
30{
31 KisAction *action = new KisAction(i18n("Move into previous group"), this);
32 addAction("LayerGroupSwitcher/previous", action);
33 connect(action, SIGNAL(triggered()), this, SLOT(moveIntoPreviousGroup()));
34
35 action = new KisAction(i18n("Move into next group"), this);
36 addAction("LayerGroupSwitcher/next", action);
37 connect(action, SIGNAL(triggered()), this, SLOT(moveIntoNextGroup()));
38}
39
43
45{
46 KisImageSP image = viewManager()->image().toStrongRef();
47 if (!image) {
48 return;
49 }
50 KisNodeManager *nodeManager = viewManager()->nodeManager();
51 KisLayerSP active = nodeManager->activeLayer();
52 if (!active) {
53 return;
54 }
55 if (active->parentLayer().data() == image->rootLayer().data()) {
56 active->setVisible(false);
57 nodeManager->activateNextNode();
58 active = nodeManager->activeLayer();
59 if (active) {
60 active->setVisible(true);
61 }
62 }
63 else if (active->parent()) {
64 KisNodeSP parent = active->parent();
65 if (parent) {
66 int indexInGroup = active->parent()->index(active);
67 nodeManager->slotNonUiActivatedNode(parent);
68 parent->setVisible(false);
69 nodeManager->activateNextNode();
70 active = nodeManager->activeLayer();
71 if (active) {
72 active->setVisible(true);
73 }
74 KisNodeSP child = active->at(indexInGroup);
75 if (child) {
76 nodeManager->slotNonUiActivatedNode(child);
77 child->setVisible(true);
78 }
79 }
80 }
81 image->refreshGraphAsync();
82
83}
84
86{
87 KisImageSP image = viewManager()->image().toStrongRef();
88 if (!image) {
89 return;
90 }
91 KisNodeManager *nodeManager = viewManager()->nodeManager();
92 KisLayerSP active = nodeManager->activeLayer();
93 if (!active) {
94 return;
95 }
96 if (active->parentLayer().data() == image->rootLayer().data()) {
97 active->setVisible(false);
98 nodeManager->activatePreviousNode();
99 active = nodeManager->activeLayer();
100 if (active) {
101 active->setVisible(true);
102 }
103 }
104 else if (active->parent()) {
105 KisNodeSP parent = active->parent();
106 if (parent) {
107 int indexInGroup = active->parent()->index(active);
108 nodeManager->slotNonUiActivatedNode(parent);
109 parent->setVisible(false);
110 nodeManager->activatePreviousNode();
111 active = nodeManager->activeLayer();
112 if (active) {
113 active->setVisible(true);
114 }
115 KisNodeSP child = active->at(indexInGroup);
116 if (child) {
117 nodeManager->slotNonUiActivatedNode(child);
118 child->setVisible(true);
119 }
120 }
121 }
122 image->refreshGraphAsync();
123}
124
125#include "layergroupswitcher.moc"
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
QPointer< KisViewManager > viewManager() const
void refreshGraphAsync(KisNodeSP root, const QVector< QRect > &rects, const QRect &cropRect, KisProjectionUpdateFlags flags=KisProjectionUpdateFlag::None) override
KisGroupLayerSP rootLayer() const
void activateNextNode(bool siblingsOnly=false)
KisLayerSP activeLayer()
void activatePreviousNode(bool siblingsOnly=false)
void slotNonUiActivatedNode(KisNodeSP node)
LayerGroupSwitcher(QObject *parent, const QVariantList &)
K_PLUGIN_FACTORY_WITH_JSON(KritaASCCDLFactory, "kritaasccdl.json", registerPlugin< KritaASCCDL >();) KritaASCCDL
virtual void setVisible(bool visible, bool loading=false)
KisLayerSP parentLayer() const
int index(const KisNodeSP node) const
Definition kis_node.cpp:432
KisNodeWSP parent
Definition kis_node.cpp:86
KisNodeSP at(quint32 index) const
Definition kis_node.cpp:421