11#include <QApplication>
14#include <klocalizedstring.h>
65 finalSelectedNodes = nodesToSelect;
67 Q_FOREACH(
KisNodeSP node, nodesToSelect) {
69 finalSelectedNodes.append(node);
75 Q_FOREACH(
KisNodeSP node, finalSelectedNodes) {
81 tmpNode = tmpNode->
parent();
88 Q_FOREACH(
KisNodeSP node, currentlySelectedNodes) {
89 if (!finalSelectedNodes.contains(node)) {
90 finalSelectedNodes.append(node);
96 if (!finalSelectedNodes.contains(activeNode)) {
97 activeNode = finalSelectedNodes.last();
107 nodesToSelect.append(node);
119 QHash<QString, int> shortcuts;
120 shortcuts.insert(i18n(
"Select Top Layer (Replace Selection)"),
122 shortcuts.insert(i18n(
"Select All Layers (Replace Selection)"),
124 shortcuts.insert(i18n(
"Select from Menu (Replace Selection)"),
126 shortcuts.insert(i18n(
"Select Top Layer (Add to Selection)"),
128 shortcuts.insert(i18n(
"Select All Layers (Add to Selection)"),
130 shortcuts.insert(i18n(
"Select from Menu (Add to Selection)"),
154 QApplication::restoreOverrideCursor();
168 if (!event || (event->type() != QEvent::MouseMove && event->type() != QEvent::TabletMove &&
169 event->type() != QTouchEvent::TouchUpdate && event->type() != QEvent::MouseButtonPress &&
170 event->type() != QEvent::TabletPress && event->type() != QTouchEvent::TouchBegin)) {
188 coordinatesConverter()->widgetToImage(
eventPosF(event)).toPoint();
198 nodesToSelect.append(foundNode);
205 if (foundNodes.isEmpty()) {
210 nodesToSelect = foundNodes;
213 QMenu *menu =
new QMenu(canvasWidget);
214 menu->setAttribute(Qt::WA_DeleteOnClose);
215 int numberOfLayers = 0;
219 for (
int i = foundNodes.size() - 1; i >= 0; --i) {
221 int indentation = -1;
224 while (tempNode->
parent()) {
226 tempNode = tempNode->
parent();
229 QAction *action = menu->addAction(QString(4 * indentation,
' ') + node->
name());
230 QObject::connect(action, &QAction::triggered,
231 [
this, node, selectionOverrideMode]()
242 menu->addSeparator();
246 QAction *action = menu->addAction(i18nc(
"Menu entry for the select layer under cursor canvas input action",
247 "Select all layers"));
248 action->setVisible(numberOfLayers > 1);
249 QObject::connect(action, &QAction::triggered,
250 [
this, foundNodes, selectionOverrideMode]()
252 d->
selectNodes(foundNodes, selectionOverrideMode,
false);
257 menu->popup(canvasWidget->mapToGlobal(
eventPos(event)));
263 d->
selectNodes(nodesToSelect, selectionOverrideMode,
true);
KisViewManager * viewManager() const
KisAbstractCanvasWidget * canvasWidget
static QCursor pickLayerCursor()
KisNodeSP activeNode()
Convenience function to get the active layer or mask.
KisNodeList selectedNodes()
void slotImageRequestNodeReselection(KisNodeSP activeNode, const KisNodeList &selectedNodes)
static int selectionOverrideMode(int shortcut)
static int makeShortcut(LayerSelectionMode layerSelectionMode, SelectionOverrideMode selectionOverrideMode)
static int layerSelectionMode(int shortcut)
void selectNodes(const KisNodeList &nodesToSelect, int selectionOverrideMode, bool includeGroups) const
void selectNode(KisNodeSP node, int selectionOverrideMode) const
Private(KisSelectLayerAction *q)
Select Layer implementation of KisAbstractInputAction.
void begin(int shortcut, QEvent *event) override
@ SelectionOverrideMode_Replace
@ SelectionOverrideMode_Add
~KisSelectLayerAction() override
void activate(int shortcut) override
void deactivate(int shortcut) override
int priority() const override
void inputEvent(QEvent *event) override
@ LayerSelectionMode_TopLayer
@ LayerSelectionMode_AllLayers
KisNodeManager * nodeManager() const
The node manager handles everything about nodes.
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
void setCollapsed(bool collapsed)