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.
tdenetwork/ksirc/puke/pboxlayout.pm

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;