diff options
Diffstat (limited to 'ksirc/puke/pboxlayout.pm')
-rw-r--r-- | ksirc/puke/pboxlayout.pm | 201 |
1 files changed, 201 insertions, 0 deletions
diff --git a/ksirc/puke/pboxlayout.pm b/ksirc/puke/pboxlayout.pm new file mode 100644 index 00000000..505ddc0d --- /dev/null +++ b/ksirc/puke/pboxlayout.pm @@ -0,0 +1,201 @@ + +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; |