Files
cbh/ElaWidgetTools/DeveloperComponents/ElaNavigationNode.cpp
2025-09-20 01:41:33 +08:00

126 lines
3.4 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;
}