ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/gde/GCE/MainWindow.pm
Revision: 1.4
Committed: Sun Feb 5 17:43:42 2006 UTC (18 years, 4 months ago) by root
Branch: MAIN
Changes since 1.3: +3 -3 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 package GCE::MainWindow;
2
3 =head1 NAME
4
5 GCE::MainWindow - the main window class for gce
6
7 =cut
8
9 use Gtk2;
10 use Gtk2::Gdk::Keysyms;
11 use Gtk2::SimpleMenu;
12 use GCE::Map;
13 use GCE::AttrEdit;
14 use Crossfire;
15 use Crossfire::Gtk2;
16
17 use Glib::Object::Subclass
18 Gtk2::Window,
19 signals => {
20 open_pick => { return_type => undef, param_types => [Glib::String] }
21 };
22
23 use strict;
24
25 sub get_picks {
26 opendir PICKS, $main::PICKDIR
27 or die "Can't open editor picks: $main::pickdir: $!";
28
29 grep { !m/^(\.|\.\.)$/ && -f "$main::PICKDIR/$_" } readdir PICKS
30 }
31
32 sub INIT_INSTANCE {
33 my ($self) = @_;
34
35 $self->set_title ("gce - main window");
36
37 my @pick;
38 for (get_picks ()) {
39 push @pick, $_ => {
40 callback => sub { $self->signal_emit (open_pick => $_) }
41 };
42 }
43
44 my $menu_tree = [
45 _File => {
46 item_type => '<Branch>',
47 children => [
48 _New => {
49 callback => sub { $self->new_cb },
50 accelerator => '<ctrl>N'
51 },
52 _Open => {
53 callback => sub { $self->open_cb },
54 accelerator => '<ctrl>O'
55 },
56 _Quit => {
57 callback => sub { Gtk2->main_quit },
58 accelerator => '<ctrl>Q'
59 }
60 ]
61 },
62 _Edit => {
63 item_type => '<Branch>',
64 children => [
65 _Fill => {
66 callback => sub { die "NO IMPL" }, accelerator => "<ctrl>F"
67 },
68 "Clear _Top" => {
69 callback => sub { die "NO IMPL" }, accelerator => "<ctrl>T"
70 },
71 "_Clear All" => {
72 callback => sub { die "NO IMPL" }, accelerator => "<ctrl>C"
73 },
74 "_Attributes" => {
75 callback => sub {
76 my $w = Gtk2::Window->new;
77 $w->set_title ("Edit attrs");
78 $w->add (GCE::AttrEdit->new);
79 $w->show_all;
80 },
81 accelerator => "<ctrl>A"
82 },
83 ]
84 },
85 _Pick => {
86 item_type => '<Branch>',
87 children => \@pick
88 },
89 ];
90 my $men = Gtk2::SimpleMenu->new (
91 menu_tree => $menu_tree,
92 default_callback => \&default_cb,
93 );
94
95 $self->add (my $vb = Gtk2::VBox->new);
96 $vb->pack_start ($men->{widget}, 0, 1, 0);
97 $self->add_accel_group ($men->{accel_group});
98
99 my $map = new GCE::Map;
100 # XXX:load $ARGV?
101 my $path = $ARGV[0] || "$Crossfire::LIB/maps/mlab/university1";
102 $map->set_map (arch2map read_arch $path);
103 $self->{_map} = $map;
104
105 $vb->pack_start ($map, 1, 1, 0);
106 }
107
108 sub new_cb {
109 my ($self) = @_;
110 die "NOT IMPLEMENTED YET";
111 }
112
113 sub open_cb {
114 my ($self) = @_;
115
116 my $fc = Gtk2::FileChooserDialog->new (
117 'Open map', undef, 'open', 'gtk-cancel' => 'cancel', 'gtk-ok' => 'ok'
118 );
119 $fc->add_shortcut_folder ("$Crossfire::LIB/maps");
120
121 if ('ok' eq $fc->run) {
122 my $map = arch2map read_arch $fc->get_filename;
123 $self->{_map}->set_map ($map);
124 $self->{_map}->hide;
125 $self->{_map}->show_all;
126 }
127
128 $fc->destroy;
129 }
130
131 sub open_pick_cb {
132 my ($self, $pick) = @_;
133 }
134
135 =head1 AUTHOR
136
137 Marc Lehmann <schmorp@schmorp.de>
138 http://home.schmorp.de/
139
140 Robin Redeker <elmex@ta-sa.org>
141 http://www.ta-sa.org/
142
143 =cut
144 1;
145