… | |
… | |
13 | use Crossfire; |
13 | use Crossfire; |
14 | use Crossfire::MapWidget; |
14 | use Crossfire::MapWidget; |
15 | |
15 | |
16 | use GCE::AttrEdit; |
16 | use GCE::AttrEdit; |
17 | use GCE::MapEditor; |
17 | use GCE::MapEditor; |
|
|
18 | use GCE::StackView; |
18 | |
19 | |
19 | use GCE::AttrTypemap; |
20 | use GCE::AttrTypemap; |
20 | |
21 | |
21 | use Glib::Object::Subclass |
22 | use Glib::Object::Subclass |
22 | Gtk2::Window; |
23 | Gtk2::Window; |
23 | |
24 | |
24 | use strict; |
25 | use strict; |
|
|
26 | |
|
|
27 | our $MAINWIN; |
|
|
28 | |
|
|
29 | sub test_stack_view { |
|
|
30 | my ($self) = @_; |
|
|
31 | |
|
|
32 | return if defined $self->{sv}; |
|
|
33 | |
|
|
34 | my $w = Gtk2::Window->new ('toplevel'); |
|
|
35 | $w->set_title ('gce - stack view'); |
|
|
36 | $w->signal_connect ('delete-event' => sub { $self->{sv} = undef; }); |
|
|
37 | $w->add ($self->{sv} = GCE::StackView->new); |
|
|
38 | $w->show_all; |
|
|
39 | } |
|
|
40 | |
|
|
41 | sub show_attr_editor { |
|
|
42 | my ($self) = @_; |
|
|
43 | |
|
|
44 | my $w = $self->{attr_edit_win} = Gtk2::Window->new; |
|
|
45 | $w->set_title ("gce - edit attrs"); |
|
|
46 | $w->add ($self->{attr_edit} = GCE::AttrEdit->new); |
|
|
47 | $w->signal_connect ('delete-event' => sub { delete $self->{attr_edit}; 0 }); |
|
|
48 | $w->show_all; |
|
|
49 | } |
|
|
50 | |
|
|
51 | sub update_attr_editor { |
|
|
52 | my ($self, $arch, $ro) = @_; |
|
|
53 | |
|
|
54 | return unless $self->{attr_edit}; |
|
|
55 | |
|
|
56 | $self->{attr_edit}->set_arch ($arch, $ro); |
|
|
57 | $self->{attr_edit_win}->set_title ("gce - edit $arch->{_name}"); |
|
|
58 | } |
|
|
59 | |
|
|
60 | sub update_stack_view { |
|
|
61 | my ($self, $mapedit, $stack, $x, $y) = @_; |
|
|
62 | |
|
|
63 | return unless $self->{sv}; |
|
|
64 | |
|
|
65 | $self->{sv}->set_stack ($mapedit, $stack, $x, $y); |
|
|
66 | } |
|
|
67 | |
|
|
68 | #XXX: Soon we want to handle multiple maps! |
|
|
69 | #XXX: Refactor this to MapEditor?? |
|
|
70 | sub change_map_tile { |
|
|
71 | my ($self, $mapedit, $x, $y, $newstack, $oldstack) = @_; |
|
|
72 | |
|
|
73 | $mapedit->{map}{map}{map}[$x][$y] = $newstack; |
|
|
74 | $mapedit->{map}->update_map ($x, $y, 1, 1); |
|
|
75 | } |
25 | |
76 | |
26 | sub open_pick_window { |
77 | sub open_pick_window { |
27 | my ($self) = @_; |
78 | my ($self) = @_; |
28 | |
79 | |
29 | my $p = GCE::PickWindow->new ( |
80 | my $p = GCE::PickWindow->new ( |
… | |
… | |
31 | |
82 | |
32 | $self->{mapedit}->update_pick ($_[0]) |
83 | $self->{mapedit}->update_pick ($_[0]) |
33 | }, |
84 | }, |
34 | arch_edit_cb => sub { |
85 | arch_edit_cb => sub { |
35 | |
86 | |
36 | $self->{mapedit}->update_attr_editor ($_[0], 1) |
87 | $self->update_attr_editor ($_[0], 1) |
37 | } |
88 | } |
38 | ); |
89 | ); |
39 | $p->init; |
90 | $p->init; |
40 | } |
91 | } |
41 | |
92 | |
… | |
… | |
73 | }, |
124 | }, |
74 | "_Clear All" => { |
125 | "_Clear All" => { |
75 | callback => sub { die "NO IMPL" }, |
126 | callback => sub { die "NO IMPL" }, |
76 | accelerator => "<ctrl>X" |
127 | accelerator => "<ctrl>X" |
77 | }, |
128 | }, |
|
|
129 | "Open _Attr Editor" => { |
|
|
130 | callback => sub { $self->show_attr_editor }, |
|
|
131 | accelerator => "<ctrl>A" |
|
|
132 | }, |
78 | "Open _Picker" => { |
133 | "Open _Picker" => { |
79 | callback => sub { $self->open_pick_window }, |
134 | callback => sub { $self->open_pick_window }, |
80 | accelerator => "<ctrl>P" |
135 | accelerator => "<ctrl>P" |
81 | }, |
136 | }, |
|
|
137 | "Open _Stack View" => { |
|
|
138 | callback => sub { $self->test_stack_view }, |
|
|
139 | accelerator => "<ctrl>V" |
|
|
140 | }, |
|
|
141 | |
82 | ] |
142 | ] |
83 | } |
143 | } |
84 | ]; |
144 | ]; |
85 | |
145 | |
86 | my $men = |
146 | my $men = |
… | |
… | |
97 | |
157 | |
98 | |
158 | |
99 | sub INIT_INSTANCE { |
159 | sub INIT_INSTANCE { |
100 | my ($self) = @_; |
160 | my ($self) = @_; |
101 | |
161 | |
|
|
162 | $MAINWIN = $self; |
|
|
163 | |
102 | $self->set_title ("gce - main window"); |
164 | $self->set_title ("gce - main window"); |
103 | |
165 | |
104 | $self->add (my $vb = Gtk2::VBox->new); |
166 | $self->add (my $vb = Gtk2::VBox->new); |
105 | $vb->pack_start ($self->build_menu, 0, 1, 0); |
167 | $vb->pack_start ($self->build_menu, 0, 1, 0); |
|
|
168 | |
106 | $vb->pack_start (my $mapedit = $self->{mapedit} = new GCE::MapEditor, 1, 1, 0); |
169 | $vb->pack_start (my $mapedit = $self->{mapedit} = new GCE::MapEditor, 1, 1, 0); |
107 | |
170 | |
108 | # XXX:load $ARGV _cleanly_? |
171 | # XXX:load $ARGV _cleanly_? |
109 | $mapedit->open_map ($ARGV[0] || "$Crossfire::LIB/maps/dragonisland/advguild3"); |
172 | $mapedit->open_map ($ARGV[0] || "$Crossfire::LIB/maps/dragonisland/advguild3"); |
110 | |
173 | |