--- 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 {