diff options
Diffstat (limited to 'src/ivymon')
-rwxr-xr-x | src/ivymon | 168 |
1 files changed, 133 insertions, 35 deletions
@@ -54,15 +54,21 @@ my $markers_cnt = 0; my $duration = 0; my $time = 0; my $fmtduration = '00:00'; -my $bytes = 0 ; + +# displayed messages counters my $messagesNumber = 0; +my $messagesLastNumber = 0; +my $messagesSpeed = 0; + my $bindingsFlag = 0; my $stopFlag = 0; my $noMessageYet = 1; my $jump_cnt = 0; -my $appname = 'IvyMon'; +my $noUpdateFlag = 0; +my $appname = 'IvyMon'; +$appname =~ s/ /_/g; # Rejeu messages array my @send_def = @@ -117,6 +123,15 @@ my @send_def = 'FileWrite Type=rejeu Name=', 'FileWrite Type=simu Name=', 'FileWrite Type=dump Name=', + 'SelectionEvent acc= wp= role= Flight=', + 'SelectionEvent acc= wp= Flight=', + 'DeselectionEvent acc= wp= role= Flight=', + 'DeselectionEvent acc= wp= Flight=', + 'ClosedClearanceEditor Acc= Wp= Role= Flight=', + 'ClosedClearanceEditor Acc= Wp= Flight=', + 'OpenClearanceEditor Acc= Wp= Role= Flight=', + 'OpenClearanceEditor Acc= Wp= Flight=', + 'SectorEvent Flight= SectorOut= SectorIn= Time=', ); # Rejeu available (not effective) bindings array @@ -331,11 +346,9 @@ my $top2_fm = $top_fm->Frame()->pack(-side => 'top', ); my $messagesLabel = $top2_fm->Label(-text => "Messages :")->pack(-side => 'left'); - -my $messagesCounterLabel = +my $messagesCounterValue = $top2_fm->Label(-textvariable => \$messagesNumber)->pack(-side => 'right'); - my $messagesText = $top_fm->Scrolled(Text, -scrollbars => 'e', @@ -349,7 +362,7 @@ my $messagesText = -side => 'bottom'); &wheelmousebindings($messagesText); $messagesText->bind('<1>', sub {$messagesText->focus;}); -$messagesText->bind('<Double-1>', \&marker); +$messagesText->tagBind('sender', '<Double-1>', \&marker); my $bgcolor = $messagesText->cget(-background); @@ -369,6 +382,30 @@ $messagesText->tagConfigure('marker3', -background => 'darkseagreen', $messagesText->tagConfigure('marker4', -background => 'ivory', -foreground => 'ivory'); +for my $marker (qw(marker0 marker1 marker2 marker3 marker4)) { + $messagesText->tagBind($marker, '<Double-1>', \&marker); +} + + +# check received messages speed and adjust drawing frequency +$messagesCounterValue->repeat(1000, sub { + $messagesSpeed = $messagesNumber - $messagesLastNumber; + $messagesLastNumber = $messagesNumber; + # if update mechanism is off, we force it here + if ($noUpdateFlag) { + $messagesCounterValue->update; + $messagesText->see('end'); + } + # if too many messages, update mechanism is unset + if ($messagesSpeed > 50) { + $noUpdateFlag = 1; + #print "$messagesSpeed received messages/second !\n"; + # in nominal case, update mechanism is set + # (each time a message is received, update is forced in Text window) + } else { + $noUpdateFlag = 0; + } +}); #---------------------------------------------------------------------------------- # Bindings area @@ -528,8 +565,15 @@ $control_fm->Checkbutton(-text => 'Balloon help', } ); $balloon_cb->grid(-column => 1, - -columnspan => 3, + -columnspan => 2, -row => 1); +my $exitButton = + $control_fm->Button(-height => 2, + -width => 4, + -command => [\&bye], + -text => 'Exit')->grid(-column => 3, + -row => 1); + my $loadButton = $control_fm->Button(-height => 2, -width => 4, @@ -566,13 +610,13 @@ my $stopButton = -command => [\&stop, 1], -text => "Scroll\nLock")->grid(-column => 2, -row => 3); -my $exitButton = +my $clearButton = $control_fm->Button(-height => 2, -width => 4, - -command => [\&bye], - -text => 'Exit')->grid(-column => 3, - -row => 3); - + -command => [\&clear, 1], + -state => 'normal', + -text => 'Clear')->grid(-column => 3, + -row => 3); #---------------------------------------------------------------------------------- # Update default bindings and messages lists #---------------------------------------------------------------------------------- @@ -609,7 +653,7 @@ $balloonhelp->attach($effectivebindingsList, -balloonmsg => ); $balloonhelp->attach($clientsListbox,-balloonmsg => "Select an application name to highlight\n". - "related Ivy messages in the Messages area"); + "related Ivy messages in the Messages area."); $balloonhelp->attach($sendEntry, -balloonmsg => "This input field is used to enter new messages or\n". "edit default one from list above. In both case, hit\n". @@ -623,8 +667,9 @@ $balloonhelp->attach($sendList, -balloonmsg => "or double click on predefined message to send it." ); $balloonhelp->attach($messagesText, -balloonmsg => - "You can insert colored marker by double-clicking between\n". - "two messages. Then, you can quickly access markers\n". + "You can insert colored marker by double-clicking on a\n". + "message application name (marker will be created after\n". + "the message). Then, you can quickly access markers\n". "using the [Jump] button in control panel. To remove a\n". "marker, just double-click on it." ); @@ -636,13 +681,25 @@ $balloonhelp->attach($searchEntry, -balloonmsg => "keys to access previous inputs." ); $balloonhelp->attach($stopButton, -balloonmsg => - "Stop scrolling in Messages area" + "Stop scrolling in Messages area." ); $balloonhelp->attach($startButton, -balloonmsg => - "Restart scrolling in Messages area" + "Restart scrolling in Messages area." ); $balloonhelp->attach($jumpButton, -balloonmsg => - "Access next marker in Messages area" + "Access next marker in Messages area." + ); +$balloonhelp->attach($clearButton, -balloonmsg => + "Remove messages displayed\n". + "in Messages area." + ); +$balloonhelp->attach($loadButton, -balloonmsg => + "Load messages file and display\n". + "its content in Messages area." + ); +$balloonhelp->attach($saveButton, -balloonmsg => + "Save the content of Messages\n". + "area in a file." ); # alarm on balloon help @@ -701,7 +758,9 @@ sub addIvyBinding { if ($stopFlag) { &bufferizeMessages(@_); } else { + &beforeUpdatingMessages; &updateMessages(@_); + &afterUpdatingMessages; } }]); @@ -724,6 +783,7 @@ sub checkClientsStatus { my $status = $_[4]; my $host = $_[5]; my $message; + $appname =~ s/ /_/g; if ($status eq 'died') { $connectedClients{$appname}--; } elsif ($status eq 'new') { @@ -819,7 +879,7 @@ sub marker { if ($foundmarker) { &deletemarker($foundmarker); } else { - my $index = $messagesText->index('current linestart'); + my $index = $messagesText->index('current linestart + 1 lines'); my $nb = $markers_cnt % 5; &addmarker($index, 'marker'.$nb); $markers_cnt++; @@ -855,24 +915,22 @@ sub bufferizeMessages { push(@messagesbuffer, [$sender, $message]); splice(@messagesbuffer, 0, 1) if @messagesbuffer > $history; -} +} # end bufferizeMessages -sub dumpBuffMessages { - my (@messages) = @_; - for my $msg (@messages) { - &updateMessages($msg->[0], $msg->[1]); - } +sub beforeUpdatingMessages { + $messagesText->configure(-state => 'normal'); + + +} # end beforeUpdatingMessages -} # end dumpBuffMessages sub updateMessages { - my ($sender, $message, $noUpdateFlag) = @_; + my ($sender, $message) = @_; $noMessageYet = 0; chomp($message); $message = '"' . $message . '"' ; # is scrolling is available, format and then display message my $text = "$sender $message\n"; - $messagesText->configure(-state => 'normal'); # look at history : compare widget text lines number with history size my ($linesNb) = split(/\./, $messagesText->index('end')); $linesNb--; @@ -893,13 +951,15 @@ sub updateMessages { $index1 = "$index2 + 1 chars"; $index2 = "$index1 + $msglen chars"; $messagesText->tagAdd($sender, $index1, $index2); - $messagesText->configure(-state => 'disabled'); - $messagesText->see('end'); - $bytes += length($message); $messagesText->update unless $noUpdateFlag; } # end updateMessages +sub afterUpdatingMessages { + $messagesText->see('end'); + $messagesText->configure(-state => 'disabled'); + +} # end afterUpdatingMessages sub highlightString { my ($i1, $i2) = @_; @@ -1131,7 +1191,9 @@ sub sendMsg { my $entry = shift; $ivy->sendMsgs($entry); $messagesNumber++; + &beforeUpdatingMessages; &updateMessages($appname, $entry); + &afterUpdatingMessages; } # end sendMsg @@ -1345,7 +1407,16 @@ sub searchAll { # Functions related to control panel #---------------------------------------------------------------------------------- sub bye { - #$ivy->stop; + if ($messagesNumber > 0) { + my $diag = $mw->Dialog(-text => + "Really quit Ivymon ?", + -default_button => 'OK', + -buttons => [qw(OK Cancel)]); + my $answer = $diag->Show; + if ($answer eq 'Cancel') { + return; + } + } exit; } @@ -1380,9 +1451,13 @@ sub start { $messagesText->insert('insert', "\n"); } $startButton->configure(-state => 'disabled'); + $noUpdateFlag = 1; + &beforeUpdatingMessages; for my $msg (@messagesbuffer) { &updateMessages($msg->[0], $msg->[1]); } + &afterUpdatingMessages; + $noUpdateFlag = 0; $stopFlag = 0; $stopButton->configure(-state => 'normal'); @@ -1414,6 +1489,8 @@ sub loadfile { my %client; my $step = 0; my $line = 0; + $noUpdateFlag = 1; + &beforeUpdatingMessages; while(<IN>) { chomp; if (/^applications=/) { @@ -1436,14 +1513,17 @@ sub loadfile { } $messagesNumber++; $line++; - &updateMessages($sender, $message, 1); + $message =~ s/^\"(.*)\"$/$1/; + &updateMessages($sender, $message); #print "sender=$sender message=$message step=$step line=$line\n"; $progressbar->value($line); $progressbar->update if ($step == 0 or $line % $step == 0); } } + &afterUpdatingMessages; + $noUpdateFlag = 0; close(IN); - $progressbar->value(0); + $progressbar->value(0); } # end loadfile @@ -1508,6 +1588,24 @@ sub savefile { } # end savefile +sub clear { + if ($messagesNumber > 0) { + my $diag = $mw->Dialog(-text => + "Do you really want to remove displayed messages ?", + -default_button => 'OK', + -buttons => [qw(OK Cancel)]); + my $answer = $diag->Show; + if ($answer eq 'Cancel') { + return; + } + } + $messagesText->configure(-state => 'normal'); + $messagesNumber = 0; + $messagesText->delete('0.0', 'end'); + $messagesText->configure(-state => 'disabled'); + +} # end clear + #---------------------------------------------------------------------------------- # General functions @@ -1662,7 +1760,7 @@ The B<Control> panel contains some general control buttons. Set ou unset balloon =item B<-b> ip:port -Sets the bus domain and port number to be used (default: 127.255.255.255:2010) +Sets the bus domain and port number to be used. Use $IVYBUS variable if defined. Default is 127.255.255.255:2010. =item B<-help> |