# $Id: TButton.pm,v 1.1 2000/06/06 07:05:41 mike_s Exp $
package Dialog::TButton;
use Carp;
use Dialog::Const;
require Dialog;
sub TButton::new {
my($self, $owner, $name, $y, $x, $s, $res) = @_;
$self = {
owner => $owner,
name => $name,
tabstop => 1,
y => $y,
x => $x,
s => $s,
res => $res,
};
bless $self;
$self->draw();
return $self;
}
sub tabstop {
($self, $tab) = @_;
return $self->{tabstop} unless defined $tab;
$self->{tabstop} = $tab;
}
sub draw {
my $self = shift;
my($y, $x, $s) = ($self->{y}, $self->{x}, $self->{s});
Dialog::draw_box($y, $x, 3, length($s)+5, dialog_attr, border_attr);
$self->print(0);
}
sub onkey {
my ($self, $key) = @_;
my $dlg = $self->{owner};
if($self == $dlg->current and ($key == 32 or $key == KEY_RET)) {
$dlg->endmodal($self->{res})
}
}
sub print {
my ($self, $active) = @_;
my($y, $x, $s) = ($self->{y}, $self->{x}, $self->{s});
my $ss;
($ss = $s) =~ s/&//;
Dialog::attrset($active ? button_label_active_attr : button_label_inactive_attr);
Dialog::mvprintw($y+1, $x+2, " $ss ");
my $pos = index($s, '&');
return if $pos == -1;
Dialog::attrset($active ? button_key_active_attr : button_key_inactive_attr);
Dialog::mvprintw($y+1, $x+3+$pos, substr($ss, $pos, 1));
}
sub exec {
my $self = shift;
my($y, $x, $s) = ($self->{y}, $self->{x}, $self->{s});
$self->print(1);
my $ret = &Dialog::getch;
$self->print(0);
$ret;
}
sub data {
($self, $data) = @_;
return $self->{s} unless defined $data;
$self->{s} = $data;
$self->draw;
}
sub name {
$_[0]->{name};
}
1;
__END__
syntax highlighted by Code2HTML, v. 0.9.1