From 3842ea96668480cb6f3f319062fd1d283561fa70 Mon Sep 17 00:00:00 2001 From: etienne Date: Thu, 11 Jan 2001 10:58:15 +0000 Subject: Bufferisation des messages en mode Pause --- src/ivymon | 50 ++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 12 deletions(-) (limited to 'src') 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 { -- cgit v1.1