Deliantra-Client

 view release on metacpan or  search on metacpan

DC/UI/Inventory.pm  view on Meta::CPAN

package DC::UI::Inventory;

use common::sense;

use DC::Macro;
use DC::Item;

our @ISA = DC::UI::Table::;

sub new {
   my $class = shift;

   my $self = $class->SUPER::new (
      col_expand => [0, 1, 0],
      items      => [],
      @_,
   );

   $self->set_sort_order (undef);

   $self
}

sub update_items {
   my ($self) = @_;

   $self->clear;

   my @item = $self->{sort}->(@{ $self->{items} });

   my @adds;
   my $row = 0;
   for my $item ($self->{sort}->(@{ $self->{items} })) {
      DC::Item::update_widgets $item;

      push @adds, 0, $row, $item->{face_widget};
      push @adds, 1, $row, $item->{desc_widget};
      push @adds, 2, $row, $item->{weight_widget};

      $row++;
   }

   $self->add_at (@adds);
}

sub set_sort_order {
   my ($self, $order) = @_;

   $self->{sort} = $order ||= sub {
      sort {
         $b->{count} <=> $a->{count}
      } @_
   };

   $self->update_items;
}

sub set_items {
   my ($self, $items) = @_;

   $self->{items} = [$items ? values %$items : ()];
   $self->update_items;
}



( run in 1.167 second using v1.01-cache-2.11-cpan-39bf76dae61 )