You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
202 lines
4.8 KiB
202 lines
4.8 KiB
|
|
package PBoxLayout;
|
|
@ISA = qw(PBase);
|
|
use strict;
|
|
|
|
# setup default handlers
|
|
|
|
$PBoxLayout::LeftToRight = 0;
|
|
$PBoxLayout::RightToLeft = 1;
|
|
$PBoxLayout::TopToBottom = 2;
|
|
$PBoxLayout::BottomToTop = 3;
|
|
|
|
$PBoxLayout::AlignLeft = 0x0001;
|
|
$PBoxLayout::AlignRight = 0x0002;
|
|
$PboxLayout::AlignHCenter = 0x0004;
|
|
$PBoxLayout::AlignTop = 0x0008;
|
|
$PBoxLayout::AlignBottom = 0x0010;
|
|
$PBoxLayout::AlignVCenter = 0x0020;
|
|
$PBoxLayout::AlignCenter = $PBoxLayout::AlignVCenter |
|
|
$PBoxLayout::AlignHCenter;
|
|
|
|
sub new {
|
|
my $class = shift;
|
|
my $self = $class->SUPER::new($class, @_);
|
|
|
|
my $widget = shift;
|
|
|
|
# print "Widget: " . ref($widget) . "\n";
|
|
|
|
# if(ref($widget) eq ''){
|
|
# print "*E* Error Creating PBoxLayout, did not give valid parent\n";
|
|
# return;
|
|
#}
|
|
# elsif(ref($widget) eq 'PBoxLayout'){
|
|
# $self->{Parent} = $widget;
|
|
# $self->{ParentType} = 'Layout';
|
|
# $self->{Direction} = shift;
|
|
# $self->{Border} = shift;
|
|
# $self->{Added} = 0;
|
|
#}
|
|
# else{
|
|
if(ref($widget) ne ''){
|
|
# print "*\cbI\cb* Generic Non-topleve layout type\n";
|
|
$self->{Parent} = $widget;
|
|
$self->{ParentType} = 'Widget';
|
|
$self->{Direction} = shift;
|
|
$self->{Border} = shift;
|
|
$self->{Added} = 1;
|
|
}
|
|
else{
|
|
$self->{Parent} = undef;
|
|
$self->{ParentType} = 'Layout';
|
|
$self->{Direction} = $widget;
|
|
$self->{Border} = shift;
|
|
$self->{Added} = 0;
|
|
|
|
}
|
|
|
|
$self->{IAmALayout} = 1;
|
|
$self->{Widgets} = ();
|
|
|
|
$self->create();
|
|
|
|
return $self;
|
|
|
|
}
|
|
|
|
sub create {
|
|
my $self = shift;
|
|
|
|
#
|
|
# PLayout redefines create since it uses a special cArg
|
|
#
|
|
my($paren_id) = 0;
|
|
$paren_id = $self->{Parent}->{iWinId} if $self->{Parent} != -1;
|
|
|
|
if($paren_id eq ''){
|
|
$paren_id = "0";
|
|
}
|
|
|
|
my $carg = $paren_id . "\t" . $::POBJECT_LAYOUT . "\t" . $self->{Direction} . "\t" . $self->{Border} . "\t" . $self->{initId},
|
|
|
|
my %REPLY;
|
|
%REPLY = $self->sendMessage('iCommand' => $::PUKE_WIDGET_CREATE,
|
|
'iWinId' => $::PUKE_CONTROLLER,
|
|
'cArg' => $carg,
|
|
'CallBack' => sub { },
|
|
'WaitFor' => 1);
|
|
|
|
$self->ackWinId(%REPLY);
|
|
|
|
}
|
|
|
|
sub addWidget {
|
|
my $self = shift;
|
|
|
|
my $widget = shift;
|
|
my $stretch = shift;
|
|
my $align = shift;
|
|
|
|
if($self->{Added} == 0){
|
|
print "*E* Burp: Can't add widget without first being added to parent layout\n";
|
|
return;
|
|
}
|
|
|
|
$align = $PBoxLayout::AlignCenter if $align == undef;
|
|
$stretch = 0 if $stretch == undef;
|
|
|
|
# $widget->immortal(); # If it's a widget, it cannot be deleted
|
|
if($widget->{iWinId} <= 0){
|
|
print "*E* Trying to add invalid widget " . ref($widget) . "\n";
|
|
return;
|
|
}
|
|
|
|
my $cArg = pack("CC", $stretch, $align);
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_LAYOUT_ADDWIDGET,
|
|
'iArg' => $widget->{iWinId},
|
|
'cArg' => $cArg,
|
|
'CallBack' => sub { },
|
|
'WaitFor' => 1);
|
|
|
|
$self->{Widgets}->[ $#{$self->{Widgets}} + 1] = $widget;
|
|
|
|
}
|
|
|
|
sub addLayout {
|
|
my $self = shift;
|
|
|
|
if($self->{Added} == 0){
|
|
print "*E* Burp: Can't add layout without first being added to parent layout\n";
|
|
}
|
|
|
|
|
|
my $layout = shift;
|
|
if(ref($layout) ne 'PBoxLayout'){
|
|
print "*E* Passed non layout type to addLayout\n";
|
|
return 1;
|
|
}
|
|
|
|
if($layout->{iWinId} <= 0){
|
|
print "*E* Trying to add invalid layout " . ref($layout) . "\n";
|
|
return;
|
|
}
|
|
|
|
|
|
# make sure we can run, and the widget we want to add can run.
|
|
# my @ARG = ($layout);
|
|
#$self->canRun($self, \&PBoxLayout::addLayout, \@ARG) || return;
|
|
#$layout->canRun($self, \&PBoxLayout::addLayout, \@ARG) || return;
|
|
|
|
my %REPLY = $self->sendMessage('iCommand' => $::PUKE_LAYOUT_ADDLAYOUT,
|
|
'iWinId' => $self->{iWinId},
|
|
'iArg' => $layout->{iWinId},
|
|
'cArg' => pack("C", 0),
|
|
'CallBack' => sub { },
|
|
'WaitFor' => 1);
|
|
|
|
# print "*I* Adding layout\n";
|
|
if($REPLY{'iArg'} != 0){
|
|
print "*E* AddLayout call failed\n";
|
|
}
|
|
else{
|
|
# print "*I* Added new Layout for " . $layout->{iWinId} . "\n";
|
|
$layout->{Added} = 1;
|
|
}
|
|
|
|
}
|
|
|
|
sub DESTROY {
|
|
my $self = shift;
|
|
|
|
# print "*I* Layout Deleted\n";
|
|
|
|
# if($self->{DESTROYED} != 1){
|
|
# $self->sendMessage('iCommand' => $::PUKE_WIDGET_DELETE,
|
|
# 'CallBack' => sub { print "Deleted\n"; });
|
|
#}
|
|
|
|
$self->{iWinId} = -1;
|
|
$self->{DESTROYED} = 1;
|
|
|
|
}
|
|
|
|
sub activate {
|
|
my $self = shift;
|
|
|
|
if($self->{ParentType} != 'Widget'){
|
|
print "*E* Only call for TopLevel managers\n";
|
|
return;
|
|
}
|
|
|
|
$self->sendMessage('iCommand' => $::PUKE_LAYOUT_ACTIVATE,
|
|
'CallBack' => sub { },
|
|
'WaitFor' => 1);
|
|
|
|
}
|
|
|
|
|
|
package main;
|
|
1;
|