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

Comparing CV/bin/cv (file contents):
Revision 1.11 by root, Wed Nov 5 01:29:47 2003 UTC vs.
Revision 1.21 by root, Sat Nov 8 01:00:08 2003 UTC

1#!/opt/bin/perl 1#!/opt/bin/perl
2
3use Gtk2 -init;
4use Gtk2::Gdk::Keysyms;
5
6use Gtk2::CV::ImageWindow;
7use Gtk2::CV::Schnauzer;
8
9use Gtk2::CV;
10
11Gtk2::Rc->parse (Gtk2::CV::find_rcfile "gtkrc");
12
13use File::Spec;
14
15my $mainwin;
16my $viewer;
17my $schnauzer;
18my $info;
19my $help;
20
21sub new_schnauzer {
22 my $s = new Gtk2::CV::Schnauzer;
23
24 $s->signal_connect_after (key_press_event => \&std_keys);
25 $s->signal_connect (activate => sub {
26 my $label = sprintf "%s (%d)",
27 (File::Spec->splitpath ($_[1]))[2],
28 -s $_[1];
29 $info->set_label ($label);
30 $viewer->load_image ($_[1]);
31 });
32
33 $s;
34}
35
36sub std_keys {
37 my $key = $_[1]->keyval;
38 my $state = $_[1]->state;
39
40 my $ctrl = $state * "control-mask";
41
42 if ($key == $Gtk2::Gdk::Keysyms{q}) {
43 main_quit Gtk2;
44 } elsif ($ctrl && $key == $Gtk2::Gdk::Keysyms{v}) {
45 my $w = new Gtk2::Window;
46 $w->add (my $s = new_schnauzer);
47 $s->set_dir (File::Spec->curdir);
48 $w->show_all;
49 } elsif ($ctrl && $key == $Gtk2::Gdk::Keysyms{h}) {
50 unless ($help) {
51 require Gtk2::PodViewer;
52
53 $help = new Gtk2::Window;
54 $help->set_title ("CV Help");
55 $help->set_default_size (500, 300);
56 $help->signal_connect (delete_event => sub { $help->hide; 1 });
57
58 $help->add (my $sw = new Gtk2::ScrolledWindow);
59 $sw->add (my $h = new Gtk2::PodViewer);
60
61 #binmode DATA, ":utf8";
62 $h->load_string (do { local $/; <DATA> });
63 }
64
65 $help->show_all;
66 } else {
67 #$mainwin->show_all;
68 $schnauzer->handle_key ($key, $state);
69 }
70
71 1;
72}
73
74{
75 $viewer = new Gtk2::CV::ImageWindow;
76
77 $viewer->set_title ("CV: Image");
78
79 $viewer->signal_connect (key_press_event => \&std_keys);
80 $viewer->signal_connect (delete_event => sub { main_quit Gtk2 });
81
82 $viewer->signal_connect (button3_press_event => sub {
83 $mainwin->visible
84 ? $mainwin->hide
85 : $mainwin->show_all;
86 });
87
88 $schnauzer = new_schnauzer;
89
90 $mainwin = new Gtk2::Window;
91 $mainwin->set_title ("CV");
92 $mainwin->add (my $vbox = new Gtk2::VBox);
93
94 $vbox->add ($schnauzer);
95 $vbox->add (my $frame = new Gtk2::Frame);
96 $frame->add (my $hbox = new Gtk2::HBox 0, 0);
97 $hbox->pack_start ((new Gtk2::Label "Info"), 0, 0, 0);
98 $hbox->pack_start (($info = new Gtk2::Label), 1, 1, 0);
99}
100
101if (@ARGV) {
102 $schnauzer->set_paths (\@ARGV);
103 $schnauzer->handle_key ($Gtk2::Gdk::Keysyms{space}, []);
104} else {
105 $schnauzer->set_dir (File::Spec->curdir);
106 $mainwin->show_all;
107}
108
109$viewer->show_all;
110
111main Gtk2;
112
113__DATA__
2 114
3=head1 NAME 115=head1 NAME
4 116
5cv - a fast gtk+ image viewer modeled after xv 117cv - a fast gtk+ image viewer modeled after xv
6 118
59 rotate on disk 171 rotate on disk
60 print 172 print
61 lots of ui issues 173 lots of ui issues
62 save(?) 174 save(?)
63 preferences 175 preferences
176 ctrl-u in schnauzer
177 shift-cursor in schnauzer
64 178
65=head1 AUTHOR 179=head1 AUTHOR
66 180
67Marc Lehmann <cv@plan9.de>. 181Marc Lehmann <cv@plan9.de>.
68 182
69=cut 183=cut
70 184
71use Gtk2 -init;
72use Gtk2::Gdk::Keysyms;
73
74use Gtk2::CV::ImageWindow;
75use Gtk2::CV::Schnauzer;
76
77my $viewer;
78my $schnauzer;
79
80sub new_schnauzer {
81 my $w = new Gtk2::Window;
82 $w->add (my $s = new Gtk2::CV::Schnauzer);
83
84 $s->signal_connect (activate => sub { $viewer->load_image ($_[1]) });
85 $s->signal_connect_after (key_press_event => \&std_keys);
86
87 $s->set_dir (".");
88 $w->show_all;
89
90 $s;
91}
92
93sub std_keys {
94 my $key = $_[1]->keyval;
95 my $state = $_[1]->state;
96
97 my $ctrl = grep $_ eq "control-mask", @$state;
98
99 if ($key == $Gtk2::Gdk::Keysyms{q}) {
100 main_quit Gtk2;
101 } elsif ($ctrl && $key == $Gtk2::Gdk::Keysyms{v}) {
102 new_schnauzer;
103 } else {
104 $schnauzer->handle_key ($key, $state);
105 }
106
107 1;
108}
109
110$viewer = new Gtk2::CV::ImageWindow;
111$viewer->signal_connect (key_press_event => \&std_keys);
112$viewer->signal_connect (delete_event => sub { main_quit Gtk2 });
113
114$schnauzer = new_schnauzer;
115
116if (@ARGV) {
117 $viewer->load_image ($ARGV[0]);
118
119 if (@ARGV > 1) {
120 $schnauzer->set_paths (\@ARGV);
121 }
122}
123
124$viewer->show_all;
125
126main Gtk2;
127
128

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines