summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsrc/ivymon50
1 files changed, 38 insertions, 12 deletions
diff --git a/src/ivymon b/src/ivymon
index e4a705a..ea05c5a 100755
--- a/src/ivymon
+++ b/src/ivymon
@@ -36,6 +36,8 @@ my $sendHistoryIndex = -1;
my %bindHistory;
my @bindHistory;
my $bindHistoryIndex = -1;
+
+my @messagesbuffer;
my $duration = 0;
my $time = 0;
@@ -650,18 +652,28 @@ sub selectClient {
# Fonctions associees a la gestion de l'affichage des messages
#----------------------------------------------------------------------------------
sub updateMessages {
- my ($sender, $message) = @_;
- return if $stopFlag or not $message;
+ my ($sender, $message, $force) = @_;
+ return unless $message;
chomp($message);
+ # cas ou l'on se trouve dans le mode pause, et ou l'on ne force pas l'affichage
+ # des messages => on bufferise
+ if ($stopFlag and not $force) {
+ push(@messagesbuffer, [$sender, $message]);
+ splice(@messagesbuffer, 0, 1) if @messagesbuffer > $history;
+ return;
+ }
+ # sinon, on formate le message et on l'affiche
my $text = "$sender $message\n";
$messagesText->configure(-state => 'normal');
- # on teste la taille de la fenetre de messages
+ # on regarde si l'historique n'est pas depasse : on compare le nombre de lignes
+ # contenues dans le widget text avec la taille de l'historique.
my ($linesNb) = split(/\./, $messagesText->index('end'));
- #print "linesNb=$linesNb history=$history\n";
if ($linesNb > $history) {
- my $dl = $linesNb - $history;
+ my $dl = $linesNb - $history + 1;
$messagesText->delete('1.0', "1.0 + $dl lines");
- }
+ $messagesText->update;
+ }
+
# on extrait les index de debut et de fin de l'application emettrice
my $index1 = $messagesText->index('end');
$index1 = "$index1 - 1 lines";
@@ -678,7 +690,7 @@ sub updateMessages {
$messagesText->see('end');
$messagesNumber++;
$bytes += length($message);
- $mw->update;
+ $messagesText->update;
}
sub printInfo {
@@ -1110,10 +1122,11 @@ sub bye {
sub stop {
my $flag = shift;
+ # on reinitialise le buffer de messages
+ @messagesbuffer = ();
$stopFlag = 1;
$startButton->configure(-state => 'normal');
$stopButton->configure(-state => 'disabled');
- #&stopIvyBindings;
if ($flag) {
&setEditMode;
my $fmttime = &formattime($time);
@@ -1124,15 +1137,28 @@ sub stop {
sub start {
my $flag = shift;
- $stopFlag = 0;
- $stopButton->configure(-state => 'normal');
- $startButton->configure(-state => 'disabled');
- #&startIvyBindings;
+ # si le curseur n'est pas au debut d'une ligne (car une edition a ete faite,
+ # sans RC final), on passe a la ligne suivante pour assurer une meilleure
+ # lisibilite
+ if ($messagesText->index('insert') !~ /\.0$/) {
+ $messagesText->insert('insert', "\n");
+ }
+ # puis, on affiche les messages bufferises
+ &unsetEditMode;
+ for (@messagesbuffer) {
+ &updateMessages(@$_, 1);
+ }
+ # on affiche le message de reprise
if ($flag) {
+ &setEditMode;
my $fmttime = &formattime($time);
&printInfo("Restarted at $fmttime");
&unsetEditMode;
}
+ # puis on re-active l'affichage des messages recus
+ $stopFlag = 0;
+ $stopButton->configure(-state => 'normal');
+ $startButton->configure(-state => 'disabled');
}
sub updateDuration {