package GCE::MainWindow; =head1 NAME GCE::MainWindow - the main window class for gce =cut use Gtk2; use Gtk2::Gdk::Keysyms; use Gtk2::SimpleMenu; use GCE::Map; use GCE::AttrEdit; use Crossfire; use Crossfire::Gtk2; use Glib::Object::Subclass Gtk2::Window, signals => { open_pick => { return_type => undef, param_types => [Glib::String] } }; use strict; sub get_picks { opendir PICKS, $main::PICKDIR or die "Can't open editor picks: $main::pickdir: $!"; grep { !m/^(\.|\.\.)$/ && -f "$main::PICKDIR/$_" } readdir PICKS } sub INIT_INSTANCE { my ($self) = @_; $self->set_title ("gce - main window"); my @pick; for (get_picks ()) { push @pick, $_ => { callback => sub { $self->signal_emit (open_pick => $_) } }; } my $menu_tree = [ _File => { item_type => '', children => [ _New => { callback => sub { $self->new_cb }, accelerator => 'N' }, _Open => { callback => sub { $self->open_cb }, accelerator => 'O' }, _Quit => { callback => sub { Gtk2->main_quit }, accelerator => 'Q' } ] }, _Edit => { item_type => '', children => [ _Fill => { callback => sub { die "NO IMPL" }, accelerator => "F" }, "Clear _Top" => { callback => sub { die "NO IMPL" }, accelerator => "T" }, "_Clear All" => { callback => sub { die "NO IMPL" }, accelerator => "C" }, "_Attributes" => { callback => sub { my $w = Gtk2::Window->new; $w->set_title ("Edit attrs"); $w->add (GCE::AttrEdit->new); $w->show_all; }, accelerator => "A" }, ] }, _Pick => { item_type => '', children => \@pick }, ]; my $men = Gtk2::SimpleMenu->new ( menu_tree => $menu_tree, default_callback => \&default_cb, ); $self->add (my $vb = Gtk2::VBox->new); $vb->pack_start ($men->{widget}, 0, 1, 0); $self->add_accel_group ($men->{accel_group}); my $map = new GCE::Map; # XXX:load $ARGV? $map->{map} = arch2map read_arch "$Crossfire::LIB/maps/mlab/university1"; $self->{_map} = $map; $vb->pack_start ($map, 1, 1, 0); } sub new_cb { my ($self) = @_; die "NOT IMPLEMENTED YET"; } sub open_cb { my ($self) = @_; my $fc = Gtk2::FileChooserDialog->new ( 'Open map', undef, 'open', 'gtk-cancel' => 'cancel', 'gtk-ok' => 'ok' ); $fc->add_shortcut_folder ("$Crossfire::LIB/maps"); if ('ok' eq $fc->run) { my $map = arch2map read_arch $fc->get_filename; # XXX: $self->{_map}->set_map ($map) ... $self->{_map}->{map} = $map; $self->{_map}->hide; $self->{_map}->show; } $fc->destroy; } sub open_pick_cb { my ($self, $pick) = @_; } =head1 AUTHOR Marc Lehmann http://home.schmorp.de/ Robin Redeker http://www.ta-sa.org/ =cut 1;