boolean validLevelSeries(TreeInfo *node)
{
- return (node != NULL && !node->node_group && !node->parent_link);
+ // in a number of cases, tree node is no valid level set
+ if (node == NULL || node->node_group || node->parent_link || node->is_copy)
+ return FALSE;
+
+ return TRUE;
+}
+
+TreeInfo *getValidLevelSeries(TreeInfo *node, TreeInfo *default_node)
+{
+ if (validLevelSeries(node))
+ return node;
+ else if (node->is_copy)
+ return getTreeInfoFromIdentifier(leveldir_first, node->identifier);
+ else
+ return getFirstValidTreeInfoEntry(default_node);
}
TreeInfo *getFirstValidTreeInfoEntry(TreeInfo *node)
if (node_group)
return node_group;
}
- else if (!node->parent_link)
+ else if (!node->parent_link && !node->is_copy)
{
if (strEqual(identifier, node->identifier))
return node;
ti->sort_priority = LEVELCLASS_UNDEFINED; // default: least priority
ti->latest_engine = FALSE; // default: get from level
ti->parent_link = FALSE;
+ ti->is_copy = FALSE;
ti->in_user_dir = FALSE;
ti->user_defined = FALSE;
ti->color = 0;
ti->sort_priority = parent->sort_priority;
ti->latest_engine = parent->latest_engine;
ti->parent_link = FALSE;
+ ti->is_copy = FALSE;
ti->in_user_dir = parent->in_user_dir;
ti->user_defined = parent->user_defined;
ti->color = parent->color;
ti_copy->level_group = ti->level_group;
ti_copy->parent_link = ti->parent_link;
+ ti_copy->is_copy = ti->is_copy;
ti_copy->in_user_dir = ti->in_user_dir;
ti_copy->user_defined = ti->user_defined;
ti_copy->readonly = ti->readonly;
{
LevelDirTree *node_last = getTreeInfoFromIdentifier(leveldir_first,
last_level_series[i]);
+ if (node_last == NULL)
+ continue;
*node_new = getTreeInfoCopy(node_last); // copy complete node
(*node_new)->node_top = &leveldir_first; // correct top node link
(*node_new)->node_parent = leveldir_last; // correct parent node link
+ (*node_new)->is_copy = TRUE; // mark entry as node copy
+
(*node_new)->node_group = NULL;
(*node_new)->next = NULL;