ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/CV/bin/cv
Revision: 1.1
Committed: Sun Nov 2 12:55:41 2003 UTC (20 years, 7 months ago) by root
Branch: MAIN
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #!/opt/bin/perl
2    
3     use Gtk2;
4     use Gtk2::Gdk::Keysyms;
5    
6     use Gtk2::CV::ImageWindow;
7    
8     $VERSION = 0.1;
9    
10     my $viewer;
11    
12     package schnauzer;
13    
14     use Glib::Object::Subclass Gtk2::Frame;
15    
16     sub INIT_INSTANCE {
17     my ($self) = @_;
18    
19     $self->add (
20     $self->{list} = new Gtk2::SimpleList "Name" => "text"
21     );
22    
23     $self->{list}->signal_connect (cursor_changed => sub {
24     my $row = scalar +($_[0]->get_selection->get_selected_rows)[0]->get_indices;
25     $viewer->load_image ($self->{files}[$row]);
26     });
27     }
28    
29     sub set_files {
30     my ($self, $files) = @_;
31    
32     $self->{files} = $files;
33    
34     @{$self->{list}{data}} = ();
35    
36     my ($dir, $file);
37    
38     for (@$files) {
39     if (/^(.*)\/([^\/]*)$/s) {
40     ($dir, $file) = ($1, $2);
41     } else {
42     ($dir, $file) = (".", $_);
43     }
44    
45     if (0) {
46     if ($file eq "." or $file eq "..") {
47     } elsif (-f "$dir/.xvpics/$file") {
48     print new_from_file Gtk2::Gdk::Pixbuf "$dir/.xvpics/$file";
49     } else {
50     }
51     }
52    
53     push @{$self->{list}{data}}, [$file];
54     }
55     }
56    
57     sub set_dir {
58     my ($self, $dir) = @_;
59    
60     my @files;
61    
62     opendir my $fh, $dir
63     or die "$dir: $!";
64    
65     $self->set_files ([map "$dir/$_", readdir $fh]);
66     }
67    
68     package cluster;
69    
70     use Glib::Object::Subclass Gtk2::Window;
71    
72     use Gtk2::SimpleList;
73    
74     sub INIT_INSTANCE {
75     my ($self) = @_;
76    
77     $self->set_default_size (600, 400);
78    
79     my $vbox = new Gtk2::VBox;
80     $self->add ($vbox);
81    
82     my $box = new Gtk2::HBox;
83     $vbox->add ($box);
84     $box->add (my $sw = new Gtk2::ScrolledWindow);
85     $sw->add (
86     $self->{list} = new Gtk2::SimpleList
87     "#" => "int",
88     "Name" => "text",
89     );
90    
91     $self->{schnauzer} = new schnauzer;
92     $box->add (my $sw = new Gtk2::ScrolledWindow);
93     $sw->add_with_viewport ($self->{schnauzer} = new schnauzer);
94    
95     $self->{list}->get_column(0)->set_sort_column_id(0);
96     $self->{list}->get_column(1)->set_sort_column_id(1);
97    
98     $self->{list}->signal_connect (cursor_changed => sub {
99     my $row = scalar +($_[0]->get_selection->get_selected_rows)[0]->get_indices;
100    
101     my $k = $_[0]{data}[$row][1];
102     $k = $self->{cluster}{$k};
103    
104     $self->{schnauzer}->set_files (
105     [sort map "$self->{path}/$_", @{$k->[1]}],
106     );
107    
108     1;
109    
110     });
111     }
112    
113     sub analyse {
114     my ($self, $path) = @_;
115    
116     opendir my $dir, $path
117     or die "$path: $!";
118    
119     $self->{path} = $path;
120    
121     my @files = map {
122     my $str = $_;
123     $str =~ s/[\-_ ]+/ /g;
124     $str =~ s/\.[^\.]+//g;
125     [$str, $_]
126     }
127     grep !/\.(sfv|crc|par|par2)$/, readdir $dir;
128    
129     my %cluster;
130    
131     my @regexps = (
132     [qr<\d+$>, qr<^(.+?)\ *(\d+)$>],
133     [qr<\ \d+$>, qr<^(.+?)(\d+)\ +(\d+)$>],
134     );
135    
136     for my $info (@regexps) {
137     my $re = $info->[0];
138     for (@files) {
139     if ($_->[0] =~ $re && $_->[0] =~ $info->[1]) {
140     push @{ ($cluster{$1} ||= [ $info, []])->[1] }, $_->[1];
141     }
142     }
143     }
144    
145     $self->{cluster} = \%cluster;
146    
147     while (my ($k, $v) = each %cluster) {
148     my $n = scalar @{$v->[1]};
149     push @{$self->{list}{data}}, [$n, $k] if $n > 2;
150     }
151     }
152    
153     package main;
154    
155     init Gtk2;
156    
157     $viewer = new Gtk2::CV::ImageWindow;
158    
159     $viewer->show_all;
160    
161     my $cluster = new cluster;
162    
163     0 and do {
164     my $w = new Gtk2::Window;
165     $w->add (my $s = new schnauzer);
166     $s->set_dir ("/root/pix");
167     $w->show_all;
168     };
169    
170     $cluster->analyse ("/fs/samsung/store-anime-done");
171     $cluster->show_all;
172    
173     #$viewer->set (path => "/fs/samsung/store-anime-done/yuumi_kazuaki_-_love_to_hajieki_to_sayonara_to_-_150.jpg");
174     #$viewer->set (path => "/root/pix/kvvz.jpg");
175    
176     main Gtk2;
177    
178