Gtk2-CV
view release on metacpan or search on metacpan
lib/Gtk2/CV/Plugin/MetaCluster.pm view on Meta::CPAN
@{ $self->{list}{data} } = (
sort { $b->[0] <=> $a->[0] }
map [(scalar @{ $cluster{$_} }), $_], keys %cluster
);
}
sub start {
my ($self, $schnauzer, $getid) = @_;
$self->{getid} = $getid;
$self->{schnauzer} = $schnauzer;
$self->{signal} = $schnauzer->signal_connect_after (chpaths => sub {
return if $self->{updating};
$self->analyse;
1
});
$self->analyse;
$self->show_all;
}
sub imgsize {
local $Image::Size::NO_CACHE = 1;
my ($w, $h, $t) = Image::Size::imgsize $_[0];
("${w}x${h}=$t", "W=$w=$t", "H=$h=$t", "T=$t")
}
sub mtime {
POSIX::strftime "%Y-%m-%d %H", gmtime +(stat $_[0])[9]
}
sub size {
sprintf "%2d", 2 / (log 10) * log 1 + -s $_[0]
}
sub nlink {
my $nlink = sprintf "%4d", (stat $_[0])[3];
$nlink =~ s/(\d)(\d+)$/$1 . ("x" x length $2)/ge;
$nlink
}
sub custom {#TODO
$_[0] =~ $::CUSTOM_CLUSTERING
? $1 : "???"
}
sub new_schnauzer {
my ($self, $schnauzer) = @_;
my $metacluster;
$schnauzer->signal_connect (popup => sub {
my ($self, $menu, $cursor, $event) = @_;
$menu->append (my $i_up = new Gtk2::MenuItem "Imagesize clustering...");
$i_up->signal_connect (activate => sub {
($metacluster = Gtk2::CV::Plugin::MetaCluster->new)->start ($self, \&imgsize);
});
$menu->append (my $i_up = new Gtk2::MenuItem "Filetime clustering...");
$i_up->signal_connect (activate => sub {
($metacluster = Gtk2::CV::Plugin::MetaCluster->new)->start ($self, \&mtime);
});
$menu->append (my $i_up = new Gtk2::MenuItem "Filesize clustering...");
$i_up->signal_connect (activate => sub {
($metacluster = Gtk2::CV::Plugin::MetaCluster->new)->start ($self, \&size);
});
$menu->append (my $i_up = new Gtk2::MenuItem "Link count clustering...");
$i_up->signal_connect (activate => sub {
($metacluster = Gtk2::CV::Plugin::MetaCluster->new)->start ($self, \&nlink);
});
if ($::CUSTOM_CLUSTERING) {
$menu->append (my $i_up = new Gtk2::MenuItem "Custom clustering...");
$i_up->signal_connect (activate => sub {
($metacluster = Gtk2::CV::Plugin::MetaCluster->new)->start ($self, \&custom);
});
}
});
$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 ($metacluster && $metacluster->{list}) {
my ($path) = $metacluster->{list}->get_cursor;
$key == $Gtk2::Gdk::Keysyms{Up} ? $path->prev : $path->next;
$metacluster->{list}->set_cursor ($path);
return 1;
}
}
0
});
}
1
( run in 1.667 second using v1.01-cache-2.11-cpan-39bf76dae61 )