|
|
|
|
|
|
|
package PWidget;
|
|
|
|
@ISA = qw(PBase);
|
|
|
|
use strict;
|
|
|
|
|
|
|
|
sub new {
|
|
|
|
my $class = shift;
|
|
|
|
my $self = $class->SUPER::new($class, @_);
|
|
|
|
|
|
|
|
$self->{widgetType} = $::PWIDGET_WIDGET;
|
|
|
|
|
|
|
|
# Default handlers
|
|
|
|
$self->installHandler($::PUKE_WIDGET_EVENT_RESIZE,
|
|
|
|
sub {$self->resizeEvent(@_)});
|
|
|
|
$self->installHandler($::PUKE_WIDGET_EVENT_PAINT,
|
|
|
|
sub {$self->paintEvent(@_)});
|
|
|
|
$self->installHandler($::PUKE_WIDGET_EVENT_MOVE,
|
|
|
|
sub {$self->moveEvent(@_)});
|
|
|
|
$self->installHandler($::PUKE_EVENT_UNKOWN,
|
|
|
|
sub {$self->miscEvent(@_)});
|
|
|
|
# Examplesto listen for mouse events
|
|
|
|
# $self->installHandler($::PUKE_WIDGET_EVENT_MOUSEBUTTONPRESS,
|
|
|
|
# sub {$self->mousePressEvent(@_)});
|
|
|
|
#$self->installHandler($::PUKE_WIDGET_EVENT_MOUSEBUTTONRELEASE,
|
|
|
|
# sub {$self->mouseReleaseEvent(@_)});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if($class eq 'PWidget'){
|
|
|
|
$self->create();
|
|
|
|
}
|
|
|
|
|
|
|
|
return $self;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
sub close {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
$self->hide();
|
|
|
|
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_WIDGET_DELETE,
|
|
|
|
'CallBack' => sub {});
|
|
|
|
|
|
|
|
$self->{DESTROYED} = 1;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
sub show {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
# make sure we are runable then show continue.
|
|
|
|
my @ARG = ();
|
|
|
|
# $self->canRun($self, \&PWidget::show, \@ARG) || return;
|
|
|
|
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_WIDGET_SHOW);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub hide {
|
|
|
|
my $self = shift;
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_WIDGET_HIDE);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub repaint {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
my $erase = shift; # 1 for erase and reapint
|
|
|
|
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_WIDGET_REPAINT,
|
|
|
|
'iArg' => $erase);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub resize {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
my $width = shift;
|
|
|
|
my $height = shift;
|
|
|
|
|
|
|
|
my $carg = "$width\t$height";
|
|
|
|
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_WIDGET_RESIZE,
|
|
|
|
'cArg' => $carg);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
sub move {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
my $x = shift;
|
|
|
|
my $y = shift;
|
|
|
|
|
|
|
|
my $carg = "$x\t$y";
|
|
|
|
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_WIDGET_MOVE,
|
|
|
|
'cArg' => $carg);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
sub setMinimumSize {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
my $w = shift;
|
|
|
|
my $h = shift;
|
|
|
|
|
|
|
|
my $carg = "$w\t$h";
|
|
|
|
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_WIDGET_SETMINSIZE,
|
|
|
|
'cArg' => $carg,
|
|
|
|
'CallBack' => sub {});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
sub setMaximumSize {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
my $w = shift;
|
|
|
|
my $h = shift;
|
|
|
|
|
|
|
|
my $carg = "$w\t$h";
|
|
|
|
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_WIDGET_SETMAXSIZE,
|
|
|
|
'cArg' => $carg,
|
|
|
|
'CallBack' => sub {});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
sub setCaption {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
my $text = shift;
|
|
|
|
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_WIDGET_SETCAPTION,
|
|
|
|
'cArg' => $text,
|
|
|
|
'CallBack' => sub {});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
sub resizeEvent {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
my %ARG = %{shift()};
|
|
|
|
|
|
|
|
my($h, $w, $oh, $ow) = unpack("iiii", $ARG{'cArg'});
|
|
|
|
$self->{'height'} = $h;
|
|
|
|
$self->{'width'} = $w;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
sub paintEvent {
|
|
|
|
}
|
|
|
|
|
|
|
|
sub moveEvent {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
my %ARG = %{shift()};
|
|
|
|
|
|
|
|
my($x, $y, $ox, $oy) = unpack("iiii", $ARG{'cArg'});
|
|
|
|
$self->{'x'} = $x;
|
|
|
|
$self->{'y'} = $y;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
sub miscEvent {
|
|
|
|
}
|
|
|
|
|
|
|
|
sub backgroundColor {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
my %arg = $self->sendMessage('iCommand' => $::PUKE_WIDGET_GET_BACKGROUND_COLOUR,
|
|
|
|
'WaitFor' => 1);
|
|
|
|
|
|
|
|
# print "Got: " . $arg{'cArg'} . "\n";
|
|
|
|
|
|
|
|
$arg{'cArg'} =~ s/\000//g;
|
|
|
|
my ($r, $g, $b) = split(/,/, $arg{'cArg'});
|
|
|
|
|
|
|
|
return ($r, $g, $b);
|
|
|
|
}
|
|
|
|
|
|
|
|
sub setBackgroundColor {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_WIDGET_SET_BACKGROUND_COLOUR,
|
|
|
|
'cArg' => pack("i3", shift(), shift(), shift()),
|
|
|
|
'CallBack' => sub {});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
sub setBackgroundPixmap {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_WIDGET_SET_BACKGROUND_PIXMAP,
|
|
|
|
'cArg' => shift(),
|
|
|
|
'CallBack' => sub {});
|
|
|
|
}
|
|
|
|
|
|
|
|
sub setBackgroundMode {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_WIDGET_SET_BACKGROUND_MODE,
|
|
|
|
'iArg' => shift(),
|
|
|
|
'CallBack' => sub {});
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
sub setEnabled {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_WIDGET_SET_ENABLED,
|
|
|
|
'iArg' => shift(),
|
|
|
|
'CallBack' => sub {});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
sub recreate {
|
|
|
|
my $self = shift;
|
|
|
|
|
|
|
|
my $nparent = shift;
|
|
|
|
my $wflags = shift; # Not used!
|
|
|
|
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_WIDGET_RECREATE,
|
|
|
|
'iArg' => $nparent ? $nparent->{'iWinId'} : 0,
|
|
|
|
'cArg' => pack("iii", shift(), shift(), shift()),
|
|
|
|
'CallBack' => sub {});
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
package main;
|
|
|
|
|
|
|
|
1;
|