summaryrefslogtreecommitdiffstats
path: root/ksirc/puke/pboxlayout.pm
diff options
context:
space:
mode:
Diffstat (limited to 'ksirc/puke/pboxlayout.pm')
-rw-r--r--ksirc/puke/pboxlayout.pm201
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;