ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/CV/bin/cv
Revision: 1.6
Committed: Mon Nov 3 14:31:57 2003 UTC (20 years, 8 months ago) by root
Branch: MAIN
Changes since 1.5: +4 -5 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 root 1.6 $self->{schnauzer}->signal_connect (activate => sub { $viewer->load_image ($_[1]) });
39    
40 root 1.1 $self->{list}->get_column(0)->set_sort_column_id(0);
41     $self->{list}->get_column(1)->set_sort_column_id(1);
42    
43     $self->{list}->signal_connect (cursor_changed => sub {
44     my $row = scalar +($_[0]->get_selection->get_selected_rows)[0]->get_indices;
45    
46     my $k = $_[0]{data}[$row][1];
47     $k = $self->{cluster}{$k};
48    
49     $self->{schnauzer}->set_files (
50     [sort map "$self->{path}/$_", @{$k->[1]}],
51     );
52    
53     1;
54    
55     });
56     }
57    
58     sub analyse {
59     my ($self, $path) = @_;
60    
61     opendir my $dir, $path
62     or die "$path: $!";
63    
64     $self->{path} = $path;
65    
66     my @files = map {
67     my $str = $_;
68     $str =~ s/[\-_ ]+/ /g;
69     $str =~ s/\.[^\.]+//g;
70     [$str, $_]
71     }
72     grep !/\.(sfv|crc|par|par2)$/, readdir $dir;
73    
74     my %cluster;
75    
76     my @regexps = (
77     [qr<\d+$>, qr<^(.+?)\ *(\d+)$>],
78     [qr<\ \d+$>, qr<^(.+?)(\d+)\ +(\d+)$>],
79     );
80    
81     for my $info (@regexps) {
82     my $re = $info->[0];
83     for (@files) {
84     if ($_->[0] =~ $re && $_->[0] =~ $info->[1]) {
85     push @{ ($cluster{$1} ||= [ $info, []])->[1] }, $_->[1];
86     }
87     }
88     }
89    
90     $self->{cluster} = \%cluster;
91    
92     while (my ($k, $v) = each %cluster) {
93     my $n = scalar @{$v->[1]};
94     push @{$self->{list}{data}}, [$n, $k] if $n > 2;
95     }
96     }
97    
98     package main;
99    
100 root 1.2 sub new_schnauzer {
101     my $w = new Gtk2::Window;
102     $w->add (my $s = new Gtk2::CV::Schnauzer);
103    
104 root 1.6 $s->signal_connect (activate => sub { $viewer->load_image ($_[1]) });
105 root 1.4 $s->signal_connect (key_press_event => \&std_keys);
106     $w->signal_connect (delete_event => sub { $_[0]->destroy });
107    
108 root 1.6 $s->set_dir (".");
109 root 1.2 $w->show_all;
110    
111     $w;
112     }
113 root 1.1
114 root 1.4 sub std_keys {
115     my $key = $_[1]->keyval;
116    
117     my $ctrl = grep $_ eq "control-mask", @{$_[1]->state};
118    
119     if ($key == $Gtk2::Gdk::Keysyms{q}) {
120     main_quit Gtk2;
121     } elsif ($ctrl && $key == $Gtk2::Gdk::Keysyms{v}) {
122     new_schnauzer;
123     } else {
124     return 0;
125     }
126    
127     1;
128     }
129    
130 root 1.1 $viewer = new Gtk2::CV::ImageWindow;
131 root 1.3 $viewer->signal_connect (key_press_event => \&std_keys);
132 root 1.4 $viewer->signal_connect (delete_event => sub { main_quit Gtk2 });
133 root 1.1 $viewer->show_all;
134    
135     my $cluster = new cluster;
136    
137 root 1.5 #$cluster->analyse ("/fs/samsung/store-anime-done");
138     #$cluster->show_all;
139 root 1.1
140     #$viewer->set (path => "/fs/samsung/store-anime-done/yuumi_kazuaki_-_love_to_hajieki_to_sayonara_to_-_150.jpg");
141     #$viewer->set (path => "/root/pix/kvvz.jpg");
142    
143     main Gtk2;
144    
145