+ $self->set_image('image_fuel', $row, 'fuel', $val || 0);
+}
+
+sub set_car_icon {
+ my ($self, $row, $name) = @_;
+
+ $self->set_image('image_car', $row, 'car', $name);
+}
+
+sub set_lap {
+ my ($self, $row, $text) = @_;
+
+ $text = '--' if !defined $text;
+
+ $self->set_label('label_lap', $row, $text, 'lap');
+}
+
+sub set_distance {
+ my ($self, $row, $time, $lap_diff, $time_diff, $greyout) = @_;
+
+ my $text = '--';
+
+ if (defined $time) {
+ $text = format_race_time($time);
+ } elsif (defined $time_diff) {
+ $text = '−' . format_lap_time($time_diff);
+ } elsif (defined $lap_diff) {
+ $text = '−' . $lap_diff
+ . ($lap_diff == 1 ? ' lap' : ' laps');
+ }
+
+ if ($greyout) {
+ $text = '<span fgcolor="grey">' . $text . '</span>';
+ }
+
+ $self->set_label('label_distance', $row, $text);
+}
+
+sub set_laptime {
+ my ($self, $row, $text) = @_;
+
+ $self->set_label('label_laptime', $row, format_lap_time($text));
+}
+
+sub set_avg_lap {
+ my ($self, $row, $text) = @_;
+
+ $self->set_label('label_avg_lap', $row, format_lap_time($text));
+}
+
+sub set_best_lap {
+ my ($self, $row, $text) = @_;
+
+ $self->set_label('label_best_lap', $row, format_lap_time($text));
+}
+
+sub set_name {
+ my ($self, $row, $text) = @_;
+
+ $self->set_label('label_name', $row, $text);
+}
+
+sub set_car_id {
+ my ($self, $row, $text) = @_;
+
+ $self->set_label('label_car_id', $row, $text);
+}
+
+sub show_semaphore {
+ my ($self, $num) = @_;
+
+ my $win = $self->{semaphore_win};
+ if (defined $num) {
+ my $img = $self->{semaphore_img};
+ my $pixbuf = $self->{semaphore_images}->[$num];
+ $img->set_from_pixbuf($pixbuf);
+ $win->show;
+ } else {
+ $win->hide;
+ }
+}
+
+sub rounds {
+ my ($self, $text) = @_;
+
+ $self->set_label('label_lap_global', undef, $text);
+}
+
+sub time {
+ my ($self, $text) = @_;
+
+ $self->set_label('label_time_global', undef, format_race_time($text));
+}
+
+sub best_lap {
+ my ($self, $time, $who) = @_;
+
+ my $text = format_lap_time($time);
+ $text .= ' by ' . $who
+ if defined $who;
+ $self->set_label('label_best_lap_global', undef, $text);
+}
+
+sub format_race_time {
+ my ($seconds) = @_;
+
+ return '--' if !defined $seconds;
+
+ my $hours = int($seconds / 3600);
+ $seconds -= 3600 * $hours;
+
+ my $mins = int($seconds / 60);
+ $seconds -= 60 * $mins;
+
+ return $hours
+ ? sprintf('%d:%02d:%04.1f', $hours, $mins, $seconds)
+ : sprintf('%d:%04.1f', $mins, $seconds);
+}
+
+sub format_lap_time {
+ my ($seconds) = @_;
+
+ return defined $seconds
+ ? sprintf('%.2f', $seconds)
+ : '--';
+}
+
+sub set_state {
+ my ($self, $num, $name) = @_;