--- deliantra/Deliantra-Client/DC/Protocol.pm 2007/08/21 17:54:02 1.159 +++ deliantra/Deliantra-Client/DC/Protocol.pm 2007/08/22 21:47:59 1.165 @@ -167,7 +167,7 @@ # widgetset new sub ext_ws_n { - my ($id) = @_; + my ($self, $id) = @_; $self->{widgetset}{$id} = { w => {}, @@ -176,7 +176,7 @@ # widgetset destroy sub ext_ws_d { - my ($id) = @_; + my ($self, $id) = @_; my $ws = delete $self->{widgetset}{$id} or return; @@ -186,8 +186,8 @@ } # widgetset create -sub ext_ws_c => sub { - my ($ws, $id, $class, $args) = @_; +sub ext_ws_c { + my ($self, $ws, $id, $class, $args) = @_; for my $ev (grep /^on_/, keys %$args) { my $rid = $args->{$ev}; @@ -209,7 +209,7 @@ # widgetset associate sub ext_ws_a { - my (%ass) = @_; + my ($self, %ass) = @_; # everything that has a name, wether conceivably useful or not my %wkw = ( @@ -257,7 +257,7 @@ # widget call sub ext_w_c { - my ($id, $rid, $method, @args) = @_; + my ($self, $id, $rid, $method, @args) = @_; my $w = $self->{widget}{$id} or return; @@ -271,7 +271,7 @@ # widget set sub ext_w_s { - my ($id, $attr) = @_; + my ($self, $id, $attr) = @_; my $w = $self->{widget}{$id} or return; @@ -289,17 +289,17 @@ # widget get sub ext_w_g { - my ($id, $rid, $attr) = @_; + my ($self, $id, $rid, $attr) = @_; my $w = $self->{widget}{$id} or return; $self->send_exti_msg (w_r => $rid, [map $w->{$_}, @$attr]); -}) +} # message window sub ext_channel_info { - my ($info) = @_; + my ($self, $info) = @_; $self->{channels}->{$info->{id}} = $info; $::MESSAGE_WINDOW->add_channel ($info); } @@ -480,7 +480,14 @@ my $sktbl = $::STATWIDS->{skill_tbl}; my @skills = keys %{ $self->{skill_info} }; - if (grep +(exists $stats->{$_}) != (exists $prev->{$_}), @skills) { + my @order = sort { $stats->{$b->[0]}[1] <=> $stats->{$a->[0]}[1] or $a->[1] cmp $b->[1] } + map [$_, $self->{skill_info}{$_}], + grep exists $stats->{$_}, + @skills; + + if ($self->{stat_order} ne join ",", map $_->[0], @order) { + $self->{stat_order} = join ",", map $_->[0], @order; + $sktbl->clear; my $sw = $self->{skillwid}{""} ||= [ @@ -502,12 +509,7 @@ my @TOOLTIP_EXP = (tooltip => "Experience. The experience points you have in this skill.$TOOLTIP_ALL", can_events => 1, can_hover => 1); my ($x, $y) = (0, 1); - for ( - sort { $stats->{$b->[0]}[1] <=> $stats->{$a->[0]}[1] or $a->[1] cmp $b->[1] } - map [$_, $self->{skill_info}{$_}], - grep exists $stats->{$_}, - @skills - ) { + for (@order) { my ($idx, $name) = @$_; my $spell_cb = sub { @@ -562,11 +564,19 @@ $sktbl->add_at (@add); } - for (grep exists $stats->{$_}, @skills) { - my $sw = $self->{skillwid}{$_}; - $sw->[0]->set_text (::formsep ($stats->{$_}[1])); - $sw->[1]->set_text ($stats->{$_}[0] * 1); - $sw->[2]->set_value (@{$stats->{$_}}); + for (@order) { + my ($idx, $name) = @$_; + my $val = $stats->{$idx}; + + next if $prev->{$idx}[1] == $val->[1]; + + my $sw = $self->{skillwid}{$idx}; + $sw->[0]->set_text (::formsep ($val->[1])); + $sw->[1]->set_text ($val->[0] * 1); + $sw->[2]->set_value (@$val); + + $::GAUGES->{sklprg}->set_label ("$name %d%%"); + $::GAUGES->{sklprg}->set_value (@$val); } } @@ -586,7 +596,6 @@ $self->logprint ("send: ", $command); $self->send_command ($command); - ::status ($command); } sub record { @@ -629,7 +638,8 @@ # delay the map drawing a tiny bit in the hope of getting the missing fetched Event->timer (after => 0.03, cb => sub { $_[0]->w->cancel; - $self->{map_widget}->update; + $self->{map_widget}->update + if $self->{map_widget}; }); } else { $self->{map_widget}->update;