+void if_node_create(node_t *n)
+{
+ GnomeCanvasGroup *group;
+
+ group = gnome_canvas_root(GNOME_CANVAS(canvas));
+ group = GNOME_CANVAS_GROUP(gnome_canvas_item_new(group,
+ gnome_canvas_group_get_type(),
+ "x", 0.0,
+ "y", 0.0,
+ NULL));
+
+ gnome_canvas_item_new(group, gnome_canvas_ellipse_get_type(),
+ "x1", -30.0,
+ "y1", -08.0,
+ "x2", 30.0,
+ "y2", 08.0,
+ "fill_color_rgba", 0x5f9ea0ff,
+ "outline_color", "black",
+ "width_pixels", 0,
+ NULL);
+
+ gnome_canvas_item_new(group,
+ gnome_canvas_text_get_type(),
+ "x", 0.0,
+ "y", 0.0,
+ "text", n->name,
+ "anchor", GTK_ANCHOR_CENTER,
+ "fill_color", "white",
+ "font", "-*-verdana-medium-r-*-*-10-*-*-*-*-*-iso8859-1",
+ NULL);
+
+ n->item = GNOME_CANVAS_ITEM(group);
+ n->x = n->y = 0.0;
+ gtk_object_set_user_data(GTK_OBJECT(group), (gpointer)n);
+
+ gtk_signal_connect(GTK_OBJECT(n->item), "event", (GtkSignalFunc) item_event, NULL);
+
+ gnome_canvas_item_hide(GNOME_CANVAS_ITEM(n->item));
+}
+
+void if_node_visible(node_t *n)
+{
+ int i;
+ avl_node_t *avlnode;
+ double newx, newy;
+
+ if(!n->item)
+ return;
+
+ if(n->status.visible)
+ /* This node is already shown */
+ return;
+
+ n->status.visible = 1;
+
+ newx = 250.0 + 200.0 * sin(number_of_nodes / 10.0 * M_PI);
+ newy = 150.0 - 100.0 * cos(number_of_nodes / 10.0 * M_PI);
+ gnome_canvas_item_move(GNOME_CANVAS_ITEM(n->item), newx - n->x, newy - n->y);
+ n->x = newx;
+ n->y = newy;
+
+ for(i = 0, avlnode = node_tree->head; avlnode; avlnode = avlnode->next, i++)
+ {
+ if(!((node_t*)(avlnode->data))->status.visible)
+ continue;
+
+ nodes[i] = (node_t *)(avlnode->data);
+ nodes[i]->id = i;
+ }
+ number_of_nodes = i;
+
+ gnome_canvas_item_show(GNOME_CANVAS_ITEM(n->item));
+ gnome_canvas_update_now(GNOME_CANVAS(canvas));
+
+ /* (Re)start calculations */
+ inited = 0;
+ build_graph = 1;
+}
+
+void if_node_invisible(node_t *n)
+{
+ int i;
+ avl_node_t *avlnode;
+
+ if(!n->item)
+ return;
+
+ if(!n->status.visible)
+ /* This node is already invisible */
+ return;
+
+ n->status.visible = 0;
+
+ for(i = 0, avlnode = node_tree->head; avlnode; avlnode = avlnode->next, i++)
+ {
+ if(!((node_t*)(avlnode->data))->status.visible)
+ continue;
+
+ nodes[i] = (node_t *)(avlnode->data);
+ nodes[i]->id = i;
+ }
+ number_of_nodes = i;
+
+ gnome_canvas_item_hide(GNOME_CANVAS_ITEM(n->item));
+ gnome_canvas_update_now(GNOME_CANVAS(canvas));
+
+ /* (Re)start calculations */
+ inited = 0;
+ build_graph = 1;
+}
+