--- deliantra/Deliantra-Client/DC/UI.pm 2006/05/22 03:48:50 1.221 +++ deliantra/Deliantra-Client/DC/UI.pm 2006/05/23 20:00:55 1.224 @@ -208,27 +208,27 @@ sub show { my ($self) = @_; + return if $self->{parent}; - for (my @w = $self; @w; ) { - my $w = pop @w; - push @w, $w->children; - $w->{visible} = 1; - } + $CFClient::UI::ROOT->add ($self); +} +sub show_centered { + my ($self) = @_; return if $self->{parent}; - $CFClient::UI::ROOT->add ($self); + $self->show; + + $CFClient::UI::ROOT->on_post_alloc ( + "centered $self" => sub { + $self->move (($::WIDTH - $self->{w}) * 0.5, ($::HEIGHT - $self->{h}) * 0.5); + }, + ); } sub hide { my ($self) = @_; - for (my @w = $self; @w; ) { - my $w = pop @w; - push @w, $w->children; - $w->{visible} = 1; - } - undef $GRAB if $GRAB == $self; undef $HOVER if $HOVER == $self; @@ -2543,6 +2543,14 @@ (32, 8) } +sub update { + my ($self) = @_; + + return unless $self->{visible}; + + $self->SUPER::update; +} + sub _draw { my ($self) = @_; @@ -2622,12 +2630,12 @@ can_hover => 1, can_events => 1, tooltip => ((CFClient::UI::Label::escape $desc) - . "\nleftclick - pick up\nmiddle click - apply\nrightclick - menu"), + . "\nleftclick - examine\nshift+leftclick - move/pickup/drop\nmiddle click - apply\nrightclick - menu"), connect_button_down => sub { my ($self, $ev, $x, $y) = @_; # todo: maybe put examine on 1? but should just be a tooltip :( - if ($ev->{button} == 1) { + if (($ev->{mod} & CFClient::KMOD_SHIFT) && $ev->{button} == 1) { my $targ = $::CONN->{player}{tag}; if ($item->{container} == $::CONN->{player}{tag}) { @@ -2635,6 +2643,8 @@ } $::CONN->send ("move $targ $item->{tag} 0"); + } elsif ($ev->{button} == 1) { + $::CONN->send ("examine $item->{tag}"); } elsif ($ev->{button} == 2) { $::CONN->send ("apply $item->{tag}"); } elsif ($ev->{button} == 3) { @@ -2697,7 +2707,7 @@ my $class = shift; my $self = $class->SUPER::new ( - scrolled => (new CFClient::UI::VBox), + scrolled => (new CFClient::UI::Table), @_, ); @@ -2718,11 +2728,17 @@ $self->{real_items} = \@items; for my $item (@items) { + $item->{item} = $item; $item = $item->{widget} ||= new CFClient::UI::InventoryItem item => $item; $item->update_item (); } - $self->{scrolled}->add (@items); + my $i = 0; + for (@items) { + $self->{scrolled}->add (0, $i, $_); + my $nrof = $_->{item}->{nrof} || 1; + $self->{scrolled}->add (1, $i++, new CFClient::UI::Label text => ($_->{item}->{weight} * $nrof) / 1000); + } # $range->{range} = [$self->{pos}, 0, $self->{max_pos}, $page]; } @@ -3004,6 +3020,24 @@ } $self->SUPER::add (@children); + + while (@children) { + my $w = pop @children; + push @children, $w->children; + $w->{visible} = 1; + } +} + +sub remove { + my ($self, @children) = @_; + + $self->SUPER::remove (@children); + + while (@children) { + my $w = pop @children; + push @children, $w->children; + delete $w->{visible}; + } } sub on_refresh {