Gtk2-CV

 view release on metacpan or  search on metacpan

lib/Gtk2/CV/Plugin/NameCluster.pm  view on Meta::CPAN


      $progress->update (0.5);
      $progress->set_title ("categorize...");

      $cluster->{"000000REMAINING FILES"} = [keys %files];

      # remove component index
      while (my ($k, $v) = each %$cluster) {
         if (exists $groups{substr $k, 6}) {
            my $idx = 0;
            ++$idx while exists $groups{(substr $k, 6) . "/$idx"};
            $k .= "/$idx";
         }
         $groups{substr $k, 6} = $v;
      }

      while (my ($k, $v) = each %groups) {
         delete $groups{$k}
            unless @$v > 1;
      }
   }

   $progress->update (0.75);
   $progress->set_title ("finishing...");

   $self->{cluster} = \%groups;

   @{ $self->{list}{data} } = (
      sort { $b->[0] <=> $a->[0] }
         map [(scalar @{ $groups{$_} }), $_], sort keys %groups
   );
}

sub start {
   my ($self, $schnauzer, $dirview) = @_;

   $self->{schnauzer} = $schnauzer;
   $self->{dirview} = $dirview;

   $self->{signal} = $schnauzer->signal_connect_after (chpaths => sub {
      return if $self->{updating};

      $self->analyse;

      1
   });

   $self->analyse;

   $self->show_all;
}

sub new_schnauzer {
   my ($self, $schnauzer) = @_;

   my $namecluster;

   $schnauzer->signal_connect (popup => sub {
      my ($self, $menu, $cursor, $event) = @_;
      
      $menu->append (my $i_up = new Gtk2::MenuItem "Filename clustering...");
      $i_up->signal_connect (activate => sub {
         $namecluster = Gtk2::CV::Plugin::NameCluster->new;
         $namecluster->start ($self, 0);
      });

      $menu->append (my $i_up = new Gtk2::MenuItem "Subdir view...");
      $i_up->signal_connect (activate => sub {
         $namecluster = Gtk2::CV::Plugin::NameCluster->new;
         $namecluster->start ($self, 1);
      });
   });


   $schnauzer->signal_connect (key_press_event => sub {
      my ($self, $event) = @_;
      my $key = $event->keyval;
      my $state = $event->state;

      $state *= Gtk2::Accelerator->get_default_mod_mask;

      if (
         $state == ["control-mask"]
         && ($key == $Gtk2::Gdk::Keysyms{Up} || $key == $Gtk2::Gdk::Keysyms{Down})
      ) {
         if ($namecluster && $namecluster->{list}) {
            my ($path) = $namecluster->{list}->get_cursor;
            $key == $Gtk2::Gdk::Keysyms{Up} ? $path->prev : $path->next;
            $namecluster->{list}->set_cursor ($path);
         }
         return 1;
      }

      0
   });
}

1



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