+ log_inited = 1;
+ if(follow_log)
+/* gtk_text_set_point(GTK_TEXT(w), -1); */
+ gtk_editable_set_position(GTK_EDITABLE(w), gtk_text_get_length(GTK_TEXT(w)));
+}
+
+void if_hostinfoclosebutton_clicked(GtkWidget *w, gpointer data)
+{
+ gtk_widget_destroy(GTK_WIDGET(data));
+}
+
+void update_hostinfo_dialog(GladeXML *x, node_t *n)
+{
+ GtkWidget *w;
+ char s[100];
+ avl_node_t *avlnode;
+ char *l[1];
+
+ w = glade_xml_get_widget(x, "HostInfoNameEntry");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostInfoNameEntry"); return; }
+ gtk_entry_set_text(GTK_ENTRY(w), n->name);
+
+ w = glade_xml_get_widget(x, "HostInfoHostnameEntry");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostInfoHostnameEntry"); return; }
+ gtk_entry_set_text(GTK_ENTRY(w), n->hostname);
+
+ w = glade_xml_get_widget(x, "HostInfoPortEntry");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostInfoPortEntry"); return; }
+/* snprintf(s, sizeof(s)-1, "%hd", "0"); */
+ gtk_entry_set_text(GTK_ENTRY(w), "port");
+
+ w = glade_xml_get_widget(x, "HostInfoVersionEntry");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostInfoVersionEntry"); return; }
+ gtk_entry_set_text(GTK_ENTRY(w), n->name);
+
+ w = glade_xml_get_widget(x, "HostInfoStatusEntry");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostInfoStatusEntry"); return; }
+/* snprintf(s, sizeof(s)-1, "%x", n->status); */
+ gtk_entry_set_text(GTK_ENTRY(w), "0");
+
+ w = glade_xml_get_widget(x, "HostInfoActiveCheckbutton");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostInfoActiveCheckbutton"); return; }
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), n->status.active);
+
+ w = glade_xml_get_widget(x, "HostInfoValidkeyCheckbutton");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostInfoValidkeyCheckbutton"); return; }
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), n->status.validkey);
+
+ w = glade_xml_get_widget(x, "HostInfoWaitingforkeyCheckbutton");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostInfoWaitingforkeyCheckbutton"); return; }
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), n->status.waitingforkey);
+
+ w = glade_xml_get_widget(x, "HostInfoVisitedCheckbutton");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostInfoVisitedCheckbutton"); return; }
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), n->status.visited);
+
+ w = glade_xml_get_widget(x, "HostInfoReachableCheckbutton");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostInfoReachableCheckbutton"); return; }
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), n->status.reachable);
+
+ w = glade_xml_get_widget(x, "HostInfoIndirectCheckbutton");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostInfoIndirectCheckbutton"); return; }
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), n->status.indirect);
+
+ w = glade_xml_get_widget(x, "HostInfoVisibleCheckbutton");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostInfoVisibleCheckbutton"); return; }
+/* gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), n->status.visible); */
+
+ w = glade_xml_get_widget(x, "HostInfoTCPOnlyCheckbutton");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostInfoTCPOnlyCheckbutton"); return; }
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), (n->options & OPTION_TCPONLY) != 0);
+
+ w = glade_xml_get_widget(x, "HostInfoIndirectdataCheckbutton");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostInfoIndirectdataCheckbutton"); return; }
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), (n->options & OPTION_INDIRECT) != 0);
+
+/* w = glade_xml_get_widget(x, "HostInfoWindow"); */
+/* if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostInfoWindow"); return; } */
+/* glade_xml_signal_connect_data(x, "on_HostInfoCloseButton_clicked", if_hostinfoclosebutton_clicked, (gpointer)w); */
+ w = glade_xml_get_widget(x, "HostConnectionsCList");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "HostConnectionsCList"); return; }
+ for(avlnode = n->edge_tree->head; avlnode; avlnode = avlnode->next)
+ {
+ if(((edge_t*)(avlnode->data))->to.node == n)
+ l[0] = ((edge_t*)(avlnode->data))->from.node->name;
+ else
+ l[0] = ((edge_t*)(avlnode->data))->to.node->name;
+ gtk_clist_append(GTK_CLIST(w), l);
+ }
+}
+
+void on_settings1_activate(GtkMenuItem *mi, gpointer data)
+{
+ GtkWidget *w;
+ GladeXML *x;
+
+ x = glade_xml_new(INTERFACE_FILE, "PropertyBox");
+ if(x == NULL)
+ {
+ log(0, TLOG_ERROR,
+ _("Could not find widget `%s'"),
+ "PropertyBox");
+ return;
+ }
+
+ w = glade_xml_get_widget(x, "PropertyBox");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "PropertyBox"); return; }
+ glade_xml_signal_autoconnect(x);
+}
+
+void on_logcontext_clear_activate(GtkMenuItem *mi, gpointer data)
+{
+ GtkWidget *l = glade_xml_get_widget(xml, "Messages");
+ if(!l) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "Messages"); return; }
+ gtk_editable_delete_text(GTK_EDITABLE(l), 0, -1); /* Delete from 0 to end of buffer */
+ log_inited = 0;
+}
+
+void on_logcontext_follow_activate(GtkMenuItem *mi, gpointer data)
+{
+ follow_log = !follow_log;
+}
+
+void on_messages_button_press_event(GtkWidget *w, GdkEventButton *event, gpointer data)
+{
+ GladeXML *x;
+ GtkWidget *menu;
+
+ if (event->button == 3)
+ {
+ x = glade_xml_new(INTERFACE_FILE, "LogContextMenu");
+ if(x == NULL)
+ {
+ log(0, TLOG_ERROR,
+ _("Could not find widget `%s'"),
+ "LogContextMenu");
+ return;
+ }
+
+ menu = glade_xml_get_widget(x, "LogContextMenu");
+ if(!menu) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "LogContextMenu"); return; }
+
+ glade_xml_signal_connect_data(x, "on_logcontext_clear_activate", on_logcontext_clear_activate, (gpointer)x);
+ glade_xml_signal_connect_data(x, "on_logcontext_follow_activate", on_logcontext_follow_activate, (gpointer)x);
+ w = glade_xml_get_widget(x, "LogContextFollow");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "LogContextFollow"); return; }
+ GTK_CHECK_MENU_ITEM(w)->active = follow_log;
+ gnome_popup_menu_do_popup_modal(menu, NULL, NULL, event, NULL);
+ gtk_widget_destroy(menu);
+ }
+}
+
+void on_canvascontext_shuffle_activate(GtkMenuItem *mi, gpointer data)
+{
+ avl_node_t *avlnode;
+ double newx, newy;
+
+ for(avlnode = node_tree->head; avlnode; avlnode = avlnode->next)
+ {
+ newx = ((double)random()) / ((double)RAND_MAX) * 500.0;
+ newy = ((double)random()) / ((double)RAND_MAX) * 300.0;
+ ((struct if_node_data*)((node_t *)(avlnode->data))->data)->x = newx;
+ ((struct if_node_data*)((node_t *)(avlnode->data))->data)->y = newy;
+
+ if(!((struct if_node_data*)((node_t*)(avlnode->data)))->visible)
+ continue;
+
+ x[((struct if_node_data*)((node_t*)(avlnode->data))->data)->id] = newx;
+ y[((struct if_node_data*)((node_t*)(avlnode->data))->data)->id] = newy;
+ }
+ inited = 0;
+ build_graph = 1;
+}
+
+void on_canvascontext_keep_drawing_activate(GtkMenuItem *mi, gpointer data)
+{
+ keep_drawing = !keep_drawing;
+}
+
+void on_canvascontext_minus50_activate(GtkMenuItem *mi, gpointer data)
+{
+ canvas_zoom *= 0.50;
+ gnome_canvas_set_pixels_per_unit(GNOME_CANVAS(canvas), canvas_zoom);
+}
+
+void on_canvascontext_minus25_activate(GtkMenuItem *mi, gpointer data)
+{
+ canvas_zoom *= 0.75;
+ gnome_canvas_set_pixels_per_unit(GNOME_CANVAS(canvas), canvas_zoom);
+}
+
+void on_canvascontext_minus10_activate(GtkMenuItem *mi, gpointer data)
+{
+ canvas_zoom *= 0.90;
+ gnome_canvas_set_pixels_per_unit(GNOME_CANVAS(canvas), canvas_zoom);
+}
+
+void on_canvascontext_default_activate(GtkMenuItem *mi, gpointer data)
+{
+ canvas_zoom = 1.00;
+ gnome_canvas_set_pixels_per_unit(GNOME_CANVAS(canvas), 1.00);
+}
+
+void on_canvascontext_plus10_activate(GtkMenuItem *mi, gpointer data)
+{
+ canvas_zoom *= 1.10;
+ gnome_canvas_set_pixels_per_unit(GNOME_CANVAS(canvas), canvas_zoom);
+}
+
+void on_canvascontext_plus25_activate(GtkMenuItem *mi, gpointer data)
+{
+ canvas_zoom *= 1.25;
+ gnome_canvas_set_pixels_per_unit(GNOME_CANVAS(canvas), canvas_zoom);
+}
+
+void on_canvascontext_plus50_activate(GtkMenuItem *mi, gpointer data)
+{
+ canvas_zoom *= 1.50;
+ gnome_canvas_set_pixels_per_unit(GNOME_CANVAS(canvas), canvas_zoom);
+}
+
+void on_canvas_button_press_event(GtkWidget *w, GdkEventButton *event, gpointer data)
+{
+ GladeXML *x;
+ GtkWidget *menu;
+
+ if (event->button == 3)
+ {
+ x = glade_xml_new(INTERFACE_FILE, "CanvasContextMenu");
+ if(x == NULL)
+ {
+ log(0, TLOG_ERROR,
+ _("Could not find widget `%s'"),
+ "CanvasContextMenu");
+ return;
+ }
+
+ menu = glade_xml_get_widget(x, "CanvasContextMenu");
+ if(!menu) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "CanvasContextMenu"); return; }
+
+ glade_xml_signal_autoconnect(x);
+ glade_xml_signal_connect_data(x, "on_canvascontext_shuffle_activate", on_canvascontext_shuffle_activate, (gpointer)x);
+ glade_xml_signal_connect_data(x, "on_canvascontext_keep_drawing_activate", on_canvascontext_keep_drawing_activate, (gpointer)x);
+ w = glade_xml_get_widget(x, "CanvasContextKeepDrawing");
+ if(!w) { log(0, TLOG_ERROR, _("Couldn't find widget `%s'"), "CanvasContextKeepDrawing"); return; }
+ GTK_CHECK_MENU_ITEM(w)->active = keep_drawing;
+ gnome_popup_menu_do_popup_modal(menu, NULL, NULL, event, NULL);
+ gtk_widget_destroy(menu);
+ }
+}
+
+void on_nodetree_button_press_event(GtkWidget *w, GdkEventButton *event, gpointer data)
+{
+ GtkCTreeNode *node;
+ int row, col;
+ gpointer lt;
+ GladeXML *x;
+
+ gtk_clist_get_selection_info(GTK_CLIST(w), event->x, event->y,
+ &row, &col);
+
+ node = gtk_ctree_node_nth(GTK_CTREE(w), row);
+ if(node == NULL)
+ return;
+ lt = gtk_ctree_node_get_row_data(GTK_CTREE(w), node);
+ if(event->type == GDK_2BUTTON_PRESS && event->button == 1)
+ {
+ /* Double left click on an item */
+ if(lt == NULL)
+ /* this is only a branch, double click wil (un)expand. */
+ return;
+
+ if(GTK_CTREE_ROW(node)->parent == hosts_ctn)
+ {
+ x = ((struct if_node_data*)(((node_t*)lt)->data))->hi_xml = glade_xml_new(INTERFACE_FILE, "HostInfoWindow");
+ if(x == NULL)
+ {
+ log(0, TLOG_ERROR,
+ _("Could not find widget `%s'"),
+ "HostInfoWindow");
+ return;
+ }
+ glade_xml_signal_autoconnect(x);
+ update_hostinfo_dialog(x, (node_t*)lt);
+ }
+ else
+ {
+ log(0, TLOG_ERROR,
+ "WHERE did you click?!");
+ }
+ /* so now we have access to all the data we want. */
+/* gldap_show_details(lt); */
+ return;
+ }
+/* else */
+/* if (event->button == 3) */
+/* { */
+/* GtkWidget *temp_menu; */
+/* temp_menu = gnome_popup_menu_new(data); */
+/* gnome_popup_menu_do_popup_modal(temp_menu, NULL, NULL, event, NULL); */
+/* gtk_widget_destroy(temp_menu); */
+/* } */
+}
+
+void on_exit1_activate(GtkMenuItem *mi, gpointer data)
+{
+ close_network_connections();
+ gtk_exit(0);
+}
+
+void on_info1_activate(GtkMenuItem *mi, gpointer data)
+{
+ GladeXML *x;
+ x = glade_xml_new(INTERFACE_FILE, "AboutWindow");
+ if(x == NULL)
+ {
+ log(0, TLOG_ERROR,
+ _("Could not find widget `%s'"),
+ "AboutWindow");
+ return;
+ }