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