Files
cbh/ElaWidgetTools/DeveloperComponents/ElaNavigationNode.cpp
2025-09-19 22:40:52 +08:00

175 lines
3.5 KiB
C++

#include "ElaNavigationNode.h"
#include <QUuid>
ElaNavigationNode::ElaNavigationNode(QString nodeTitle, ElaNavigationNode* parent)
: QObject(parent)
{
_pDepth = 0;
_pKeyPoints = 0;
_nodeKey = QUuid::createUuid().toString().remove("{").remove("}").remove("-");
_nodeTitle = nodeTitle;
_pIsRootNode = false;
_pIsFooterNode = false;
_pIsHasFooterPage = false;
_pParentNode = parent;
_pIsExpanderNode = false;
_pIsVisible = false;
}
ElaNavigationNode::~ElaNavigationNode()
{
qDeleteAll(_pChildrenNodes);
}
QString ElaNavigationNode::getNodeKey() const
{
return _nodeKey;
}
QString ElaNavigationNode::getNodeTitle() const
{
return _nodeTitle;
}
void ElaNavigationNode::setIsExpanded(bool isExpanded)
{
_isExpanded = isExpanded;
setChildVisible(isExpanded);
}
bool ElaNavigationNode::getIsExpanded() const
{
return _isExpanded;
}
void ElaNavigationNode::setChildVisible(bool isVisible)
{
if (isVisible)
{
for (auto node: _pChildrenNodes)
{
node->setIsVisible(isVisible);
if (node->getIsExpanderNode() && !node->getIsExpanded())
{
continue;
}
node->setChildVisible(isVisible);
}
}
else
{
for (auto node: _pChildrenNodes)
{
node->setChildVisible(isVisible);
node->setIsVisible(isVisible);
}
}
}
bool ElaNavigationNode::getIsHasChild() const
{
if (_pChildrenNodes.count() > 0)
{
return true;
}
return false;
}
bool ElaNavigationNode::getIsHasPageChild() const
{
if (_pChildrenNodes.count() == 0)
{
return false;
}
for (auto childNode: _pChildrenNodes)
{
if (!childNode->getIsExpanderNode())
{
return true;
}
if (childNode->getIsHasPageChild())
{
return true;
}
}
return false;
}
void ElaNavigationNode::appendChildNode(ElaNavigationNode* childNode)
{
if (_pIsExpanderNode)
{
_pChildrenNodes.append(childNode);
}
}
void ElaNavigationNode::removeChildNode(ElaNavigationNode* childNode)
{
if (_pIsExpanderNode)
{
_pChildrenNodes.removeOne(childNode);
}
}
bool ElaNavigationNode::getIsChildHasKeyPoints() const
{
for (auto childNnode: _pChildrenNodes)
{
if (childNnode->getKeyPoints())
{
return true;
}
if (childNnode->getIsChildHasKeyPoints())
{
return true;
}
}
return false;
}
ElaNavigationNode* ElaNavigationNode::getOriginalNode()
{
if (this->getParentNode()->getIsRootNode())
{
return this;
}
else
{
ElaNavigationNode* originalNode = this->getParentNode();
while (!originalNode->getIsRootNode() && !originalNode->getParentNode()->getIsRootNode())
{
originalNode = originalNode->getParentNode();
}
return originalNode;
}
}
bool ElaNavigationNode::getIsChildNode(ElaNavigationNode* node)
{
if (_pChildrenNodes.count() > 0)
{
if (_pChildrenNodes.contains(node))
{
return true;
}
for (auto childNnode: _pChildrenNodes)
{
if (childNnode->getIsChildNode(node))
{
return true;
}
}
}
return false;
}
int ElaNavigationNode::getRow() const
{
if (_pParentNode)
{
return _pParentNode->getChildrenNodes().indexOf(const_cast<ElaNavigationNode*>(this));
}
return 0;
}