34 if (elements.isEmpty())
return;
41 for (; i < elements.count(); ++i) {
45 newelements.push_back(pe);
50 newelements.removeLast();
55 elements = newelements;
58 if (_level >= elements.size()) {
59 _result.push_back(_node);
66 child != 0; child = child->nextSibling()) {
67 queryLevel(_level + 1, child, _result);
73 queryLevel(_level + 1, _node->
parent(), _result);
81 queryLevel(_level + 1, _node->
at(pe.
index), _result);
123 _node = image->
root();
128 d->queryLevel(0, _node, result);
138 return !result.isEmpty() ? result.first() : 0;
146 }
else if (
d->elements.count() == 0) {
149 for (
int i = 0; i <
d->elements.count(); ++i) {
159 str += QString::number(pe.
index);
162 if (i !=
d->elements.count() - 1) {
172 if (_path.size() == 0 || _path ==
".") {
173 path.
d->relative =
true;
177 path.d->relative =
false;
180 path.d->relative = !(_path.at(0) ==
'/');
182 if (!path.d->relative) {
185 Q_FOREACH (
const QString& index, indexes) {
188 }
else if (index ==
"..") {
191 path.d->elements.push_back(index.toInt());
194 path.d->simplifyPath();
201 path.
d->relative =
false;
203 while ((parent = node->
parent())) {
204 int index = parent->index(node);
206 path.d->elements.push_front(index);
#define KIS_ASSERT_RECOVER_NOOP(cond)
static KisNodeQueryPath fromString(const QString &path)
KisNodeQueryPath & operator=(const KisNodeQueryPath &)
QList< KisNodeSP > queryNodes(KisImageWSP image, KisNodeSP currentNode) const
QList< PathElement > elements
KisNodeSP queryUniqueNode(KisImageWSP image, KisNodeSP currentNode=0) const
static KisNodeQueryPath absolutePath(KisNodeSP node)
void simplifyPath()
This function will remove unneeded call to parent, for instance, "1/../3/../5" => "5".
void queryLevel(int _level, KisNodeSP _node, QList< KisNodeSP > &_result)
KisNodeSP firstChild() const
quint32 childCount() const
KisNodeSP at(quint32 index) const