ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/CV/bin/cv
Revision: 1.2
Committed: Mon Nov 3 00:04:22 2003 UTC (20 years, 7 months ago) by root
Branch: MAIN
Changes since 1.1: +18 -69 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #!/opt/bin/perl
2    
3 root 1.2 use Gtk2 -init;
4 root 1.1 use Gtk2::Gdk::Keysyms;
5    
6     use Gtk2::CV::ImageWindow;
7 root 1.2 use Gtk2::CV::Schnauzer;
8 root 1.1
9     $VERSION = 0.1;
10    
11     my $viewer;
12    
13     package cluster;
14    
15     use Glib::Object::Subclass Gtk2::Window;
16    
17     use Gtk2::SimpleList;
18    
19     sub INIT_INSTANCE {
20     my ($self) = @_;
21    
22     $self->set_default_size (600, 400);
23    
24     my $vbox = new Gtk2::VBox;
25     $self->add ($vbox);
26    
27     my $box = new Gtk2::HBox;
28     $vbox->add ($box);
29     $box->add (my $sw = new Gtk2::ScrolledWindow);
30     $sw->add (
31     $self->{list} = new Gtk2::SimpleList
32     "#" => "int",
33     "Name" => "text",
34     );
35    
36 root 1.2 $box->add ($self->{schnauzer} = new Gtk2::CV::Schnauzer);
37 root 1.1
38     $self->{list}->get_column(0)->set_sort_column_id(0);
39     $self->{list}->get_column(1)->set_sort_column_id(1);
40    
41     $self->{list}->signal_connect (cursor_changed => sub {
42     my $row = scalar +($_[0]->get_selection->get_selected_rows)[0]->get_indices;
43    
44     my $k = $_[0]{data}[$row][1];
45     $k = $self->{cluster}{$k};
46    
47     $self->{schnauzer}->set_files (
48     [sort map "$self->{path}/$_", @{$k->[1]}],
49     );
50    
51     1;
52    
53     });
54     }
55    
56     sub analyse {
57     my ($self, $path) = @_;
58    
59     opendir my $dir, $path
60     or die "$path: $!";
61    
62     $self->{path} = $path;
63    
64     my @files = map {
65     my $str = $_;
66     $str =~ s/[\-_ ]+/ /g;
67     $str =~ s/\.[^\.]+//g;
68     [$str, $_]
69     }
70     grep !/\.(sfv|crc|par|par2)$/, readdir $dir;
71    
72     my %cluster;
73    
74     my @regexps = (
75     [qr<\d+$>, qr<^(.+?)\ *(\d+)$>],
76     [qr<\ \d+$>, qr<^(.+?)(\d+)\ +(\d+)$>],
77     );
78    
79     for my $info (@regexps) {
80     my $re = $info->[0];
81     for (@files) {
82     if ($_->[0] =~ $re && $_->[0] =~ $info->[1]) {
83     push @{ ($cluster{$1} ||= [ $info, []])->[1] }, $_->[1];
84     }
85     }
86     }
87    
88     $self->{cluster} = \%cluster;
89    
90     while (my ($k, $v) = each %cluster) {
91     my $n = scalar @{$v->[1]};
92     push @{$self->{list}{data}}, [$n, $k] if $n > 2;
93     }
94     }
95    
96     package main;
97    
98 root 1.2 sub new_schnauzer {
99     my $w = new Gtk2::Window;
100     $w->add (my $s = new Gtk2::CV::Schnauzer);
101    
102     $s->signal_connect (activate => sub {
103     $viewer->load_image ($_[1]);
104     });
105     $s->set_dir ("/root/pix");
106     $w->show_all;
107    
108     $w;
109     }
110 root 1.1
111     $viewer = new Gtk2::CV::ImageWindow;
112    
113     $viewer->show_all;
114    
115     my $cluster = new cluster;
116    
117 root 1.2 new_schnauzer;
118 root 1.1
119 root 1.2 #$cluster->analyse ("/fs/samsung/store-anime-done");
120     #$cluster->show_all;
121 root 1.1
122     #$viewer->set (path => "/fs/samsung/store-anime-done/yuumi_kazuaki_-_love_to_hajieki_to_sayonara_to_-_150.jpg");
123     #$viewer->set (path => "/root/pix/kvvz.jpg");
124    
125     main Gtk2;
126    
127