Deliantra-Client

 view release on metacpan or  search on metacpan

DC/Item.pm  view on Meta::CPAN

      } elsif (($ev->{mod} & DC::KMOD_SHIFT) && $ev->{button} == 2) {
         $self->{flags} & F_LOCKED
            ? $::CONN->send ("lock " . pack "CN", 0, $self->{tag})
            : $::CONN->send ("lock " . pack "CN", 1, $self->{tag})
      } elsif ($ev->{button} == 1) {
         $::CONN->send ("examine $self->{tag}");
      } elsif ($ev->{button} == 2) {
         $::CONN->send ("apply $self->{tag}");
      } elsif ($ev->{button} == 3) {
         my $move_prefix = $::CONN->{open_container} ? 'put' : 'drop';
         if ($self->{container} == $::CONN->{open_container}) {
            $move_prefix = "take";
         }

         my $shortname = DC::shorten $self->{name}, 14;

         my @menu_items = (
            ["examine", sub { $::CONN->send ("examine $self->{tag}") }],
            ["mark",    sub { $::CONN->send ("mark ". pack "N", $self->{tag}) }],
            ["ignite/thaw",  # first try of an easier use of flint&steel
               sub {
                  $::CONN->send ("mark ". pack "N", $self->{tag});
                  $::CONN->send ("command apply flint and steel");
               }
            ],
            ["inscribe",  # first try of an easier use of flint&steel
               sub {
                  &::open_string_query ("Text to inscribe", sub {
                     my ($entry, $txt) = @_;
                     $::CONN->send ("mark ". pack "N", $self->{tag});
                     $::CONN->send_utf8 ("command use_skill inscription $txt");
                  });
               }
            ],
            ["rename",  # first try of an easier use of flint&steel
               sub {
                  &::open_string_query ("Rename item to:", sub {
                     my ($entry, $txt) = @_;
                     $::CONN->send ("mark ". pack "N", $self->{tag});
                     $::CONN->send_utf8 ("command rename to <$txt>");
                  }, $self->{name},
                  "If you input no name or erase the current custom name, the custom name will be unset");
               }
            ],
            ["apply",   sub { $::CONN->send ("apply $self->{tag}") }],
            (
               $self->{flags} & F_LOCKED
               ? (
                  ["unlock", sub { $::CONN->send ("lock " . pack "CN", 0, $self->{tag}) }],
                 )
               : (
                  ["lock",   sub { $::CONN->send ("lock " . pack "CN", 1, $self->{tag}) }],
                  ["$move_prefix all",   sub { $::CONN->send ("move $targ $self->{tag} 0") }],
                  ["$move_prefix &lt;n&gt;", 
                     sub {
                        do_n_dialog (sub { $::CONN->send ("move $targ $self->{tag} $_[0]") })
                     }
                  ]
               )
            ),
            ["bind <i>apply $shortname</i> to a key"   => sub { DC::Macro::quick_macro ["apply $self->{name}"] }],
         );

         DC::UI::Menu->new (items => \@menu_items)->popup ($ev);
      }

      1
   };

   my $tooltip_std =
      "<small>"
      . "Left click - examine item\n"
      . "Shift-Left click - " . ($self->{container} ? "move or drop" : "take") . " item\n"
      . "Middle click - apply\n"
      . "Shift-Middle click - lock/unlock\n"
      . "Right click - further options"
      . "</small>\n";

   my $bg = $self->{flags} & F_CURSED ? $bg_cursed
          : $self->{flags} & F_MAGIC  ? $bg_magic
          : undef;

   my $desc = DC::Item::desc_string $self;
   my $face_tooltip = "<b>$desc</b>\n\n$tooltip_std";

   if (my $face = $self->{face_widget}) {
      # already exists, so update if it changed
      if ($face->{bg} != $bg) {
         $face->{bg} = $bg;
         $face->update;
      }

      $face->set_bg        ($bg)                if $face->{bg}        != $bg;
      $face->set_face      ($self->{face})      if $face->{face}      != $self->{face};
      $face->set_anim      ($self->{anim})      if $face->{anim}      != $self->{anim};
      $face->set_animspeed ($self->{animspeed}) if $face->{animspeed} != $self->{animspeed};

      #$face->set_tooltip (
      #   "<b>Face/Animation.</b>\n"
      # . "Item uses face #$self->{face}. "
      # . ($self->{animspeed} ? "Item uses animation #$self->{anim} at " . (1 / $self->{animspeed}) . "fps. " : "Item is not animated. ")
      # . "\n\n$tooltip_std"
      #);
      $face->set_tooltip ($face_tooltip);
   } else {
      # new object, create new face
      $self->{face_widget} = new DC::UI::Face 
         can_events => 1,
         can_hover  => 1,
         bg         => $bg,
         face       => $self->{face},
         anim       => $self->{anim},
         animspeed  => $self->{animspeed}, # TODO# must be set at creation time
         tooltip    => $face_tooltip,
         on_button_down => $button_cb,
      ;
   }
   
   $self->{desc_widget} ||= new DC::UI::Label
      can_events => 1,
      can_hover  => 1,



( run in 0.897 second using v1.01-cache-2.11-cpan-fe3c2283af0 )