removed 'editortreenode'

This commit is contained in:
Marcel M. Otte 2016-11-08 17:46:49 +01:00
parent bfbdfe82cd
commit a47213104c
2 changed files with 0 additions and 221 deletions

View File

@ -1,165 +0,0 @@
#include "editortreenode.h"
template <typename T>
EditorTreeNode<T>::EditorTreeNode() {
parentNode = nullptr;
}
template <typename T>
EditorTreeNode<T>::EditorTreeNode(T v)
: val(v)
{
}
template <typename T>
EditorTreeNode<T>::~EditorTreeNode()
{
if (parentNode != nullptr) {
this->remove();
}
}
template <typename T>
const std::shared_ptr<EditorTreeNode<T> > EditorTreeNode<T>::nextSibling()
{
if (parent() != nullptr) {
uint i = parent()->children().indexOf(this);
if (i + 1 < parentNode->children().size())
return parentNode->children().at(i + 1); //next sibling...
else
return nullptr;
}
return nullptr;
}
template <typename T>
const std::shared_ptr<EditorTreeNode<T>> EditorTreeNode<T>::next(TreeWalkStrategy walkStrategy)
{
if (walkStrategy == TreeWalkStrategy::mixture)
// choose node, work through all siblings, choose next node, but don't change branches more than one parent away, except branch is at an end.
if (parent() != nullptr) {
if (nextSibling() != nullptr) // next sibling
return nextSibling();
else // find next children
{
for (auto n : parentNode->children())
if (n->children().size() > 0)
return n->children().first();
auto siblingOfParent = parentNode->nextSibling();
while (siblingOfParent != nullptr && siblingOfParent->children().size() == 0) {
if (siblingOfParent->nextSibling() == nullptr)
siblingOfParent = siblingOfParent->parentNode();
else
siblingOfParent = siblingOfParent->nextSibling();
}
if (siblingOfParent != nullptr)
return siblingOfParent->children().first();
else
return nullptr;
}
} else {
if (childrenNodes.size() > 0)
return childrenNodes.first();
else
return nullptr;
}
else if (walkStrategy == TreeWalkStrategy::depthFirst)
if (children().size() > 0)
return childrenNodes.first();
else {
auto node = this;
while (node->nextSibling() == nullptr && node->parentNode() != nullptr)
node = node->parentNode();
return node->nextSibling();
}
else if (walkStrategy == TreeWalkStrategy::breadthFirst)
if (parentNode != nullptr) {
auto nextOnLvl = nextOnSameLevel();
if (nextOnLvl == nullptr){
for (auto n : this->childrenNodes)
if (n->children().size() > 0)
return n->children().first();
}
else return nextOnLvl;
}
return nullptr;
}
template <typename T>
const std::shared_ptr<EditorTreeNode<T>> EditorTreeNode<T>::getRoot()
{
auto node = std::shared_ptr<EditorTreeNode<T>>(this);
while (node->parent() != nullptr)
node = node->parent();
return node;
}
template <typename T>
void EditorTreeNode<T>::move(std::shared_ptr<EditorTreeNode<T>> to)
{
this->parent()->children().removeOne(this);
to->children().append(this);
}
template <typename T>
void EditorTreeNode<T>::moveChildren(std::shared_ptr<EditorTreeNode<T>> to)
{
for (auto child : childrenNodes)
child->move(to);
}
template <typename T>
void EditorTreeNode<T>::addChild(std::shared_ptr<EditorTreeNode<T>> child)
{
this->children().append(child);
child->setParen(this);
}
template <typename T>
bool EditorTreeNode<T>::removeChild(std::shared_ptr<EditorTreeNode<T>> child)
{
return this->children().removeOne(child);
}
template <typename T>
bool EditorTreeNode<T>::remove()
{
bool worked = true;
if (parentNode != nullptr) {
worked &= parentNode->children().removeOne(this);
}
if (childrenNodes.size() > 0) {
for (auto node : childrenNodes) {
worked &= node->remove();
}
}
return worked;
}
template <typename T>
std::shared_ptr<EditorTreeNode<T>> EditorTreeNode<T>::nextOnSameLevel()
{
if (nextSibling() != nullptr)
return nextSibling();
uint lvl = 1;
auto node = this->parentNode();
auto pnode = this;
while (lvl > 0 && node != nullptr) {
if (node != pnode->parentNode() && node->children() > 0) {
node = node->children().first();
--lvl;
} else {
pnode = node;
if (node->nextSibling() != nullptr)
node = node->nextSibling();
else {
if (node->parentNode() != nullptr) {
node = node->parentNode();
++lvl;
}
}
}
}
return node;
}

View File

@ -1,56 +0,0 @@
#ifndef EDITORTREENODE_H
#define EDITORTREENODE_H
#include <QList>
#include <memory>
#include <functional>
template <typename T>
class EditorTreeNode;
template <typename T>
class EditorTreeNode {
public:
explicit EditorTreeNode();
explicit EditorTreeNode(T v);
virtual ~EditorTreeNode();
const std::shared_ptr<EditorTreeNode<T>> nextSibling();
const std::shared_ptr<EditorTreeNode<T>> parent() { return parentNode; }
QList<std::shared_ptr<EditorTreeNode<T>>>& children() { return childrenNodes; }
void setParen(std::shared_ptr<EditorTreeNode<T>> parent) { this->parentNode = parent; }
T& value() { return val; }
void setValue(const T &val);
const std::shared_ptr<EditorTreeNode<T>> next(TreeWalkStrategy depth_first = TreeWalkStrategy::depthFirst);
const std::shared_ptr<EditorTreeNode<T>> getRoot();
void move(std::shared_ptr<EditorTreeNode<T>> to); // as child!
void moveChildren(std::shared_ptr<EditorTreeNode<T>> to); // move all children
void addChild(std::shared_ptr<EditorTreeNode<T>> child);
bool removeChild(std::shared_ptr<EditorTreeNode<T>> child);
bool remove();
void setDataChangedSignal(std::function<void(std::shared_ptr<EditorTreeNode<T>>)> f)
{
nodeDataChanged = f;
}
void setTreeChangedSignal(std::function<void(std::shared_ptr<EditorTreeNode<T>>)> f)
{
treeChanged = f;
}
private:
//signal callbacks only set in the root node
std::function<void(std::shared_ptr<EditorTreeNode<T>>)> nodeDataChanged;
std::function<void(std::shared_ptr<EditorTreeNode<T>>)> treeChanged;
T val;
std::shared_ptr<EditorTreeNode<T>> parentNode = nullptr;
QList<std::shared_ptr<EditorTreeNode<T>>> childrenNodes;
std::shared_ptr<EditorTreeNode<T>> nextOnSameLevel();
};
#endif // EDITORTREENODE_H