ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/gde/GCE/MainWindow.pm
Revision: 1.14
Committed: Thu Feb 9 15:45:52 2006 UTC (18 years, 3 months ago) by elmex
Branch: MAIN
Changes since 1.13: +3 -2 lines
Log Message:
improved attribute editor

File Contents

# Content
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 use Gtk2::SimpleMenu;
12
13 use Crossfire;
14 use Crossfire::MapWidget;
15
16 use GCE::AttrEdit;
17 use GCE::MapEditor;
18
19 use GCE::AttrTypemap;
20
21 use Glib::Object::Subclass
22 Gtk2::Window;
23
24 use strict;
25
26 sub open_pick_window {
27 my ($self) = @_;
28
29 my $p = GCE::PickWindow->new (
30 set_sel_cb => sub {
31
32 $self->{mapedit}->update_pick ($_[0])
33 },
34 arch_edit_cb => sub {
35
36 $self->{mapedit}->update_attr_editor ($_[0], 1)
37 }
38 );
39 $p->init;
40 }
41
42 sub build_menu {
43 my ($self) = @_;
44
45 my $menu_tree = [
46 _File => {
47 item_type => '<Branch>',
48 children => [
49 _New => {
50 callback => sub { $self->new_cb },
51 accelerator => '<ctrl>N'
52 },
53 _Open => {
54 callback => sub { $self->open_cb },
55 accelerator => '<ctrl>O'
56 },
57 _Quit => {
58 callback => sub { Gtk2->main_quit },
59 accelerator => '<ctrl>Q'
60 }
61 ]
62 },
63 _Edit => {
64 item_type => '<Branch>',
65 children => [
66 _Fill => {
67 callback => sub { die "NO IMPL" },
68 accelerator => "<ctrl>F"
69 },
70 "Clear _Top" => {
71 callback => sub { die "NO IMPL" },
72 accelerator => "<ctrl>T"
73 },
74 "_Clear All" => {
75 callback => sub { die "NO IMPL" },
76 accelerator => "<ctrl>X"
77 },
78 "Open _Picker" => {
79 callback => sub { $self->open_pick_window },
80 accelerator => "<ctrl>P"
81 },
82 ]
83 }
84 ];
85
86 my $men =
87 Gtk2::SimpleMenu->new (
88 menu_tree => $menu_tree,
89 default_callback => \&default_cb,
90 );
91
92 $self->add_accel_group ($men->{accel_group});
93
94 return $men->{widget};
95 }
96
97
98
99 sub INIT_INSTANCE {
100 my ($self) = @_;
101
102 $self->set_title ("gce - main window");
103
104 $self->add (my $vb = Gtk2::VBox->new);
105 $vb->pack_start ($self->build_menu, 0, 1, 0);
106 $vb->pack_start (my $mapedit = $self->{mapedit} = new GCE::MapEditor, 1, 1, 0);
107
108 # XXX:load $ARGV _cleanly_?
109 $mapedit->open_map ($ARGV[0] || "$Crossfire::LIB/maps/dragonisland/advguild3");
110
111 $self->signal_connect ('delete-event' => sub {
112 Gtk2->main_quit;
113 });
114 }
115
116 sub new_cb {
117 my ($self) = @_;
118 die "NOT IMPLEMENTED YET";
119 }
120
121 sub open_cb {
122 my ($self) = @_;
123
124 my $fc =
125 Gtk2::FileChooserDialog->new (
126 'gce - open map', undef, 'open', 'gtk-cancel' => 'cancel', 'gtk-ok' => 'ok'
127 );
128
129 $fc->add_shortcut_folder ("$Crossfire::LIB/maps");
130 $fc->add_shortcut_folder ($_) for keys %{$self->{fc_last_folders}};
131 $fc->set_current_folder ($self->{fc_last_folder} || "$Crossfire::LIB/maps");
132
133 if ('ok' eq $fc->run) {
134
135 $self->{fc_last_folder} = $fc->get_current_folder;
136 $self->{fc_last_folders}->{$self->{fc_last_folder}}++;
137 $self->{mapedit}->open_map ($fc->get_filename);
138 }
139
140 $fc->destroy;
141 }
142
143 =head1 AUTHOR
144
145 Marc Lehmann <schmorp@schmorp.de>
146 http://home.schmorp.de/
147
148 Robin Redeker <elmex@ta-sa.org>
149 http://www.ta-sa.org/
150
151 =cut
152 1;
153