#!/usr/bin/perl -w
package MyWidget;
use Qt 2.0;
import Qt::app;
use CannonField;
use LCDRange;
@ISA = qw(Qt::Widget);
sub new {
my $self = shift->SUPER::new(@_);
$self->setMinimumSize(500, 355);
my $quit = Qt::PushButton->new('Quit', $self, 'quit');
$quit->setGeometry(10, 10, 75, 30);
$quit->setFont(Qt::Font->new('Times', 18, Qt::Font::Bold));
$app->connect($quit, 'clicked()', 'quit()');
my $angle = LCDRange->new('ANGLE', $self, 'angle');
$angle->setRange(5, 70);
$angle->setGeometry(10, $quit->y() + $quit->height() + 10, 75, 130);
my $force = LCDRange->new('FORCE', $self, 'force');
$force->setRange(10, 50);
$force->setGeometry(10, $angle->y() + $angle->height() + 10, 75, 130);
my $cannonField = CannonField->new($self, 'cannonField');
$cannonField->move($angle->x() + $angle->width() + 10, $angle->y());
$cannonField->setBackgroundColor(Qt::Color->new(250, 250, 200));
$cannonField->connect($angle, 'valueChanged(int)', 'setAngle(int)');
$angle->connect($cannonField, 'angleChanged(int)', 'setValue(int)');
$cannonField->connect($force, 'valueChanged(int)', 'setForce(int)');
$force->connect($cannonField, 'forceChanged(int)', 'setValue(int)');
$cannonField->connect($cannonField, 'hit()', 'newTarget()');
$angle->setValue(60);
$force->setValue(25);
my $shoot = Qt::PushButton->new('Shoot', $self, 'shoot');
$shoot->setGeometry(90, 10, 75, 30);
$shoot->setFont(Qt::Font->new('Times', 18, Qt::Font::Bold));
$cannonField->connect($shoot, 'clicked()', 'shoot()');
@$self{'quit', 'shoot', 'angle', 'force', 'cannonField'} =
($quit, $shoot, $angle, $force, $cannonField);
return $self;
}
sub resizeEvent {
my $self = shift;
my $cannonField = $self->{'cannonField'};
$cannonField->resize($self->width() - $cannonField->x() - 10,
$self->height() - $cannonField->y() - 10);
}
package main;
use Qt 2.0;
import Qt::app;
$w = MyWidget->new;
$w->setGeometry(100, 100, 500, 355);
$app->setMainWidget($w);
$w->show();
exit $app->exec();