X-Git-Url: https://www.fi.muni.cz/~kas/git//home/kas/public_html/git/?a=blobdiff_plain;f=gui.pl;h=0ea57b38ef24417d6d01fde9349631be306f16ea;hb=d311baf05cce488606946a68ffee19980681030b;hp=1df07dea30af65a31b8c426d603b24d4ff5eafac;hpb=d8a6466c428a8a39a5b065c8f82c9b48913202f4;p=slotcarman.git diff --git a/gui.pl b/gui.pl index 1df07de..0ea57b3 100755 --- a/gui.pl +++ b/gui.pl @@ -6,119 +6,62 @@ use utf8; use Gtk2 '-init'; use Glib qw(TRUE FALSE); +use SCX::GUI; +use SCX::Track; use SCX::Reader; -my @controllers = (0, 0, 0, 0, 0, 0); my $no_reader = 0; -my $builder = Gtk2::Builder->new; -$builder->add_from_file('slotcarman.glade'); +my $gui = SCX::GUI->new; +my $track = SCX::Track->new({ gui => $gui }); -my $window = $builder->get_object('slotcarman'); +if (!$no_reader) { + my $reader = SCX::Reader->new({ + portname => '/dev/ttyUSB0', + logfile => 'log', + track => $track, + }); -$builder->connect_signals(undef); -$window->show(); - -sub quit { - Gtk2->main_quit; - return FALSE; + Glib::IO->add_watch(fileno($reader->fh), 'in', \&scx_read, $reader); } -my $reader = SCX::Reader->new({ - portname => '/dev/ttyUSB0', - logfile => 'log', - callback => \&do_packet, -}) if !$no_reader; +$track->car(0)->set_model('F1 Ferrari'); +$track->car(1)->set_model('F1 McLaren'); +$track->car(2)->set_model('F1 Williams'); +$track->car(3)->set_model('Citroen Xsara'); +$track->car(4)->set_model('Citroen C4'); +$track->car(5)->set_model('Ford Focus'); -sub scx_read { - my $event = shift; +$track->car(0)->set_lap(13); +$track->car(1)->set_lap(11); +$track->car(2)->set_lap(10); +$track->car(3)->set_lap(undef); +$track->car(4)->set_lap(undef); +$track->car(5)->set_lap(undef); - $reader->read(); - return TRUE; -} - -Glib::IO->add_watch(fileno($reader->fh), 'in', \&scx_read, 1) - if !$no_reader; - -Gtk2->main(); +$track->car(0)->set_laptime(9.12322); +$track->car(1)->set_laptime(15.313); +$track->car(2)->set_laptime(8.193); -sub do_packet { - my (@data) = @_; - - if ($data[0] == 0xff) { # controller status - for my $controller (1..6) { - my $byte = $data[$controller]; - next if defined $controllers[$controller-1] - && $controllers[$controller-1] == $byte; - $controllers[$controller-1] = $byte; - - my $progressbar = $builder->get_object( - 'progressbar_controller'.$controller); - if ($byte == 0xaa) { - $progressbar->set_text('inactive'); - $progressbar->set_fraction(0); - next; - } - my $light = !($byte & 0x20); - my $backbutton = !($byte & 0x10); - my $speed = $byte & 0x0f; - - my $text = ($backbutton ? '+' : '') . $speed; - $progressbar->set_text($text); - $progressbar->set_fraction($speed / 12); - } - } elsif ($data[0] == 0xd6) { # fuel status - my @fuel = (0, - $data[1] >> 4, $data[1] & 0x0f, - $data[2] >> 4, $data[2] & 0x0f, - $data[3] >> 4, $data[3] & 0x0f, - ); - for my $car (1..6) { - next if defined $controllers[$car-1] - &&$controllers[$car-1] == $fuel[$car]; - - my $progressbar = $builder->get_object( - 'progressbar_fuel'.$car); - $progressbar->set_fraction($fuel[$car]/8); - } - } else { - print "Unknown packet", - (map { sprintf(" %02x", $_) } @data), "\n"; - } -} - -__END__ -use Gtk2 '-init'; +$track->car(0)->set_driver('Ivi'); +$track->car(1)->set_driver('Filípek'); +$track->car(2)->set_driver('Táta'); -my $window = Gtk2::Window->new('toplevel'); -$window->signal_connect(delete_event => sub { Gtk2->main_quit; return FALSE }); -$window->set_title("Slot Cars Manager"); +$gui->show; -$window->set_border_width(10); - -my $button = Gtk2::Button->new("Button 1"); -$button->signal_connect(clicked => \&callback, 'button 1'); - -my $box1 = Gtk2::HBox->new(FALSE, 0); -$window->add($box1); -$box1->pack_start($button, TRUE, TRUE, 0); - -$button->show; -$button = Gtk2::Button->new("Button 2"); -$button->signal_connect(clicked => \&callback, 'button 2'); -$box1->pack_start($button, TRUE, TRUE, 0); +Gtk2->main(); -$button->show; -$box1->show; -$window->show; +exit 0; -Gtk2->main(); +sub quit { + Gtk2->main_quit; + return FALSE; +} +sub scx_read { + my ($event, $fh, $reader) = @_; -sub callback -{ - my ($button, $data) = @_; - - print "Hello again - $data was pressed\n"; + $reader->read(); + return TRUE; }