]> www.fi.muni.cz Git - slotcarman.git/blobdiff - SCX/GUI.pm
Lap/time counting, car icon displaing.
[slotcarman.git] / SCX / GUI.pm
index 9190fe39a328a4660dcb2e612d65893751aeea24..a0fd69122f6a36a7521020bdac13268f2fc1ab56 100755 (executable)
@@ -5,6 +5,7 @@ package SCX::GUI;
 use strict;
 use utf8;
 
+use Encode;
 use Gtk2 '-init';
 use Glib qw(TRUE FALSE);
 
@@ -20,6 +21,7 @@ sub new {
                fuel_images => [
                        load_image_set('img/fuel%d.svg', 8, 100)
                ],
+               car_images => load_image_dir('img/SCXCars', 100),
                builder => Gtk2::Builder->new,
        };
 
@@ -57,6 +59,30 @@ sub load_image_set {
        return @rv;
 }
 
+sub load_image_dir {
+       my ($dir, $height) = @_;
+
+       my %rv;
+       for my $file (<$dir/*>) {
+               $file = Encode::decode('utf-8', $file);
+               my $name = $file;
+               $name =~ s/.*\///;
+               $name =~ s/\..*?$//;
+               $name =~ s/[-_]/ /g;
+               $name =~ s/\s+/ /g;
+
+
+               my $dummy = Gtk2::Gdk::Pixbuf->new_from_file($file)
+                       or next;
+
+               my $width = $dummy->get_width * $height / $dummy->get_height;
+               $rv{$name} = Gtk2::Gdk::Pixbuf->new_from_file_at_scale(
+                       $file, $width, $height, TRUE
+               );
+       }
+       return \%rv;
+}
+
 sub set_throttle {
        my ($self, $row, $val) = @_;
 
@@ -77,5 +103,55 @@ sub set_fuel {
        $image->set_from_pixbuf($self->{fuel_images}->[$val]);
 }
 
+sub set_car_icon {
+       my ($self, $row, $name) = @_;
+
+       $row++;
+       my $pixbuf = $self->{car_images}->{$name};
+       if (!$pixbuf) {
+               print "No car image for $name.\n";
+               return;
+       }
+
+       my $image = $self->get_object("image_car$row");
+       $image->set_from_pixbuf($pixbuf);
+}
+
+sub set_lap {
+       my ($self, $row, $text) = @_;
+
+       ++$row;
+       my $label = $self->get_object("label_lap$row")
+               or die "Can't get label_lap$row";
+       $label->set_label($text);
+}
+
+sub set_laptime {
+       my ($self, $row, $text) = @_;
+
+       ++$row;
+       my $label = $self->get_object("label_laptime$row")
+               or die "Can't get label_laptime$row";
+       $label->set_label($text);
+}
+
+sub set_best_lap {
+       my ($self, $row, $text) = @_;
+
+       ++$row;
+       my $label = $self->get_object("label_best_lap$row")
+               or die "Can't get label_best_lap$row";
+       $label->set_label($text);
+}
+
+sub set_driver {
+       my ($self, $row, $text) = @_;
+
+       ++$row;
+       my $label = $self->get_object("label_name$row")
+               or die "Can't get label_lap$row";
+       $label->set_label($text);
+}
+
 1;