Files
HPPA/HPPA/LayerTree.cpp
2026-04-02 10:34:57 +08:00

48 lines
1.2 KiB
C++

#include "LayerTree.h"
LayerTree::LayerTree(QObject* parent)
: LayerTreeGroup("__root__", parent)
{
setVisible(Qt::Checked);
}
LayerTree::~LayerTree()
{
}
void LayerTree::setChildrenVisible(LayerTreeNode* n, Qt::CheckState state)
{
if (!n) return;
const auto& cs = n->children();
for (LayerTreeNode* c : cs) {
c->setVisible(state);
setChildrenVisible(c, state);
}
}
void LayerTree::updateParentVisibleFromChildren(LayerTreeNode* p)
{
if (!p) return;
if (p->childCount() == 0) return;
int checked = 0, unchecked = 0, partial = 0;
const auto& cs = p->children();
for (LayerTreeNode* c : cs) {
auto s = c->visible();
if (s == Qt::Checked) checked++;
else if (s == Qt::Unchecked) unchecked++;
else partial++;
}
Qt::CheckState newState;
if (partial > 0) newState = Qt::PartiallyChecked;
else if (checked > 0 && unchecked == 0) newState = Qt::Checked;
else if (unchecked > 0 && checked == 0) newState = Qt::Unchecked;
else newState = Qt::PartiallyChecked;
if (p->visible() != newState) {
p->setVisible(newState);
updateParentVisibleFromChildren(p->parentNode());
}
}