diff options
Diffstat (limited to 'perl-install')
-rwxr-xr-x | perl-install/standalone/net_monitor | 109 |
1 files changed, 79 insertions, 30 deletions
diff --git a/perl-install/standalone/net_monitor b/perl-install/standalone/net_monitor index 031cbfab2..2c503a860 100755 --- a/perl-install/standalone/net_monitor +++ b/perl-install/standalone/net_monitor @@ -173,7 +173,9 @@ connection() if ($connect && !$isconnected || $disconnect && $isconnected); Gtk->main; Gtk->exit(0); +my $during_connection; sub connection { + $during_connection = 1; my $isconnected2 = $isconnected; $button_connect->set_sensitive(0); $button_close->set_sensitive(0); @@ -212,6 +214,7 @@ sub connection { }); $button_connect->set_sensitive(1); $button_close->set_sensitive(1); + undef $during_connection; 0; }); Gtk->main_iteration while Gtk->events_pending; @@ -316,6 +319,7 @@ sub change_color { my_gtk::gtkcolor($color[0]*65535, $color[1]*65535, $color[2]*65535); } +my $scale; sub update { connected_bg(\$isconnected); my @intfs = get_val(); @@ -328,30 +332,50 @@ sub update { $default_intf = $intf; $monitor->{$intf}{initialr} = $monitor->{$intf}{val}->[0]; $monitor->{$intf}{initialt} = $monitor->{$intf}{val}->[8]; + $monitor->{$intf}{darea} = new Gtk::DrawingArea(); + $monitor->{$intf}{darea}->set_events(["pointer_motion_mask"]); $notebook->append_page(gtkshow(my $page = gtkpack_(new Gtk::VBox(0,0), 0, gtkpack__(gtkset_border_width(new Gtk::HBox(0,0), 5), - gtksize($monitor->{$intf}{darea} = new Gtk::DrawingArea(),300, 150)), - 0, gtkpack__(gtkset_border_width(new Gtk::HBox(0,5), 5), - gtksignal_connect(my $button_t = gtkset_relief(new Gtk::Button(), 'none'), clicked => sub { - $colort = change_color($colort); - $gct->set_foreground($colort); - $_[0]->draw(undef); - }), - _("sent: "), $monitor->{$intf}{labelt} = new Gtk::Label("0")), - 0, gtkpack__(gtkset_border_width(new Gtk::HBox(0,5), 5), - gtksignal_connect(my $button_r = gtkset_relief(new Gtk::Button(), 'none'), clicked => sub { - $colorr = change_color($colorr); - $gcr->set_foreground($colorr); - $_[0]->draw(undef); - }), - _("received: "), $monitor->{$intf}{labelr} = new Gtk::Label("0")), - 0, gtkpack__(gtkset_border_width(new Gtk::HBox(0,5), 5), - gtksignal_connect(my $button_a = gtkset_relief(new Gtk::Button(), 'none'), clicked => sub { - $colora = change_color($colora); - $gca->set_foreground($colora); - $_[0]->draw(undef); - }), - _("average")) + gtksize($monitor->{$intf}{darea},300, 150)), + 0, gtkpack_(new Gtk::HBox(0,0), + 1, gtkpack__(new Gtk::VBox(0,0), + gtkpack__(gtkset_border_width(new Gtk::HBox(0,5), 5), + gtksignal_connect(my $button_t = gtkset_relief(new Gtk::Button(), 'none'), clicked => sub { + $colort = change_color($colort); + $gct->set_foreground($colort); + $_[0]->draw(undef); + }), + _("sent: "), $monitor->{$intf}{labelt} = new Gtk::Label("0")), + gtkpack__(gtkset_border_width(new Gtk::HBox(0,5), 5), + gtksignal_connect(my $button_r = gtkset_relief(new Gtk::Button(), 'none'), clicked => sub { + $colorr = change_color($colorr); + $gcr->set_foreground($colorr); + $_[0]->draw(undef); + }), + _("received: "), $monitor->{$intf}{labelr} = new Gtk::Label("0")), + gtkpack__(gtkset_border_width(new Gtk::HBox(0,5), 5), + gtksignal_connect(my $button_a = gtkset_relief(new Gtk::Button(), 'none'), clicked => sub { + $colora = change_color($colora); + $gca->set_foreground($colora); + $_[0]->draw(undef); + }), + _("average")) + ), + 0, gtkpack__(gtkset_border_width(new Gtk::VBox(0,0), 5), + gtkadd(gtkset_shadow_type(new Gtk::Frame(_("Local measure")), 'etched_out'), + gtkpack__(gtkset_border_width(new Gtk::VBox(0,0), 5), + gtkpack__(new Gtk::HBox(0,0), + _('sent: '), + my $measure_t = new Gtk::Label("0") + ), + gtkpack__(new Gtk::HBox(0,0), + _('received: '), + my $measure_r = new Gtk::Label("0") + ) + ) + ) + ) + ) )), new Gtk::Label($intf)); foreach my $i ([$button_t, $gct],[$button_r, $gcr],[$button_a, $gca]) { @@ -363,6 +387,18 @@ sub update { $monitor->{$intf}{referencer} = $monitor->{$intf}{val}->[0]; $monitor->{$intf}{referencet} = $monitor->{$intf}{val}->[8]; $monitor->{$intf}{pixmap_db}->draw_rectangle ($monitor->{$intf}{darea}->style->black_gc, 1, 0, 0, 300, 150); + $monitor->{$intf}{darea}->signal_connect( motion_notify_event => + sub { my ($w, $e) = @_; + my $x = $e->{'x'} - 50; + my $y = $e->{'y'}; + my $received = $x >= 0 ? $monitor->{$intf}{stack_r}[$x] : 0; + my $transmitted = $x >= 0 ? $monitor->{$intf}{stack_t}[$x] : 0; + my $type; + $y * $scale / 150 < $transmitted and $type = _('transmitted'); + (150 - $y) * $scale / 150 < $received and $type = _('received'); + $measure_r->set(formatXiB($received)); + $measure_t->set(formatXiB($transmitted)); + }); $monitor->{$intf}{darea}->signal_connect( expose_event => sub { $monitor->{$intf}{darea}->window->draw_pixmap ($monitor->{$intf}{darea}->style->bg_gc('normal'), $monitor->{$intf}{pixmap_db}, 0, 0, 0, 0, 300, 150); @@ -377,7 +413,7 @@ sub update { } @interfaces = @intfs; my $netc={}; - if ($isconnected != -1) { + if ($isconnected != -1 && !$during_connection) { $button_connect->set_sensitive(1); $label_c->set($isconnected ? _("Disconnect") : _("Connect")); $statusbar->pop(1); @@ -401,12 +437,13 @@ sub draw_monitor { foreach (@{$o->{stack_t}}) { $maxt = $_ if $_>$maxt } my $ech = $maxr + $maxt; $ech == 0 and $ech = 1; - my $step=50; + $scale = $ech; + my $step=49; foreach (@{$o->{stack_t}}) { $o->{pixmap_db}->draw_rectangle($gct, 1, $step, 0, 1, $_*150/$ech); $step++; } - $step=50; + $step=49; my ($av1, $av2, $last_a); foreach (@{$o->{stack_ta}}) { if($_ != -1) { @@ -420,12 +457,12 @@ sub draw_monitor { } $step++; } - $step=50; + $step=49; foreach (@{$o->{stack_r}}) { $o->{pixmap_db}->draw_rectangle($gcr, 1, $step, 151-$_*150/$ech, 1, $_*150/$ech); $step++; } - $step=50; + $step=49; ($av1, $av2) = undef; foreach (@{$o->{stack_ra}}) { if($_ != -1) { @@ -439,6 +476,7 @@ sub draw_monitor { $step++; } + my $switch = 1; my $gcl = new Gtk::Gdk::GC($o->{darea}->window); $gcl->set_foreground($o->{darea}->window->get_colormap->color_white()); $gcl->set_line_attributes (1, 'on-off-dash', 'not-last', 'round'); @@ -456,13 +494,24 @@ sub draw_monitor { if ($dif1 < $dif2) { $text = formatXiB((150-$i)*$ech/150); $gc2=$gcr; + my $x_l=5; + if ($i > 30 && $switch) { + $o->{pixmap_db}->draw_line($gct, $x_l, 0, $x_l, $i-30); + $o->{pixmap_db}->draw_line($gct, $x_l-1, 0, $x_l-1, $i-30); + $o->{pixmap_db}->draw_line($gct, $x_l+1, 0, $x_l+1, $i-30); + $o->{pixmap_db}->draw_polygon($gct, 1, $x_l-4, $i-30, $x_l+5, $i-30, $x_l, $i-25); + } + if ($switch) { + $o->{pixmap_db}->draw_line($gcr, $x_l, 150, $x_l, $i); + $o->{pixmap_db}->draw_line($gcr, $x_l-1, 150, $x_l-1, $i); + $o->{pixmap_db}->draw_line($gcr, $x_l+1, 150, $x_l+1, $i); + $o->{pixmap_db}->draw_polygon($gcr, 1, $x_l-5, $i, $x_l+5, $i, $x_l, $i-6); + } + undef $switch; } else { $text = formatXiB($i*$ech/150); $gc2=$gct; } -# $text = formatXiB((150-$i)*$ech/150); -# $gc2 = $o->{darea}->style->white_gc; - my $w = $style->font->string_width($text); $o->{pixmap_db}->draw_string($style->font, $gc2, 45-$w, $i+5, ($text) ); } |