ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/gde/GCE/MainWindow.pm
Revision: 1.9
Committed: Mon Feb 6 23:06:52 2006 UTC (18 years, 3 months ago) by elmex
Branch: MAIN
Changes since 1.8: +10 -24 lines
Log Message:
implemented picker

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