ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/gde/GCE/MainWindow.pm
Revision: 1.8
Committed: Mon Feb 6 09:21:33 2006 UTC (18 years, 4 months ago) by elmex
Branch: MAIN
Changes since 1.7: +27 -5 lines
Log Message:
minor changes

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 elmex 1.8 open_pick => { return_type => undef, param_types => [Glib::String] },
22     update_stack_view => { return_type => undef, param_types => [Glib::Int, Glib::Int, Glib::Scalar] },
23 elmex 1.2 };
24    
25     use strict;
26    
27     sub get_picks {
28     opendir PICKS, $main::PICKDIR
29     or die "Can't open editor picks: $main::pickdir: $!";
30 elmex 1.1
31 elmex 1.2 grep { !m/^(\.|\.\.)$/ && -f "$main::PICKDIR/$_" } readdir PICKS
32     }
33 elmex 1.1
34 elmex 1.8 sub get_tile_stack {
35     my ($self, $x, $y) = @_;
36     my $as;
37    
38     if ($x > 0 || $x < $self->{map}{width}
39     || $y > 0 || $y < $self->{map}{height}) {
40    
41     $as = $self->{map}{map}{map}[$x][$y] || [];
42     }
43    
44     return $as;
45     }
46    
47 elmex 1.1 sub INIT_INSTANCE {
48     my ($self) = @_;
49    
50 elmex 1.8 $self->signal_connect (button_release_event => sub {
51     my ($self, $event) = @_;
52     return unless defined $self->{map};
53    
54     my ($mx, $my) = $self->{map}->coord ($event->x, $event->y);
55     my $s = $self->get_tile_stack ($mx, $my);
56     $self->signal_emit (update_stack_view => $mx, $my, $s);
57     });
58 elmex 1.2 $self->set_title ("gce - main window");
59    
60     my @pick;
61     for (get_picks ()) {
62     push @pick, $_ => {
63     callback => sub { $self->signal_emit (open_pick => $_) }
64     };
65     }
66    
67     my $menu_tree = [
68     _File => {
69     item_type => '<Branch>',
70     children => [
71     _New => {
72     callback => sub { $self->new_cb },
73     accelerator => '<ctrl>N'
74     },
75     _Open => {
76     callback => sub { $self->open_cb },
77     accelerator => '<ctrl>O'
78     },
79     _Quit => {
80     callback => sub { Gtk2->main_quit },
81     accelerator => '<ctrl>Q'
82     }
83     ]
84     },
85     _Edit => {
86     item_type => '<Branch>',
87     children => [
88     _Fill => {
89     callback => sub { die "NO IMPL" }, accelerator => "<ctrl>F"
90     },
91     "Clear _Top" => {
92     callback => sub { die "NO IMPL" }, accelerator => "<ctrl>T"
93     },
94     "_Clear All" => {
95     callback => sub { die "NO IMPL" }, accelerator => "<ctrl>C"
96     },
97     "_Attributes" => {
98     callback => sub {
99     my $w = Gtk2::Window->new;
100     $w->set_title ("Edit attrs");
101     $w->add (GCE::AttrEdit->new);
102     $w->show_all;
103     },
104     accelerator => "<ctrl>A"
105     },
106     ]
107     },
108     _Pick => {
109     item_type => '<Branch>',
110     children => \@pick
111     },
112     ];
113     my $men = Gtk2::SimpleMenu->new (
114     menu_tree => $menu_tree,
115     default_callback => \&default_cb,
116     );
117    
118     $self->add (my $vb = Gtk2::VBox->new);
119     $vb->pack_start ($men->{widget}, 0, 1, 0);
120     $self->add_accel_group ($men->{accel_group});
121    
122 root 1.7 my $map = new Crossfire::MapWidget;
123 root 1.5 # XXX:load $ARGV _cleanly_?
124 root 1.6 my $path = $ARGV[0] || "$Crossfire::LIB/maps/dragonisland/advguild3";
125 root 1.4 $map->set_map (arch2map read_arch $path);
126 elmex 1.8 $self->{map} = $map;
127 elmex 1.2
128     $vb->pack_start ($map, 1, 1, 0);
129     }
130    
131     sub new_cb {
132     my ($self) = @_;
133     die "NOT IMPLEMENTED YET";
134     }
135    
136     sub open_cb {
137     my ($self) = @_;
138    
139     my $fc = Gtk2::FileChooserDialog->new (
140     'Open map', undef, 'open', 'gtk-cancel' => 'cancel', 'gtk-ok' => 'ok'
141     );
142     $fc->add_shortcut_folder ("$Crossfire::LIB/maps");
143    
144     if ('ok' eq $fc->run) {
145     my $map = arch2map read_arch $fc->get_filename;
146 elmex 1.8 $self->{map}->set_map ($map);
147     $self->{map}->hide;
148     $self->{map}->show_all;
149 elmex 1.2 }
150    
151     $fc->destroy;
152     }
153    
154     sub open_pick_cb {
155     my ($self, $pick) = @_;
156 elmex 1.1 }
157    
158     =head1 AUTHOR
159    
160     Marc Lehmann <schmorp@schmorp.de>
161     http://home.schmorp.de/
162    
163     Robin Redeker <elmex@ta-sa.org>
164     http://www.ta-sa.org/
165    
166     =cut
167     1;
168