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

# User Rev Content
1 elmex 1.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 elmex 1.2 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 elmex 1.1
29 elmex 1.2 grep { !m/^(\.|\.\.)$/ && -f "$main::PICKDIR/$_" } readdir PICKS
30     }
31 elmex 1.1
32     sub INIT_INSTANCE {
33     my ($self) = @_;
34    
35 elmex 1.2 $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 root 1.4 my $path = $ARGV[0] || "$Crossfire::LIB/maps/mlab/university1";
102     $map->set_map (arch2map read_arch $path);
103 elmex 1.2 $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 root 1.4 $self->{_map}->set_map ($map);
124 elmex 1.2 $self->{_map}->hide;
125 elmex 1.3 $self->{_map}->show_all;
126 elmex 1.2 }
127    
128     $fc->destroy;
129     }
130    
131     sub open_pick_cb {
132     my ($self, $pick) = @_;
133 elmex 1.1 }
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