… | |
… | |
100 | $self->hide; |
100 | $self->hide; |
101 | $self->{ntbook}->remove ($_) |
101 | $self->{ntbook}->remove ($_) |
102 | for $self->{ntbook}->get_children; |
102 | for $self->{ntbook}->get_children; |
103 | |
103 | |
104 | my $ar = Crossfire::arch_attr $al_arch; |
104 | my $ar = Crossfire::arch_attr $al_arch; |
105 | # warn "FO1:" . Data::Dumper::Dumper ($al_arch) . ">\n"; |
105 | warn "FO1:" . Data::Dumper::Dumper ($al_arch) . ">\n"; |
106 | # warn "FO2:" . Data::Dumper::Dumper ($ar) . ">\n"; |
106 | warn "FO2:" . Data::Dumper::Dumper ($ar) . ">\n"; |
107 | # warn "REAL: " . Data::Dumper::Dumper ($arch) . "\n"; |
107 | warn "REAL: " . Data::Dumper::Dumper ($arch) . "\n"; |
108 | |
108 | |
109 | $self->{ttip} = Gtk2::Tooltips->new; |
109 | $self->{ttip} = Gtk2::Tooltips->new; |
110 | |
110 | |
111 | $self->add_section_edit_widgets ($self->{ntbook}, 'general', $arch, $ar->{attr}); |
111 | #$self->add_section_edit_widgets ($self->{ntbook}, 'general', $arch, $ar->{attr}); |
112 | |
112 | |
113 | my %sects = map { @$_ } @{$ar->{section}}; |
113 | for my $sec (@{$ar->{section}}) { |
114 | |
|
|
115 | |
|
|
116 | for my $sec (keys %sects) { |
|
|
117 | my $cnt = scalar keys %{$sects{$sec}}; |
114 | # my $cnt = scalar keys %{$sects{$sec}}; |
|
|
115 | my $secname = shift @$sec; |
118 | $self->add_section_edit_widgets ($self->{ntbook}, $sec, $arch, $sects{$sec}); |
116 | $self->add_section_edit_widgets ($self->{ntbook}, $secname, $arch, $sec);#$sects{$sec}); |
119 | } |
117 | } |
120 | |
118 | |
121 | for my $key (qw/lore msg/) { |
119 | for my $key (qw/lore msg/) { |
122 | $self->{ntbook}->append_page (my $v = Gtk2::VBox->new, $key); |
120 | $self->{ntbook}->append_page (my $v = Gtk2::VBox->new, $key); |
123 | $v->pack_start (my $sw = Gtk2::ScrolledWindow->new, 1, 1, 0); |
121 | $v->pack_start (my $sw = Gtk2::ScrolledWindow->new, 1, 1, 0); |
… | |
… | |
144 | } |
142 | } |
145 | |
143 | |
146 | sub add_section_edit_widgets { |
144 | sub add_section_edit_widgets { |
147 | my ($self, $ntbook, $name, $arch, $section) = @_; |
145 | my ($self, $ntbook, $name, $arch, $section) = @_; |
148 | |
146 | |
149 | |
|
|
150 | $self->{ntbook}->append_page (my $vb = Gtk2::VBox->new, $name); |
147 | $self->{ntbook}->append_page (my $vb = Gtk2::VBox->new, $name); |
151 | $vb->pack_start (my $table = new Gtk2::Table (2, $cnt), 0, 1, 0); |
148 | $vb->pack_start (my $table = new Gtk2::Table (2, $cnt), 0, 1, 0); |
152 | |
149 | |
153 | my $i = 0; |
150 | my $i = 0; |
154 | for my $key (keys %{$section}) { |
151 | for my $sec (@$section) { |
155 | my $bwid; |
152 | my $bwid = Gtk2::EventBox->new; |
|
|
153 | my $key = $sec->[0]; |
|
|
154 | $sec = $sec->[1]; |
|
|
155 | $bwid->add (Gtk2::Label->new ($sec->{name} || $key)); |
156 | if ($section->{$key}->{desc} =~ m/^\s*$/s) { |
156 | if ($sec->{desc} !~ m/^\s*$/s) { |
157 | $bwid = Gtk2::Label->new ($section->{$key}->{name} || $key); |
|
|
158 | } else { |
|
|
159 | $bwid = Gtk2::Button->new_with_label ($section->{$key}->{name} || $key); |
|
|
160 | $self->{ttip}->set_tip ($bwid, $section->{$key}->{desc}); |
157 | $self->{ttip}->set_tip ($bwid, $sec->{desc}); |
161 | $bwid->signal_connect (clicked => sub { $self->description_popup ($section->{$key}->{desc}) }); |
|
|
162 | } |
|
|
163 | $table->attach_defaults ($bwid, 0, 1, $i, $i + 1); |
|
|
164 | $table->attach_defaults ( |
|
|
165 | $self->get_edit_widget ($key, $section->{$key}, $arch), |
|
|
166 | 1, 2, $i, $i + 1 |
|
|
167 | ); |
158 | } |
|
|
159 | my $al = Gtk2::Alignment->new (0.0, 0.5, 0, 0); |
|
|
160 | $al->add ($bwid); |
|
|
161 | $table->attach ($al, 0, 1, $i, $i + 1, ['shrink','fill'], 'fill', 5, 0); |
|
|
162 | |
|
|
163 | $al = Gtk2::Alignment->new (0.0, 0.5, 1, 0); |
|
|
164 | $al->add ($self->get_edit_widget ($key, $sec, $arch, $bwid)); |
|
|
165 | $table->attach ($al, 1, 2, $i, $i + 1, ['expand', 'fill'], 'expand', 0, 0); |
168 | $i++; |
166 | $i++; |
169 | } |
167 | } |
170 | } |
168 | } |
171 | |
169 | |
172 | sub description_popup { |
170 | sub label_set_color_default { |
173 | my ($self, $desc) = @_; |
171 | my ($self, $lbl, $arch, $key, $val) = @_; |
|
|
172 | my $al_arch = $Crossfire::ARCH{$arch->{_name}}; |
174 | |
173 | |
175 | my $w = Gtk2::Window->new ('toplevel'); |
174 | my $fgcolor = Gtk2::Gdk::Color->parse ("lightblue"); |
176 | $w->set_default_size (300, 200); |
175 | my $fgcolor2 = Gtk2::Gdk::Color->parse ("black");#grey"); |
177 | $w->add (my $v = Gtk2::VBox->new); |
176 | |
178 | $v->pack_start (my $sw = Gtk2::ScrolledWindow->new, 1, 1, 0); |
177 | if ($al_arch->{$key} eq $arch->{$key}) { |
179 | $sw->set_policy ('automatic', 'automatic'); |
178 | $lbl->modify_base (qw/normal/, $fgcolor); |
180 | $sw->add (my $txtv = Gtk2::TextView->new); |
179 | } else { |
181 | $txtv->set_wrap_mode ('word'); |
180 | $lbl->modify_base (qw/normal/, $fgcolor2); |
182 | $txtv->get_buffer->set_text ($desc); |
181 | } |
183 | $v->pack_start (my $b = Gtk2::Button->new_with_label ("close"), 0, 1, 0); |
|
|
184 | $b->signal_connect (clicked => sub { |
|
|
185 | $w->destroy; |
|
|
186 | $w = undef; |
|
|
187 | }); |
|
|
188 | $w->show_all; |
|
|
189 | } |
182 | } |
190 | |
183 | |
191 | sub get_edit_widget { |
184 | sub get_edit_widget { |
192 | my ($self, $key, $edspec, $arch) = @_; |
185 | my ($self, $key, $edspec, $arch, $lbl) = @_; |
193 | |
186 | |
194 | my $type = $edspec->{type}; |
187 | my $type = $edspec->{type}; |
195 | my $al_arch = $Crossfire::ARCH{$arch->{_name}}; |
188 | my $al_arch = $Crossfire::ARCH{$arch->{_name}}; |
196 | |
189 | |
197 | if ($type eq 'bool') { |
190 | if ($type eq 'bool') { |
198 | my $chk = new Gtk2::CheckButton ($edspec->{name} || $key); |
191 | my $chk = new Gtk2::CheckButton ($edspec->{name} || $key); |
199 | $chk->set_active ($arch->{$key} || $al_arch->{$key}); |
192 | $chk->set_active ($arch->{$key} || $al_arch->{$key}); |
|
|
193 | $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key}); |
200 | $chk->signal_connect (clicked => sub { |
194 | $chk->signal_connect (clicked => sub { |
201 | my ($chk) = @_; |
195 | my ($chk) = @_; |
202 | $self->update_arch ($arch, $key, $chk->get_active * 1); |
196 | $self->update_arch ($arch, $key, $chk->get_active * 1); |
|
|
197 | $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key}); |
203 | print "SET $attr :" . $chk->get_active . "\n"; |
198 | print "SET $attr :" . $chk->get_active . "\n"; |
204 | }); |
199 | }); |
205 | return $chk |
200 | return $chk |
206 | |
201 | |
207 | } elsif (grep { $type eq $_ } qw/string int treasurelist float/) { |
202 | } elsif (grep { $type eq $_ } qw/string int treasurelist float/) { |
208 | my $entry = new Gtk2::Entry; |
203 | my $entry = new Gtk2::Entry; |
209 | $entry->set_text ($arch->{$key} || $al_arch->{$key}); |
204 | $entry->set_text ($arch->{$key} || $al_arch->{$key}); |
|
|
205 | $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key}); |
210 | $entry->signal_connect (changed => sub { |
206 | $entry->signal_connect (changed => sub { |
211 | my ($entry) = @_; |
207 | my ($entry) = @_; |
212 | $self->update_arch ($arch, $key, $entry->get_text); |
208 | $self->update_arch ($arch, $key, $entry->get_text); |
|
|
209 | $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key}); |
213 | }); |
210 | }); |
214 | return $entry |
211 | return $entry |
215 | |
212 | |
216 | # } elsif ($type eq 'bitmask') { |
213 | # } elsif ($type eq 'bitmask') { |
217 | } elsif ($type eq 'spell' or $type eq 'nz_spell') { # XXX: nz_spell bug in datafiles? |
214 | } elsif ($type eq 'spell' or $type eq 'nz_spell') { # XXX: nz_spell bug in datafiles? |
… | |
… | |
228 | $spells_idx{$_} = $idx++; |
225 | $spells_idx{$_} = $idx++; |
229 | |
226 | |
230 | $comb->append_text ($sp->{$_}); |
227 | $comb->append_text ($sp->{$_}); |
231 | } |
228 | } |
232 | $comb->set_active ($spells_idx{$arch->{$key} || $al_arch->{$key}}); |
229 | $comb->set_active ($spells_idx{$arch->{$key} || $al_arch->{$key}}); |
|
|
230 | $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key}); |
233 | |
231 | |
234 | $comb->signal_connect (changed => sub { |
232 | $comb->signal_connect (changed => sub { |
235 | my ($comb) = @_; |
233 | my ($comb) = @_; |
236 | $self->update_arch ($arch, $key, $spells_cmd_idx{$comb->get_active}); |
234 | $self->update_arch ($arch, $key, $spells_cmd_idx{$comb->get_active}); |
|
|
235 | $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key}); |
237 | }); |
236 | }); |
238 | return $comb |
237 | return $comb |
239 | |
238 | |
240 | } elsif ($type eq 'fixed') { |
239 | } elsif ($type eq 'fixed') { |
241 | return Gtk2::Label->new ("$edspec->{name} = $edspec->{value}"); |
240 | return Gtk2::Label->new ("$edspec->{name} = $edspec->{value}"); |