Krita Source Code Documentation
Loading...
Searching...
No Matches
LowerRaiseLayer Struct Reference
+ Inheritance diagram for LowerRaiseLayer:

Public Types

enum  NodesType { AllLayers , Mixed , AllMasks }
 

Public Member Functions

bool allowsAsChildren (KisNodeSP parent, KisNodeList nodes)
 
NodesType getNodesType (KisNodeList nodes)
 
 LowerRaiseLayer (BatchMoveUpdateDataSP updateData, KisImageSP image, const KisNodeList &nodes, KisNodeSP activeNode, bool lower)
 
void populateChildCommands () override
 
- Public Member Functions inherited from KisCommandUtils::AggregateCommand
 AggregateCommand (const KUndo2MagicString &text, KUndo2Command *parent=0)
 
 AggregateCommand (KUndo2Command *parent=0)
 
void redo () override
 
void undo () override
 
- Public Member Functions inherited from KUndo2Command
QString actionText () const
 
virtual bool canAnnihilateWith (const KUndo2Command *other) const
 
const KUndo2Command * child (int index) const
 
int childCount () const
 
virtual QTime endTime () const
 
KUndo2CommandExtraData * extraData () const
 
bool hasParent () const
 
virtual int id () const
 
virtual bool isMerged () const
 
 KUndo2Command (const KUndo2MagicString &text, KUndo2Command *parent=0)
 
 KUndo2Command (KUndo2Command *parent=0)
 
virtual QVector< KUndo2Command * > mergeCommandsVector () const
 
virtual bool mergeWith (const KUndo2Command *other)
 
virtual void redoMergedCommands ()
 
void setEndTime ()
 
virtual void setEndTime (const QTime &time)
 
void setExtraData (KUndo2CommandExtraData *data)
 
void setText (const KUndo2MagicString &text)
 
void setTime ()
 
virtual void setTime (const QTime &time)
 
virtual void setTimedID (int timedID)
 
KUndo2MagicString text () const
 
virtual QTime time () const
 
virtual int timedId () const
 
virtual bool timedMergeWith (KUndo2Command *other)
 
virtual void undoMergedCommands ()
 
virtual ~KUndo2Command ()
 

Private Attributes

KisNodeSP m_activeNode
 
KisImageSP m_image
 
bool m_lower
 
KisNodeList m_nodes
 
BatchMoveUpdateDataSP m_updateData
 

Additional Inherited Members

- Protected Member Functions inherited from KisCommandUtils::AggregateCommand
void addCommand (KUndo2Command *cmd)
 

Detailed Description

A generalized command to move up/down a set of layer

Definition at line 329 of file kis_node_juggler_compressed.cpp.

Member Enumeration Documentation

◆ NodesType

Constructor & Destructor Documentation

◆ LowerRaiseLayer()

LowerRaiseLayer::LowerRaiseLayer ( BatchMoveUpdateDataSP updateData,
KisImageSP image,
const KisNodeList & nodes,
KisNodeSP activeNode,
bool lower )
inline

Definition at line 330 of file kis_node_juggler_compressed.cpp.

335 : m_updateData(updateData),
336 m_image(image),
337 m_nodes(nodes),
338 m_activeNode(activeNode),
339 m_lower (lower) {}
BatchMoveUpdateDataSP m_updateData

Member Function Documentation

◆ allowsAsChildren()

bool LowerRaiseLayer::allowsAsChildren ( KisNodeSP parent,
KisNodeList nodes )
inline

Definition at line 361 of file kis_node_juggler_compressed.cpp.

361 {
362 if (!parent->isEditable(false)) return false;
363
364 Q_FOREACH (KisNodeSP node, nodes) {
365 if (!parent->allowAsChild(node)) return false;
366 }
367
368 return true;
369 }
ChildIterator< value_type, is_const > parent(const ChildIterator< value_type, is_const > &it)
Definition KisForest.h:327

◆ getNodesType()

NodesType LowerRaiseLayer::getNodesType ( KisNodeList nodes)
inline

Definition at line 347 of file kis_node_juggler_compressed.cpp.

347 {
348 bool hasLayers = false;
349 bool hasMasks = false;
350
351 Q_FOREACH (KisNodeSP node, nodes) {
352 hasLayers |= bool(qobject_cast<KisLayer*>(node.data()));
353 hasMasks |= bool(qobject_cast<KisMask*>(node.data()));
354 }
355
356 return hasLayers && hasMasks ? Mixed :
357 hasLayers ? AllLayers :
358 AllMasks;
359 }

References AllLayers, AllMasks, KisSharedPtr< T >::data(), and Mixed.

◆ populateChildCommands()

void LowerRaiseLayer::populateChildCommands ( )
inlineoverridevirtual

Implements KisCommandUtils::AggregateCommand.

Definition at line 371 of file kis_node_juggler_compressed.cpp.

371 {
373 KisNodeSP headNode = m_lower ? sortedNodes.first() : sortedNodes.last();
374 const NodesType nodesType = getNodesType(sortedNodes);
375
376 KisNodeSP parent = headNode->parent();
377 KisNodeSP grandParent = parent ? parent->parent() : 0;
378
379 if (!parent->isEditable(false)) return;
380
381 KisNodeSP newAbove;
382 KisNodeSP newParent;
383
384 if (m_lower) {
385 KisNodeSP prevNode = headNode->prevSibling();
386
387 if (prevNode) {
388 if (allowsAsChildren(prevNode, sortedNodes) &&
389 !prevNode->collapsed()) {
390
391 newAbove = prevNode->lastChild();
392 newParent = prevNode;
393 } else {
394 newAbove = prevNode->prevSibling();
395 newParent = parent;
396 }
397 } else if ((nodesType == AllLayers && grandParent) ||
398 (nodesType == AllMasks && grandParent && grandParent->parent())) {
399 newAbove = parent->prevSibling();
400 newParent = grandParent;
401
402 } else if (nodesType == AllMasks &&
403 grandParent && !grandParent->parent() &&
404 (prevNode = parent->prevSibling()) &&
405 prevNode->inherits("KisLayer")) {
406
407 newAbove = prevNode->lastChild();
408 newParent = prevNode; // NOTE: this is an updated 'prevNode'!
409 }
410 } else {
411 KisNodeSP nextNode = headNode->nextSibling();
412
413 if (nextNode) {
414 if (allowsAsChildren(nextNode, sortedNodes) &&
415 !nextNode->collapsed()) {
416 newAbove = 0;
417 newParent = nextNode;
418 } else {
419 newAbove = nextNode;
420 newParent = parent;
421 }
422 } else if ((nodesType == AllLayers && grandParent) ||
423 (nodesType == AllMasks && grandParent && grandParent->parent())) {
424 newAbove = parent;
425 newParent = grandParent;
426
427 } else if (nodesType == AllMasks &&
428 grandParent && !grandParent->parent() &&
429 (nextNode = parent->nextSibling()) &&
430 nextNode->inherits("KisLayer")) {
431
432 newAbove = 0;
433 newParent = nextNode; // NOTE: this is an updated 'nextNode'!
434 }
435 }
436
437 if (!newParent ||
438 !newParent->isEditable(false)) return;
439
440 addCommand(new KisLayerUtils::KeepNodesSelectedCommand(sortedNodes, sortedNodes,
442 m_image, false));
443
444 KisNodeSP currentAbove = newAbove;
445 Q_FOREACH (KisNodeSP node, sortedNodes) {
446 if (node->parent() != newParent && !newParent->allowAsChild(node)) {
447 continue;
448 }
449
450 MoveNodeStructSP moveStruct = toQShared(new MoveNodeStruct(m_image, node, newParent, currentAbove));
451 addCommand(new KisImageLayerMoveCommand(m_image, node, newParent, currentAbove, false));
452 m_updateData->addInitialUpdate(moveStruct);
453 currentAbove = node;
454 }
455
456 addCommand(new KisLayerUtils::KeepNodesSelectedCommand(sortedNodes, sortedNodes,
458 m_image, true));
459 }
The command for layer moves inside the layer stack.
QSharedPointer< T > toQShared(T *ptr)
KisNodeList sortAndFilterAnyMergeableNodesSafe(const KisNodeList &nodes, KisImageSP image)
bool isEditable(bool checkVisibility=true) const
void addCommand(KUndo2Command *cmd)
KisNodeSP prevSibling() const
Definition kis_node.cpp:402
KisNodeWSP parent
Definition kis_node.cpp:86
KisNodeSP lastChild() const
Definition kis_node.cpp:367
KisNodeSP nextSibling() const
Definition kis_node.cpp:408
virtual bool allowAsChild(KisNodeSP) const =0
bool allowsAsChildren(KisNodeSP parent, KisNodeList nodes)
NodesType getNodesType(KisNodeList nodes)

References KisCommandUtils::AggregateCommand::addCommand(), AllLayers, AllMasks, KisNode::allowAsChild(), allowsAsChildren(), KisBaseNode::collapsed, getNodesType(), KisBaseNode::isEditable(), KisNode::lastChild(), m_activeNode, m_image, m_lower, m_nodes, m_updateData, KisNode::nextSibling(), KisNode::parent, KisNode::prevSibling(), KisLayerUtils::sortAndFilterAnyMergeableNodesSafe(), and toQShared().

Member Data Documentation

◆ m_activeNode

KisNodeSP LowerRaiseLayer::m_activeNode
private

Definition at line 465 of file kis_node_juggler_compressed.cpp.

◆ m_image

KisImageSP LowerRaiseLayer::m_image
private

Definition at line 463 of file kis_node_juggler_compressed.cpp.

◆ m_lower

bool LowerRaiseLayer::m_lower
private

Definition at line 466 of file kis_node_juggler_compressed.cpp.

◆ m_nodes

KisNodeList LowerRaiseLayer::m_nodes
private

Definition at line 464 of file kis_node_juggler_compressed.cpp.

◆ m_updateData

BatchMoveUpdateDataSP LowerRaiseLayer::m_updateData
private

Definition at line 462 of file kis_node_juggler_compressed.cpp.


The documentation for this struct was generated from the following file: