예제 #1
0
파일: demo.c 프로젝트: serge-rgb/gui
static int
upload_tree(struct test_tree *base, struct gui_tree *tree, struct tree_node *node)
{
    int i = 0, n = 0;
    enum gui_tree_node_operation op;
    if (node->count) {
        i = 0;
        op = gui_panel_tree_begin_node(tree, node->name, &node->state);
        while (i < node->count)
            i += upload_tree(base, tree, node->children[i]);
        gui_panel_tree_end_node(tree);
    }
    else op = gui_panel_tree_leaf(tree, node->name, &node->state);

    switch (op) {
    case GUI_NODE_NOP: break;
    case GUI_NODE_CUT:
        tree_remove_node(node->parent, node);
        tree_push_node(base, node);
        return 0;
    case GUI_NODE_DELETE:
        tree_remove_node(node->parent, node); break;
        return 0;
    case GUI_NODE_PASTE:
        i = 0; n = base->count;
        while (i++ < n)
            tree_add_node(node, tree_pop_node(base));
    case GUI_NODE_CLONE:
    default:break;
    }
    return 1;
}
예제 #2
0
파일: tree.c 프로젝트: juquetquentin/42sh
t_tree		*create_tree(t_order *commande, t_order *last_order)
{
  t_order	*bigger;
  t_tree	*current;
      static int	i = 0;

      if (last_order == NULL)
	i = 0;
      else if (i++ > 500)
	return (NULL);
  if (!commande)
    return (NULL);
  if ((bigger = get_bigger(commande)) == NULL || bigger == last_order)
    return (NULL);
  current = tree_pop_node(bigger);
  current->left = create_tree(commande, bigger);
  current->right = create_tree(bigger->next, bigger);
  return (current);
}