… | |
… | |
165 | } |
165 | } |
166 | } |
166 | } |
167 | |
167 | |
168 | # widgetset new |
168 | # widgetset new |
169 | sub ext_ws_n { |
169 | sub ext_ws_n { |
170 | my ($id) = @_; |
170 | my ($self, $id) = @_; |
171 | |
171 | |
172 | $self->{widgetset}{$id} = { |
172 | $self->{widgetset}{$id} = { |
173 | w => {}, |
173 | w => {}, |
174 | }; |
174 | }; |
175 | } |
175 | } |
176 | |
176 | |
177 | # widgetset destroy |
177 | # widgetset destroy |
178 | sub ext_ws_d { |
178 | sub ext_ws_d { |
179 | my ($id) = @_; |
179 | my ($self, $id) = @_; |
180 | |
180 | |
181 | my $ws = delete $self->{widgetset}{$id} |
181 | my $ws = delete $self->{widgetset}{$id} |
182 | or return; |
182 | or return; |
183 | |
183 | |
184 | $_->destroy |
184 | $_->destroy |
185 | for values %{$ws->{w}}; |
185 | for values %{$ws->{w}}; |
186 | } |
186 | } |
187 | |
187 | |
188 | # widgetset create |
188 | # widgetset create |
189 | sub ext_ws_c => sub { |
189 | sub ext_ws_c { |
190 | my ($ws, $id, $class, $args) = @_; |
190 | my ($self, $ws, $id, $class, $args) = @_; |
191 | |
191 | |
192 | for my $ev (grep /^on_/, keys %$args) { |
192 | for my $ev (grep /^on_/, keys %$args) { |
193 | my $rid = $args->{$ev}; |
193 | my $rid = $args->{$ev}; |
194 | $args->{$ev} = sub { |
194 | $args->{$ev} = sub { |
195 | my $id = shift->{s_id}; |
195 | my $id = shift->{s_id}; |
… | |
… | |
207 | ) or warn "server failed creating client-side widget " . (CFPlus::to_json $class) . ": $@\n"; |
207 | ) or warn "server failed creating client-side widget " . (CFPlus::to_json $class) . ": $@\n"; |
208 | } |
208 | } |
209 | |
209 | |
210 | # widgetset associate |
210 | # widgetset associate |
211 | sub ext_ws_a { |
211 | sub ext_ws_a { |
212 | my (%ass) = @_; |
212 | my ($self, %ass) = @_; |
213 | |
213 | |
214 | # everything that has a name, wether conceivably useful or not |
214 | # everything that has a name, wether conceivably useful or not |
215 | my %wkw = ( |
215 | my %wkw = ( |
216 | root => $CFPlus::UI::ROOT, |
216 | root => $CFPlus::UI::ROOT, |
217 | tooltip => $CFPlus::UI::TOOLTIP, |
217 | tooltip => $CFPlus::UI::TOOLTIP, |
… | |
… | |
255 | } |
255 | } |
256 | } |
256 | } |
257 | |
257 | |
258 | # widget call |
258 | # widget call |
259 | sub ext_w_c { |
259 | sub ext_w_c { |
260 | my ($id, $rid, $method, @args) = @_; |
260 | my ($self, $id, $rid, $method, @args) = @_; |
261 | |
261 | |
262 | my $w = $self->{widget}{$id} |
262 | my $w = $self->{widget}{$id} |
263 | or return; |
263 | or return; |
264 | |
264 | |
265 | if ($rid) { |
265 | if ($rid) { |
… | |
… | |
269 | } |
269 | } |
270 | } |
270 | } |
271 | |
271 | |
272 | # widget set |
272 | # widget set |
273 | sub ext_w_s { |
273 | sub ext_w_s { |
274 | my ($id, $attr) = @_; |
274 | my ($self, $id, $attr) = @_; |
275 | |
275 | |
276 | my $w = $self->{widget}{$id} |
276 | my $w = $self->{widget}{$id} |
277 | or return; |
277 | or return; |
278 | |
278 | |
279 | for (my $i = 0; $i < $#$attr; $i += 2) { |
279 | for (my $i = 0; $i < $#$attr; $i += 2) { |
… | |
… | |
287 | } |
287 | } |
288 | } |
288 | } |
289 | |
289 | |
290 | # widget get |
290 | # widget get |
291 | sub ext_w_g { |
291 | sub ext_w_g { |
292 | my ($id, $rid, $attr) = @_; |
292 | my ($self, $id, $rid, $attr) = @_; |
293 | |
293 | |
294 | my $w = $self->{widget}{$id} |
294 | my $w = $self->{widget}{$id} |
295 | or return; |
295 | or return; |
296 | |
296 | |
297 | $self->send_exti_msg (w_r => $rid, [map $w->{$_}, @$attr]); |
297 | $self->send_exti_msg (w_r => $rid, [map $w->{$_}, @$attr]); |
298 | }) |
298 | } |
299 | |
299 | |
300 | # message window |
300 | # message window |
301 | sub ext_channel_info { |
301 | sub ext_channel_info { |
302 | my ($info) = @_; |
302 | my ($self, $info) = @_; |
303 | $self->{channels}->{$info->{id}} = $info; |
303 | $self->{channels}->{$info->{id}} = $info; |
304 | $::MESSAGE_WINDOW->add_channel ($info); |
304 | $::MESSAGE_WINDOW->add_channel ($info); |
305 | } |
305 | } |
306 | |
306 | |
307 | ############################################################################# |
307 | ############################################################################# |
… | |
… | |
478 | for keys %RES_TBL; |
478 | for keys %RES_TBL; |
479 | |
479 | |
480 | my $sktbl = $::STATWIDS->{skill_tbl}; |
480 | my $sktbl = $::STATWIDS->{skill_tbl}; |
481 | my @skills = keys %{ $self->{skill_info} }; |
481 | my @skills = keys %{ $self->{skill_info} }; |
482 | |
482 | |
483 | if (grep +(exists $stats->{$_}) != (exists $prev->{$_}), @skills) { |
483 | my @order = sort { $stats->{$b->[0]}[1] <=> $stats->{$a->[0]}[1] or $a->[1] cmp $b->[1] } |
|
|
484 | map [$_, $self->{skill_info}{$_}], |
|
|
485 | grep exists $stats->{$_}, |
|
|
486 | @skills; |
|
|
487 | |
|
|
488 | if ($self->{stat_order} ne join ",", map $_->[0], @order) { |
|
|
489 | $self->{stat_order} = join ",", map $_->[0], @order; |
|
|
490 | |
484 | $sktbl->clear; |
491 | $sktbl->clear; |
485 | |
492 | |
486 | my $sw = $self->{skillwid}{""} ||= [ |
493 | my $sw = $self->{skillwid}{""} ||= [ |
487 | 0, 0, (new CFPlus::UI::Label text => "Experience", align => 1), |
494 | 0, 0, (new CFPlus::UI::Label text => "Experience", align => 1), |
488 | 1, 0, (new CFPlus::UI::Label text => "Lvl.", align => 1), |
495 | 1, 0, (new CFPlus::UI::Label text => "Lvl.", align => 1), |
… | |
… | |
500 | |
507 | |
501 | my @TOOLTIP_LVL = (tooltip => "<b>Level</b>. The level of the skill.$TOOLTIP_ALL", can_events => 1, can_hover => 1); |
508 | my @TOOLTIP_LVL = (tooltip => "<b>Level</b>. The level of the skill.$TOOLTIP_ALL", can_events => 1, can_hover => 1); |
502 | my @TOOLTIP_EXP = (tooltip => "<b>Experience</b>. The experience points you have in this skill.$TOOLTIP_ALL", can_events => 1, can_hover => 1); |
509 | my @TOOLTIP_EXP = (tooltip => "<b>Experience</b>. The experience points you have in this skill.$TOOLTIP_ALL", can_events => 1, can_hover => 1); |
503 | |
510 | |
504 | my ($x, $y) = (0, 1); |
511 | my ($x, $y) = (0, 1); |
505 | for ( |
512 | for (@order) { |
506 | sort { $stats->{$b->[0]}[1] <=> $stats->{$a->[0]}[1] or $a->[1] cmp $b->[1] } |
|
|
507 | map [$_, $self->{skill_info}{$_}], |
|
|
508 | grep exists $stats->{$_}, |
|
|
509 | @skills |
|
|
510 | ) { |
|
|
511 | my ($idx, $name) = @$_; |
513 | my ($idx, $name) = @$_; |
512 | |
514 | |
513 | my $spell_cb = sub { |
515 | my $spell_cb = sub { |
514 | my ($widget, $ev) = @_; |
516 | my ($widget, $ev) = @_; |
515 | |
517 | |
… | |
… | |
560 | } |
562 | } |
561 | |
563 | |
562 | $sktbl->add_at (@add); |
564 | $sktbl->add_at (@add); |
563 | } |
565 | } |
564 | |
566 | |
565 | for (grep exists $stats->{$_}, @skills) { |
567 | for (@order) { |
|
|
568 | my ($idx, $name) = @$_; |
|
|
569 | my $val = $stats->{$idx}; |
|
|
570 | |
|
|
571 | next if $prev->{$idx}[1] == $val->[1]; |
|
|
572 | |
566 | my $sw = $self->{skillwid}{$_}; |
573 | my $sw = $self->{skillwid}{$idx}; |
567 | $sw->[0]->set_text (::formsep ($stats->{$_}[1])); |
574 | $sw->[0]->set_text (::formsep ($val->[1])); |
568 | $sw->[1]->set_text ($stats->{$_}[0] * 1); |
575 | $sw->[1]->set_text ($val->[0] * 1); |
569 | $sw->[2]->set_value (@{$stats->{$_}}); |
576 | $sw->[2]->set_value (@$val); |
|
|
577 | |
|
|
578 | #$::GAUGES->{sklprg}->set_label ($name); |
|
|
579 | $::GAUGES->{sklprg}->set_value (@$val); |
570 | } |
580 | } |
571 | } |
581 | } |
572 | |
582 | |
573 | sub macro_send { |
583 | sub macro_send { |
574 | my ($self, $macro) = @_; |
584 | my ($self, $macro) = @_; |
… | |
… | |
627 | |
637 | |
628 | if ($delay) { |
638 | if ($delay) { |
629 | # delay the map drawing a tiny bit in the hope of getting the missing fetched |
639 | # delay the map drawing a tiny bit in the hope of getting the missing fetched |
630 | Event->timer (after => 0.03, cb => sub { |
640 | Event->timer (after => 0.03, cb => sub { |
631 | $_[0]->w->cancel; |
641 | $_[0]->w->cancel; |
632 | $self->{map_widget}->update; |
642 | $self->{map_widget}->update |
|
|
643 | if $self->{map_widget}; |
633 | }); |
644 | }); |
634 | } else { |
645 | } else { |
635 | $self->{map_widget}->update; |
646 | $self->{map_widget}->update; |
636 | } |
647 | } |
637 | } |
648 | } |