--- deliantra/Deliantra-Client/DC/MapWidget.pm 2006/05/27 19:49:07 1.39 +++ deliantra/Deliantra-Client/DC/MapWidget.pm 2006/06/03 22:50:48 1.49 @@ -41,9 +41,7 @@ (my $data = $command) =~ s/\\//g; $tooltip =~ s/^\s+//; - $tooltip = "$data\n\n$tooltip"; - $tooltip =~ s/\s+$//; $self->{completer}{command}{$command} = [$data, $tooltip, $widget, $cb, ++$self->{command_id}]; @@ -60,7 +58,19 @@ $self->focus_in; - if ($ev->{button} == 2) { + if ($ev->{button} == 1) { + my ($ox, $oy) = ($ev->{x}, $ev->{y}); + + my $fx = int ((($ev->{x} - $::CFG->{map_shift_x}) / (32 * $::CFG->{map_scale})) + 0.99); + my $fy = int ((($ev->{y} - $::CFG->{map_shift_y}) / (32 * $::CFG->{map_scale})) + 0.99); + $fx += $::MAP->x; + $fy += $::MAP->y; + + $::CONN->send (sprintf "lookat %d %d", $fx, $fy); + + warn "FOOX: $fx (".$::MAP->ox.")\n"; + warn "FOOY: $fy (".$::MAP->oy.")\n"; + } elsif ($ev->{button} == 2) { my ($ox, $oy) = ($ev->{x}, $ev->{y}); my ($bw, $bh) = ($::CFG->{map_shift_x}, $::CFG->{map_shift_y}); @@ -75,18 +85,28 @@ $self->update; }; } + + 1 } sub button_up { my ($self, $ev, $x, $y) = @_; delete $self->{motion}; + + 1 } sub mouse_motion { my ($self, $ev, $x, $y) = @_; - $self->{motion}->($ev, $x, $y) if $self->{motion}; + if ($self->{motion}) { + $self->{motion}->($ev, $x, $y); + } else { + return 0; + } + + 1 } sub size_request { @@ -122,7 +142,7 @@ sub key_down { my ($self, $ev) = @_; - return unless $::CONN; + return 0 unless $::CONN; my $mod = $ev->{mod}; my $sym = $ev->{sym}; @@ -138,7 +158,7 @@ $::CONN->user_send ($self->{completer}{last_command}) if exists $self->{completer}{last_command}; } elsif ($uni == ord "\t") { - # TODO: toggle inventory + $::INV_WINDOW->toggle_visibility; } elsif ($sym == CFClient::SDLK_KP_PLUS || $uni == ord "+") { $::CONN->user_send ("rotateshoottype +"); } elsif ($sym == CFClient::SDLK_KP_MINUS || $uni == ord "-") { @@ -159,24 +179,48 @@ } else { $::CONN->user_send ("$DIR{$sym}[1]"); } - } elsif ($ev->{unicode}) { + } elsif ($sym == CFClient::SDLK_INSERT && $mod & CFClient::KMOD_CTRL) { + $::BIND_EDITOR->set_binding (undef, undef, [], + sub { + my ($mod, $sym, $cmds) = @_; + $::CFG->{bindings}->{$mod}->{$sym} = $cmds; + }); + $::BIND_EDITOR->start; + $::BIND_EDITOR->show; + } elsif ($sym == CFClient::SDLK_INSERT && not ($mod & CFClient::KMOD_CTRL)) { + $::BIND_EDITOR->stop; + $::BIND_EDITOR->ask_for_bind_and_commit; + $::BIND_EDITOR->hide; + } elsif (my $bind_cmd = $::CFG->{bindings}->{$mod}->{$sym}) { + $::CONN->user_send ($_) for @$bind_cmd; + } elsif ((ord 'a') <= $uni && $uni <= (ord 'z')) { $self->{completer}->key_down ($ev); $self->{completer}->show; + } else { + return 0; } + + 1 } sub key_up { my ($self, $ev) = @_; + my $res = 0; my $mod = $ev->{mod}; my $sym = $ev->{sym}; if (!($mod & CFClient::KMOD_SHIFT) && delete $self->{shft}) { $::CONN->user_send ("fire_stop"); + $res = 1; } + if (!($mod & CFClient::KMOD_CTRL ) && delete $self->{ctrl}) { $::CONN->user_send ("run_stop"); + $res = 1; } + + $res } sub draw { @@ -281,7 +325,7 @@ # $label->update; # # $CFClient::UI::ROOT->on_post_alloc ("$self$label" => sub { -# $label->move ( +# $label->move_abs ( # ($::WIDTH - $label->{w}) * 0.5, # ($::HEIGHT - $label->{h}) * 0.5, # ); @@ -408,10 +452,10 @@ ]; $self->{entry} = new CFClient::UI::Entry - connect_changed => sub { + on_changed => sub { $self->update_labels; }, - connect_key_down => sub { + on_key_down => sub { my ($entry, $ev) = @_; my $self = $entry->{parent}{parent}; @@ -460,7 +504,7 @@ my ($self, $w, $h) = @_; $self->SUPER::size_allocate ($w, $h); - $self->move (($::WIDTH - $w) * 0.5, ($::HEIGHT - $h) * 0.6, 10); + $self->move_abs (($::WIDTH - $w) * 0.5, ($::HEIGHT - $h) * 0.6, 10); } sub show { @@ -480,7 +524,7 @@ sub key_down { my ($self, $ev) = @_; - $self->{entry}->key_down ($ev); + $self->{entry}->key_down ($ev) } sub update_labels {