… | |
… | |
21 | |
21 | |
22 | use GCE::AttrTypemap; |
22 | use GCE::AttrTypemap; |
23 | |
23 | |
24 | use Glib::Object::Subclass |
24 | use Glib::Object::Subclass |
25 | Gtk2::Window; |
25 | Gtk2::Window; |
|
|
26 | |
|
|
27 | use GCE::Util; |
26 | |
28 | |
27 | use strict; |
29 | use strict; |
28 | |
30 | |
29 | # XXX: make a recursive call from save_layout to all (interesting) sub-widgets |
31 | # XXX: make a recursive call from save_layout to all (interesting) sub-widgets |
30 | sub save_layout { |
32 | sub save_layout { |
… | |
… | |
253 | my ($self) = @_; |
255 | my ($self) = @_; |
254 | |
256 | |
255 | my $tbl = Gtk2::Table->new (2, 2); |
257 | my $tbl = Gtk2::Table->new (2, 2); |
256 | my $plcinfo = { width => 1, height => 3, next => [0, 0] }; |
258 | my $plcinfo = { width => 1, height => 3, next => [0, 0] }; |
257 | |
259 | |
258 | $self->{edit_collection}{pick} = GCE::EditAction::Pick->new; |
260 | $self->{edit_collection}{pick} = GCE::EditAction::Pick->new; |
259 | $self->{edit_collection}{place} = GCE::EditAction::Place->new; |
261 | $self->{edit_collection}{place} = GCE::EditAction::Place->new; |
260 | $self->{edit_collection}{erase} = GCE::EditAction::Erase->new; |
262 | $self->{edit_collection}{erase} = GCE::EditAction::Erase->new; |
261 | |
263 | |
|
|
264 | $self->update_edit_tool ($self->{edit_collection}{pick}, "Pick"); |
|
|
265 | |
262 | $self->add_button ($tbl, $plcinfo, "Pick", sub { |
266 | $self->add_button ($tbl, $plcinfo, "Pick", sub { |
263 | $self->{sel_editaction} = $self->{edit_collection}{pick}; |
267 | $self->update_edit_tool ($self->{edit_collection}{pick}, "Pick");; |
264 | $self->{edit_tool}->set_text ("Pick"); |
|
|
265 | }); |
268 | }); |
266 | $self->add_button ($tbl, $plcinfo, "Place", sub { |
269 | $self->add_button ($tbl, $plcinfo, "Place", sub { |
267 | $self->{sel_editaction} = $self->{edit_collection}{place}; |
270 | $self->update_edit_tool ($self->{edit_collection}{place}, "Place");; |
268 | $self->{edit_tool}->set_text ("Place"); |
|
|
269 | }); |
271 | }); |
270 | $self->add_button ($tbl, $plcinfo, "Erase", sub { |
272 | $self->add_button ($tbl, $plcinfo, "Erase", sub { |
271 | $self->{sel_editaction} = $self->{edit_collection}{erase}; |
273 | $self->update_edit_tool ($self->{edit_collection}{erase}, "Erase");; |
272 | $self->{edit_tool}->set_text ("Erase"); |
|
|
273 | }); |
274 | }); |
274 | |
275 | |
275 | return $tbl; |
276 | return $tbl; |
276 | } |
277 | } |
277 | |
278 | |
|
|
279 | sub update_edit_tool { |
|
|
280 | my ($self, $tool, $name) = @_; |
|
|
281 | |
|
|
282 | $self->{edit_tool}->set_text ($name); |
|
|
283 | $self->{sel_editaction} = $tool; |
|
|
284 | |
|
|
285 | my $widget = $tool->tool_widget; |
|
|
286 | |
|
|
287 | for ($self->{edit_tool_cont}->get_children) { |
|
|
288 | $_->hide; |
|
|
289 | $self->{edit_tool_cont}->remove ($_); |
|
|
290 | } |
|
|
291 | |
|
|
292 | defined $widget or return; |
|
|
293 | |
|
|
294 | $self->{edit_tool_cont}->add ($widget); |
|
|
295 | $widget->show_all; |
|
|
296 | } |
|
|
297 | |
|
|
298 | sub update_pick_view { |
|
|
299 | my ($self, $arch) = @_; |
|
|
300 | |
|
|
301 | defined $arch->{_face} |
|
|
302 | or $arch = $Crossfire::ARCH{$arch->{_name}}; |
|
|
303 | |
|
|
304 | $arch->{_face} |
|
|
305 | or warn "Arch $arch->{_name} has no face!"; |
|
|
306 | $arch->{_face} |
|
|
307 | or return; |
|
|
308 | |
|
|
309 | fill_pb_from_arch ($self->{pick_view_pb}, $arch); |
|
|
310 | $self->{pick_view_img}->set_from_pixbuf ($self->{pick_view_pb}); |
|
|
311 | |
|
|
312 | $self->{pick_view_lbl}->set_text ($arch->{_name}); |
|
|
313 | } |
|
|
314 | |
278 | |
315 | |
279 | sub INIT_INSTANCE { |
316 | sub INIT_INSTANCE { |
280 | my ($self) = @_; |
317 | my ($self) = @_; |
281 | |
318 | |
282 | $::MAINWIN = $self; |
319 | $::MAINWIN = $self; |
283 | |
320 | |
284 | $self->set_title ("gce - main window"); |
321 | $self->set_title ("gce - main window"); |
|
|
322 | |
|
|
323 | $self->{edit_tool} = Gtk2::Label->new; |
|
|
324 | $self->{edit_tool_cont} = Gtk2::VBox->new; |
285 | |
325 | |
286 | $self->add (my $vb = Gtk2::VBox->new); |
326 | $self->add (my $vb = Gtk2::VBox->new); |
287 | $vb->pack_start ($self->build_menu, 0, 1, 0); |
327 | $vb->pack_start ($self->build_menu, 0, 1, 0); |
|
|
328 | |
|
|
329 | $vb->pack_start (my $hb = $self->{pick_view_hb} = Gtk2::HBox->new, 0, 1, 0); |
|
|
330 | $hb->pack_start ($self->{pick_view_img} = Gtk2::Image->new, 0, 1, 0); |
|
|
331 | $hb->pack_start ($self->{pick_view_lbl} = Gtk2::Label->new, 0, 1, 0); |
|
|
332 | $self->{pick_view_pb} = new_arch_pb (); |
|
|
333 | |
|
|
334 | $vb->pack_start (Gtk2::HSeparator->new, 0, 1, 0); |
288 | $vb->pack_start (my $tbl = $self->build_buttons, 1, 1, 0); |
335 | $vb->pack_start (my $tbl = $self->build_buttons, 0, 1, 0); |
|
|
336 | |
|
|
337 | $vb->pack_start (Gtk2::HSeparator->new, 0, 1, 0); |
289 | $vb->pack_start ($self->{edit_tool} = Gtk2::Label->new, 0, 1, 0); |
338 | $vb->pack_start ($self->{edit_tool}, 0, 1, 0); |
290 | $vb->pack_start ($self->{pick_view} = Gtk2::Label->new, 0, 1, 0); |
339 | |
|
|
340 | $vb->pack_start (Gtk2::HSeparator->new, 0, 1, 0); |
|
|
341 | $vb->pack_start ($self->{edit_tool_cont}, 0, 1, 0); |
291 | |
342 | |
292 | # XXX:load $ARGV _cleanly_? |
343 | # XXX:load $ARGV _cleanly_? |
293 | $self->open_map_editor ($_) |
344 | $self->open_map_editor ($_) |
294 | for @ARGV; |
345 | for @ARGV; |
295 | |
346 | |
… | |
… | |
337 | |
388 | |
338 | sub set_pick { |
389 | sub set_pick { |
339 | my ($self, $arch) = @_; |
390 | my ($self, $arch) = @_; |
340 | |
391 | |
341 | $self->{pick_arch} = $arch; |
392 | $self->{pick_arch} = $arch; |
342 | $self->{pick_view}->set_text ($arch->{_name}); |
393 | $self->update_pick_view ($arch); |
343 | } |
394 | } |
344 | |
395 | |
345 | sub get_pick { |
396 | sub get_pick { |
346 | my ($self) = @_; |
397 | my ($self) = @_; |
347 | |
398 | |