+ glade_xml_signal_autoconnect(x);
+}
+
+void on_graph_window1_activate(GtkMenuItem *mi, gpointer data)
+{
+ int i;
+ avl_node_t *avlnode;
+ double newx, newy;
+
+ canvas_xml = glade_xml_new(INTERFACE_FILE, "GraphWindow");
+ if(canvas_xml == NULL)
+ {
+ log(0, TLOG_ERROR,
+ _("Could not find widget `%s'"),
+ "GraphWindow");
+ return;
+ }
+ glade_xml_signal_autoconnect(canvas_xml);
+ canvas = glade_xml_get_widget(canvas_xml, "canvas1");
+ if(canvas == NULL) { log(0, TLOG_ERROR, _("Could not find widget `%s'"), "canvas1"); return; }
+
+ for(i = 0, avlnode = node_tree->head; avlnode; avlnode = avlnode->next)
+ {
+ node_t *n = (node_t*)(avlnode->data);
+
+ if(!((struct if_node_data*)(n->data))->item)
+ if_node_create(n);
+
+ if(!n->status.reachable)
+ continue;
+
+ newx = 250.0 + 200.0 * sin(i / 10.0 * M_PI);
+ newy = 150.0 - 100.0 * cos(i / 10.0 * M_PI);
+ gnome_canvas_item_move(GNOME_CANVAS_ITEM(((struct if_node_data*)(n->data))->item), newx - ((struct if_node_data*)(n->data))->x, newy - ((struct if_node_data*)(n->data))->y);
+ ((struct if_node_data*)(n->data))->x = newx;
+ ((struct if_node_data*)(n->data))->y = newy;
+
+ ((struct if_node_data*)(n->data))->id = i;
+
+ gnome_canvas_item_show(GNOME_CANVAS_ITEM(((struct if_node_data*)(n->data))->item));
+ gnome_canvas_update_now(GNOME_CANVAS(canvas));
+ nodes[i] = n;
+ i++;
+ }
+
+ number_of_nodes = i;
+
+ inited = 0;
+ build_graph = 1;
+ canvas_visible = 1;
+}
+
+void on_log_window1_activate(GtkMenuItem *mi, gpointer data)
+{
+ GladeXML *x;
+ GtkWidget *w;
+
+ x = glade_xml_new(INTERFACE_FILE, "LogWindow");
+ if(x == NULL)
+ {
+ log(0, TLOG_ERROR,
+ _("Could not find widget `%s'"),
+ "LogWindow");
+ return;
+ }
+ log_window = glade_xml_get_widget(x, "Messages");
+ if(!log_window)
+ {
+ log(0, TLOG_ERROR,
+ _("Could not find widget `%s'"),
+ "Messages");
+ return;
+ }
+ w = glade_xml_get_widget(x, "DebugLevelSpinbutton");
+ if(!w)
+ {
+ log(0, TLOG_ERROR,
+ _("Could not find widget `%s'"),
+ "DebugLevelSpinbutton");
+ return;
+ }
+ gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), (float)debug_lvl);
+
+ glade_xml_signal_autoconnect(x);
+ log_visible = 1;
+ log_add_hook(log_gtk);
+ log(0, TLOG_NOTICE, "Logging started.\n");
+
+}
+
+void on_debug_level_changed(GtkSpinButton *sb, gpointer data)
+{
+ debug_lvl = gtk_spin_button_get_value_as_int(sb);
+}
+
+void on_logwindow_close_clicked(GtkButton *b, gpointer data)
+{
+ GladeXML *x;
+ GtkWidget *w;
+
+ x = glade_xml_new(INTERFACE_FILE, "LogWindow");
+ if(x == NULL)
+ {
+ log(0, TLOG_ERROR,
+ _("Could not find widget `%s'"),
+ "LogWindow");
+ return;
+ }
+ w = glade_xml_get_widget(x, "LogWindow");
+ if(!w)
+ {
+ log(0, TLOG_ERROR,
+ _("Could not find widget `%s'"),
+ "LogWindow");
+ return;
+ }
+ gtk_widget_destroy(w);
+}
+
+void on_spinbutton2_changed(GtkSpinButton *sb, gpointer data)
+{
+ canvas_zoom = gtk_spin_button_get_value_as_float(sb) / 100.0;
+ gnome_canvas_set_pixels_per_unit(GNOME_CANVAS(canvas), canvas_zoom);
+}
+
+void on_checkbutton1_toggled(GtkCheckButton *cb, gpointer data)
+{
+ keep_drawing = !keep_drawing;
+}
+
+void on_button19_clicked(GtkWidget *bt, GdkEventButton *ev, gpointer data)
+{
+ shuffle_nodes();
+}
+
+void on_button18_clicked(GtkWidget *bt, GdkEventButton *ev, gpointer data)
+{
+ GtkWidget *w;
+
+ w = glade_xml_get_widget(canvas_xml, "GraphWindow");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "GraphWindow"); return; }
+ gtk_object_destroy(GTK_OBJECT(w));
+ build_graph = 0;
+ canvas_visible = 0;