ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/CV/bin/cv
(Generate patch)

Comparing CV/bin/cv (file contents):
Revision 1.62 by root, Tue Oct 4 04:55:47 2005 UTC vs.
Revision 1.73 by root, Thu Nov 22 08:52:57 2007 UTC

1#!/opt/bin/perl 1#!/opt/bin/perl
2 2
3use Cwd (); 3use Cwd ();
4use Encode (); 4use Encode ();
5use File::Glob ();
5 6
6use Gtk2 -init; 7use Gtk2 -init;
7use Gtk2::Gdk::Keysyms; 8use Gtk2::Gdk::Keysyms;
8 9
9use Gtk2::CV; 10use Gtk2::CV;
70 } else { 71 } else {
71 &std_keys 72 &std_keys
72 or $schnauzer->signal_emit (key_press_event => $_[1]) 73 or $schnauzer->signal_emit (key_press_event => $_[1])
73 } 74 }
74 }); 75 });
76 $self->signal_connect (delete_event => sub { $_[0]->destroy; 0 });
75 $self->signal_connect (destroy => sub { 77 $self->signal_connect (destroy => sub {
76 $viewer = undef if $viewer == $_[0]; 78 $viewer = undef if $viewer == $_[0];
77 79
78 main_quit Gtk2 unless --$viewer_count; 80 main_quit Gtk2 unless --$viewer_count;
81
82 0
79 }); 83 });
80 84
81 $self->signal_connect (button3_press_event => sub { 85 $self->signal_connect (button3_press_event => sub {
82 $mainwin->visible 86 $mainwin->visible
83 ? $mainwin->hide 87 ? $mainwin->hide
84 : $mainwin->show_all; 88 : $mainwin->show_all;
89
85 1 90 1
86 }); 91 });
87 92
88 Gtk2::CV::Plugin->call (new_imagewindow => $self); 93 Gtk2::CV::Plugin->call (new_imagewindow => $self);
89 94
99 if ($key == $Gtk2::Gdk::Keysyms{q}) { 104 if ($key == $Gtk2::Gdk::Keysyms{q}) {
100 $viewer->destroy; 105 $viewer->destroy;
101 } elsif ($ctrl && $key == $Gtk2::Gdk::Keysyms{v}) { 106 } elsif ($ctrl && $key == $Gtk2::Gdk::Keysyms{v}) {
102 my $w = new Gtk2::Window; 107 my $w = new Gtk2::Window;
103 108
109 $w->set_role ("schnauzer");
104 $w->set_title ("CV: Schnauzer"); 110 $w->set_title ("CV: Schnauzer");
105 $w->add (my $s = new_schnauzer); 111 $w->add (my $s = new_schnauzer);
106 $s->set_dir (File::Spec->curdir); 112 $s->set_dir (File::Spec->curdir);
107 $s->set_geometry_hints; 113 $s->set_geometry_hints;
108 $w->show_all; 114 $w->show_all;
109 115
110 } elsif ($ctrl && $key == $Gtk2::Gdk::Keysyms{h}) { 116 } elsif ($ctrl && $key == $Gtk2::Gdk::Keysyms{h}) {
111 unless ($help) { 117 unless ($help) {
112 require Gtk2::PodViewer; 118 require Gtk2::Ex::PodViewer;
113 119
114 $help = new Gtk2::Window; 120 $help = new Gtk2::Window;
121 $help->set_role ("help");
115 $help->set_title ("CV: Help"); 122 $help->set_title ("CV: Help");
116 $help->set_default_size (500, 300); 123 $help->set_default_size (500, 300);
117 $help->signal_connect (delete_event => sub { $help->hide; 1 }); 124 $help->signal_connect (delete_event => sub { $help->hide; 1 });
118 125
119 $help->add (my $sw = new Gtk2::ScrolledWindow); 126 $help->add (my $sw = new Gtk2::ScrolledWindow);
120 $sw->add (my $h = new Gtk2::PodViewer); 127 $sw->add (my $h = new Gtk2::Ex::PodViewer);
121 128
122 #binmode DATA, ":utf8"; 129 #binmode DATA, ":utf8";
123 $h->load_string (do { local $/; <DATA> }); 130 $h->load_string (do { local $/; <DATA> });
124 } 131 }
125 132
136 $::cur_viewer = $viewer; 143 $::cur_viewer = $viewer;
137 144
138 $schnauzer = new_schnauzer; 145 $schnauzer = new_schnauzer;
139 146
140 $mainwin = new Gtk2::Window; 147 $mainwin = new Gtk2::Window;
148 $mainwin->set_role ("main");
141 $mainwin->set_title ("CV"); 149 $mainwin->set_title ("CV");
142 $mainwin->add (my $vbox = new Gtk2::VBox); 150 $mainwin->add (my $vbox = new Gtk2::VBox);
143 $mainwin->signal_connect (delete_event => sub { $mainwin->hide; 1 }); 151 $mainwin->signal_connect (delete_event => sub { $mainwin->hide; 1 });
144 152
145 $vbox->add ($schnauzer); 153 $vbox->add ($schnauzer);
153 161
154 $schnauzer->set_geometry_hints; 162 $schnauzer->set_geometry_hints;
155} 163}
156 164
157if (@ARGV) { 165if (@ARGV) {
158 @ARGV == 1 && -d $ARGV[0] 166 my $show_first = sub {
159 ? $schnauzer->set_dir (Glib::filename_to_unicode shift)
160 : $schnauzer->set_paths ([map Glib::filename_to_unicode $_, @ARGV]);
161 $schnauzer->show_all; 167 $schnauzer->show_all;
162 $schnauzer->handle_key ($Gtk2::Gdk::Keysyms{space}, []); 168 $schnauzer->handle_key ($Gtk2::Gdk::Keysyms{space}, []);
169 $viewer->show_all;
170 };
171
172 if (@ARGV == 1 && $ARGV[0] eq "-0r") {
173 local $/;
174 $schnauzer->set_paths ([map Glib::filename_to_unicode $_, split /\x00/, <STDIN>], 1, $show_first);
175 } elsif (@ARGV == 1 && -d $ARGV[0]) {
176 $schnauzer->set_dir (Glib::filename_to_unicode shift, $show_first);
177 } else {
178 if ($ARGV[0] eq "-g") {
179 shift @ARGV;
180 @ARGV = map +(File::Glob::bsd_glob $_, File::Glob::GLOB_BRACE | File::Glob::GLOB_QUOTE), @ARGV;
181 }
182 $schnauzer->set_paths ([map Glib::filename_to_unicode $_, @ARGV], 1, $show_first);
183 }
163} else { 184} else {
164 $schnauzer->set_dir (File::Spec->curdir); 185 $schnauzer->set_dir (File::Spec->curdir, sub {
165 $mainwin->show_all; 186 $mainwin->show_all;
166}
167
168$viewer->show_all; 187 $viewer->show_all;
188 });
189}
169 190
170main Gtk2; 191main Gtk2;
192
193Gtk2::CV::flush_aio;
171 194
172__DATA__ 195__DATA__
173 196
174=encoding utf-8 197=encoding utf-8
175 198
292 r set scaling mode to 'nearest' (fastest) 315 r set scaling mode to 'nearest' (fastest)
293 s set scaling mode to 'bilinear' (default) 316 s set scaling mode to 'bilinear' (default)
294 shift-s set scaling mode to 'hyper' (slowest) 317 shift-s set scaling mode to 'hyper' (slowest)
295 t rotate clockwise 90° 318 t rotate clockwise 90°
296 T rotate counterclockwise° 319 T rotate counterclockwise°
320 a apply all rotations loslessly to a jpeg file (using exiftran)
297 ctrl-v open a new visual schnauzer window for the current dir 321 ctrl-v open a new visual schnauzer window for the current dir
322 ctrl-c clone the current image window
298 ctrl-e run an editor ($CV_EDITOR or "gimp") on the current image 323 ctrl-e run an editor ($CV_EDITOR or "gimp") on the current image
299 ctrl-p fire up the print dialog 324 ctrl-p fire up the print dialog
300 escape cancel a crop action 325 escape cancel a crop action
301 326
302And when playing movies, these additional keys are active: 327And when playing movies, these additional keys are active:
319Left-clicking into the image window will let you crop the image (usually 344Left-clicking into the image window will let you crop the image (usually
320to zoom into large images that CV scales down). 345to zoom into large images that CV scales down).
321 346
322=head2 THE VISUAL SCHNAUZER 347=head2 THE VISUAL SCHNAUZER
323 348
349Any image-loading action in a schnauzer window acts on the
350"last-recently-activated" imagewindow, which currently is simply the last
351image window that received a keypress.
352
324You can use the following keys in the schnauzer window: 353You can use the following keys in the schnauzer window:
325 354
326 ctrl-space, 355 ctrl-space,
327 space move to and display next image 356 space move to and display next image
328 ctrl-backspace, 357 ctrl-backspace,
409=item CV_EDITOR 438=item CV_EDITOR
410 439
411The program that gets executed when the user presses C<CTRL-e> in the 440The program that gets executed when the user presses C<CTRL-e> in the
412Schnauzer or image window. The default is C<gimp>. 441Schnauzer or image window. The default is C<gimp>.
413 442
443=item CV_AUDIO_PLAYER
444
445Program used to play all sorts of audio (wav, aif, mp3, ogg...), default "play".
446Will be called like C<< $CV_AUDIO_PLAYER -- <path> >>.
447
414=item CV_PRINT_DESTINATION 448=item CV_PRINT_DESTINATION
415 449
416The default (perl-style) destination to use in the print dialog. 450The default (perl-style) destination to use in the print dialog.
417 451
418=item CV_TRASHCAN 452=item CV_TRASHCAN

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines