ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC.pm
(Generate patch)

Comparing deliantra/Deliantra-Client/DC.pm (file contents):
Revision 1.89 by root, Mon Jun 5 21:10:03 2006 UTC vs.
Revision 1.96 by root, Sun Jul 2 18:52:04 2006 UTC

25 25
26use Carp (); 26use Carp ();
27use AnyEvent (); 27use AnyEvent ();
28use BerkeleyDB; 28use BerkeleyDB;
29use Pod::POM (); 29use Pod::POM ();
30use Scalar::Util ();
30use Storable (); # finally 31use Storable (); # finally
31 32
32package CFClient::PodToPango; 33package CFClient::PodToPango;
33 34
34use base Pod::POM::View::Text; 35use base Pod::POM::View::Text;
51} 52}
52 53
53sub view_item { 54sub view_item {
54 ("\t" x ($indent / 4)) 55 ("\t" x ($indent / 4))
55 . $_[1]->title->present ($_[0]) 56 . $_[1]->title->present ($_[0])
56 . "\n" 57 . "\n\n"
57 . $_[1]->content->present ($_[0]) 58 . $_[1]->content->present ($_[0])
58} 59}
59 60
60sub view_verbatim { 61sub view_verbatim {
61 (join "", 62 (join "",
291 $cb->($last_enter_count); 292 $cb->($last_enter_count);
292 $w->hide; 293 $w->hide;
293 $w = undef; 294 $w = undef;
294 } 295 }
295 ); 296 );
296 $entry->focus_in; 297 $entry->grab_focus;
297 $w->show; 298 $w->show;
298 299
299} 300}
300 301
301sub update_widgets { 302sub update_widgets {
302 my ($self) = @_; 303 my ($self) = @_;
304
305 # necessary to avoid cyclic references
306 Scalar::Util::weaken $self;
303 307
304 my $button_cb = sub { 308 my $button_cb = sub {
305 my (undef, $ev, $x, $y) = @_; 309 my (undef, $ev, $x, $y) = @_;
306 310
307 my $targ = $::CONN->{player}{tag}; 311 my $targ = $::CONN->{player}{tag};
400 . ($self->{nrof} ? "You have $self->{nrof} of it. " : "Item cannot stack with others of it's kind. ") 404 . ($self->{nrof} ? "You have $self->{nrof} of it. " : "Item cannot stack with others of it's kind. ")
401 . "\n\n$tooltip_std" 405 . "\n\n$tooltip_std"
402 ); 406 );
403} 407}
404 408
405package CFClient::Binder;
406
407my @ALLOWED_MODIFIER_KEYS = (
408 CFClient::SDLK_LSHIFT,
409 CFClient::SDLK_LCTRL ,
410 CFClient::SDLK_LALT ,
411 CFClient::SDLK_LMETA ,
412
413 CFClient::SDLK_RSHIFT,
414 CFClient::SDLK_RCTRL ,
415 CFClient::SDLK_RALT ,
416 CFClient::SDLK_RMETA ,
417);
418
419my %ALLOWED_MODIFIERS = (
420 CFClient::KMOD_LSHIFT => "LSHIFT",
421 CFClient::KMOD_LCTRL => "LCTRL",
422 CFClient::KMOD_LALT => "LALT",
423 CFClient::KMOD_LMETA => "LMETA",
424
425 CFClient::KMOD_RSHIFT => "RSHIFT",
426 CFClient::KMOD_RCTRL => "RCTRL",
427 CFClient::KMOD_RALT => "RALT",
428 CFClient::KMOD_RMETA => "RMETA",
429);
430
431my %DIRECT_BIND_CHARS = map { $_ => 1 } qw/0 1 2 3 4 5 6 7 8 9/;
432my @DIRECT_BIND_KEYS = (
433 CFClient::SDLK_F1,
434 CFClient::SDLK_F2,
435 CFClient::SDLK_F3,
436 CFClient::SDLK_F4,
437 CFClient::SDLK_F5,
438 CFClient::SDLK_F6,
439 CFClient::SDLK_F7,
440 CFClient::SDLK_F8,
441 CFClient::SDLK_F9,
442 CFClient::SDLK_F10,
443 CFClient::SDLK_F11,
444 CFClient::SDLK_F12,
445 CFClient::SDLK_F13,
446 CFClient::SDLK_F14,
447 CFClient::SDLK_F15,
448);
449
450# this binding dialog asks for a key-combo to be pressed
451# and if successful it calls the $cb with $mod and $sym as args.
452sub open_binding_dialog {
453 my ($cb) = @_;
454
455 my $w = new CFClient::UI::FancyFrame
456 title => "Bind Action",
457 x => "center",
458 y => "center";
459
460 $w->add (my $vb = new CFClient::UI::VBox);
461 $vb->add (new CFClient::UI::Label
462 text => "Press a modifier (CTRL, ALT and/or SHIFT) and a key."
463 ."You can only bind 0-9 and F1-F15 without modifiers."
464 );
465 $vb->add (my $entry = new CFClient::UI::Entry
466 text => "",
467 on_key_down => sub {
468 my ($entry, $ev) = @_;
469
470 my $mod = $ev->{mod};
471 my $sym = $ev->{sym};
472
473 # XXX: This seems a little bit hackisch to me, but i have to ignore them
474 if (grep { $_ == $sym } @ALLOWED_MODIFIER_KEYS) {
475 return;
476 }
477
478 if ($mod == CFClient::KMOD_NONE
479 and not $DIRECT_BIND_CHARS{chr ($ev->{unicode})}
480 and not grep { $sym == $_ } @DIRECT_BIND_KEYS)
481 {
482 $::STATUSBOX->add (
483 "Can't bind key ".CFClient::SDL_GetKeyName ($sym)
484 ." directly without modifier! It would damage the completer handling."
485 );
486 return;
487 }
488
489 $entry->focus_out;
490
491 $cb->($mod, $sym);
492
493 $w->destroy
494 });
495
496 $entry->focus_in;
497 $w->show;
498}
499
500sub keycombo_to_name {
501 my ($mod, $sym) = @_;
502
503 my $mods = join '+',
504 map { $ALLOWED_MODIFIERS{$_} }
505 grep { ($_ + 0) & ($mod + 0) }
506 keys %ALLOWED_MODIFIERS;
507 $mods .= "+" if $mods ne '';
508
509 return $mods . CFClient::SDL_GetKeyName ($sym);
510}
511
512package CFClient::Pickup;
513# some pickup constants
514sub PU_NOTHING { 0x00000000 }
515
516sub PU_DEBUG { 0x10000000 }
517sub PU_INHIBIT { 0x20000000 }
518sub PU_STOP { 0x40000000 }
519sub PU_NEWMODE { 0x80000000 }
520
521sub PU_RATIO { 0x0000000F }
522
523sub PU_FOOD { 0x00000010 }
524sub PU_DRINK { 0x00000020 }
525sub PU_VALUABLES { 0x00000040 }
526sub PU_BOW { 0x00000080 }
527
528sub PU_ARROW { 0x00000100 }
529sub PU_HELMET { 0x00000200 }
530sub PU_SHIELD { 0x00000400 }
531sub PU_ARMOUR { 0x00000800 }
532
533sub PU_BOOTS { 0x00001000 }
534sub PU_GLOVES { 0x00002000 }
535sub PU_CLOAK { 0x00004000 }
536sub PU_KEY { 0x00008000 }
537
538sub PU_MISSILEWEAPON { 0x00010000 }
539sub PU_ALLWEAPON { 0x00020000 }
540sub PU_MAGICAL { 0x00040000 }
541sub PU_POTION { 0x00080000 }
542
543sub PU_SPELLBOOK { 0x00100000 }
544sub PU_SKILLSCROLL { 0x00200000 }
545sub PU_READABLES { 0x00400000 }
546sub PU_MAGIC_DEVICE { 0x00800000 }
547
548sub PU_NOT_CURSED { 0x01000000 }
549
550sub PU_JEWELS { 0x02000000 }
551
552
5531; 4091;
554 410
555=back 411=back
556 412
557=head1 AUTHOR 413=head1 AUTHOR

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines