--- deliantra/Deliantra-Client/DC/UI.pm 2006/06/06 03:19:26 1.294 +++ deliantra/Deliantra-Client/DC/UI.pm 2006/06/07 07:00:30 1.298 @@ -317,8 +317,8 @@ sub move_abs { my ($self, $x, $y, $z) = @_; - $self->{x} = List::Util::max 0, int $x; - $self->{y} = List::Util::max 0, int $y; + $self->{x} = List::Util::max 0, List::Util::min $self->{root}{w} - $self->{w}, int $x; + $self->{y} = List::Util::max 0, List::Util::min $self->{root}{h} - $self->{h}, int $y; $self->{z} = $z if defined $z; $self->update; @@ -2309,8 +2309,10 @@ ($range, $self->{range}) = ($self->{range}, $range); - $self->update - if "@$range" ne "@{$self->{range}}"; + if ("@$range" ne "@{$self->{range}}") { + $self->update; + $self->set_value ($self->{range}[0]); + } } sub set_value { @@ -2467,7 +2469,7 @@ ############################################################################# -package CFClient::UI::TextView; +package CFClient::UI::TextScroller; our @ISA = CFClient::UI::HBox::; @@ -2573,7 +2575,7 @@ delete $self->{texture}; - $ROOT->on_post_alloc ($self, sub { + $ROOT->on_post_alloc ($self => sub { my ($W, $H) = @{$self->{children}[0]}{qw(w h)}; if (delete $self->{need_reflow}) { @@ -2599,7 +2601,7 @@ $self->{height} = $height; $self->{children}[1]->set_range ([$height, 0, $height, $H, 1]); - + delete $self->{texture}; } @@ -2753,6 +2755,9 @@ . "visible $widget->{visible}"; } + $tooltip =~ s/^\n+//; + $tooltip =~ s/\n+$//; + $self->add (new CFClient::UI::Label markup => $tooltip, max_w => ($widget->{tooltip_width} || 0.25) * $::WIDTH, @@ -2789,7 +2794,7 @@ my ($x, $y) = $widget->coord2global ($widget->{w}, 0); ($x, $y) = $widget->coord2global (-$self->{w}, 0) - if $x + $self->{w} > $::WIDTH; + if $x + $self->{w} > $self->{root}{w}; $self->move_abs ($x, $y); }); @@ -2938,7 +2943,7 @@ $widget = new CFClient::UI::Label can_hover => 1, can_events => 1, - text => $widget, + markup => $widget, tooltip => $tooltip } @@ -3110,7 +3115,7 @@ my $class = shift; my $self = $class->SUPER::new ( - options => [], # [title, value, tooltip], ... + options => [], # [value, title, longdesc], ... value => undef, @_, ); @@ -3126,9 +3131,9 @@ my @menu_items; for (@{ $self->{options} }) { - my ($title, $value, $tooltip) = @$_; + my ($value, $title, $tooltip) = @$_; - push @menu_items, [$tooltip, sub { $self->set_value ($value) }]; + push @menu_items, [$tooltip || $title, sub { $self->set_value ($value) }]; } CFClient::UI::Menu->new (items => \@menu_items)->popup ($ev); @@ -3137,11 +3142,11 @@ sub _set_value { my ($self, $value) = @_; - my ($item) = grep $_->[1] eq $value, @{ $self->{options} } + my ($item) = grep $_->[0] eq $value, @{ $self->{options} } or return; - $self->{value} = $item->[1]; - $self->set_markup ("$item->[0] ⇓"); + $self->{value} = $item->[0]; + $self->set_markup ("$item->[1] ⇓"); $self->set_tooltip ($item->[2]); } @@ -3552,12 +3557,16 @@ ) } +my $TOOLTIP_ALL = "\n\nLeft click - ready spell\nMiddle click - invoke spell\nRight click - further options"; + +my @TOOLTIP_NAME = (align => 0, can_events => 1, can_hover => 1, tooltip => + "Name. The name of the spell.$TOOLTIP_ALL"); my @TOOLTIP_LVL = (align => 1, can_events => 1, can_hover => 1, tooltip => - "Level. Minimum level the caster needs in the associated skill to be able to attempt casting this spell."); + "Level. Minimum level the caster needs in the associated skill to be able to attempt casting this spell.$TOOLTIP_ALL"); my @TOOLTIP_SP = (align => 1, can_events => 1, can_hover => 1, tooltip => - "Spell points / Grace points. Amount of spell or grace points used by each invocation."); + "Spell points / Grace points. Amount of spell or grace points used by each invocation.$TOOLTIP_ALL"); my @TOOLTIP_DMG = (align => 1, can_events => 1, can_hover => 1, tooltip => - "Damage. The amount of damage the spell deals when it hits."); + "Damage. The amount of damage the spell deals when it hits.$TOOLTIP_ALL"); sub rebuild_spell_list { my ($self) = @_; @@ -3565,7 +3574,7 @@ $CFClient::UI::ROOT->on_refresh ($self => sub { $self->clear; - $self->add (1, 0, new CFClient::UI::Label text => "Spell Name"); + $self->add (1, 0, new CFClient::UI::Label text => "Spell Name", @TOOLTIP_NAME); $self->add (2, 0, new CFClient::UI::Label text => "Lvl" , @TOOLTIP_LVL); $self->add (3, 0, new CFClient::UI::Label text => "Sp/Gp", @TOOLTIP_SP); $self->add (4, 0, new CFClient::UI::Label text => "Dmg" , @TOOLTIP_DMG); @@ -3577,11 +3586,33 @@ $row++; + my $spell_cb = sub { + my ($widget, $ev) = @_; + + if ($ev->{button} == 1) { + $::CONN->user_send ("cast $spell->{name}"); + } elsif ($ev->{button} == 2) { + $::CONN->user_send ("invoke $spell->{name}"); + } elsif ($ev->{button} == 3) { + (new CFClient::UI::Menu + items => [ + ["bind cast $spell->{name} to a key" => sub { $::BIND_EDITOR->do_quick_binding (["cast $spell->{name}"]) }], + ["bind invoke $spell->{name} to a key" => sub { $::BIND_EDITOR->do_quick_binding (["invoke $spell->{name}"]) }], + ], + )->popup ($ev); + } else { + return 0; + } + + 1 + }; + $self->add (0, $row, new CFClient::UI::Face face => $spell->{face}, can_hover => 1, can_events => 1, tooltip => $spell->{message}, + on_button_down => $spell_cb, ); $self->add (1, $row, new CFClient::UI::Label @@ -3589,19 +3620,13 @@ text => $spell->{name}, can_hover => 1, can_events => 1, - tooltip => $spell->{message}, + tooltip => "$spell->{message}$TOOLTIP_ALL", + on_button_down => $spell_cb, ); $self->add (2, $row, new CFClient::UI::Label text => $spell->{level}, @TOOLTIP_LVL); $self->add (3, $row, new CFClient::UI::Label text => $spell->{mana} || $spell->{grace}, @TOOLTIP_SP); $self->add (4, $row, new CFClient::UI::Label text => $spell->{damage}, @TOOLTIP_DMG); - - # TODO: should be done via popup - $self->add (5, $row, new CFClient::UI::Button - text => "bind", - tooltip => "bind spell readying (cast command) to key", - on_activate => sub { $::BIND_EDITOR->do_quick_binding (["cast $spell->{name}"]) }, - ); } }); }