… | |
… | |
209 | $self->label_set_color_default ($lbl, $arch, $key, $entry->get_text); |
209 | $self->label_set_color_default ($lbl, $arch, $key, $entry->get_text); |
210 | $self->update_arch ($arch, $key, $entry->get_text); |
210 | $self->update_arch ($arch, $key, $entry->get_text); |
211 | }); |
211 | }); |
212 | return $entry |
212 | return $entry |
213 | |
213 | |
214 | # } elsif ($type eq 'bitmask') { |
|
|
215 | } 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? |
216 | my $comb = Gtk2::ComboBox->new_text; |
215 | my $comb = Gtk2::ComboBox->new_text; |
217 | my $spells_idx = {}; |
216 | my $spells_idx = {}; |
218 | my $spells_cmb_idx = {}; |
217 | my $spells_cmb_idx = {}; |
219 | my $sp = \%Crossfire::Data::SPELL; |
218 | my $sp = \%Crossfire::Data::SPELL; |
… | |
… | |
236 | $self->label_set_color_default ($lbl, $arch, $key, $spells_cmd_idx{$comb->get_active}); |
235 | $self->label_set_color_default ($lbl, $arch, $key, $spells_cmd_idx{$comb->get_active}); |
237 | $self->update_arch ($arch, $key, $spells_cmd_idx{$comb->get_active}); |
236 | $self->update_arch ($arch, $key, $spells_cmd_idx{$comb->get_active}); |
238 | }); |
237 | }); |
239 | return $comb |
238 | return $comb |
240 | |
239 | |
|
|
240 | } elsif ($type eq 'bitmask') { |
|
|
241 | my $lblb = Gtk2::Label->new ("bitmask: " . ($arch->{$key} || $al_arch->{$key}) * 1); |
|
|
242 | my $btn = Gtk2::Button->new; |
|
|
243 | $self->{ttip}->set_tip ($btn, $al_arch->{$key}); |
|
|
244 | $btn->add ($lblb); |
|
|
245 | my $menu = $self->create_bitmask_menu ($edspec->{value}, $lbl, $lblb, $arch, $key, $arch->{$key} || $al_arch->{$key}); |
|
|
246 | |
|
|
247 | $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key}); |
|
|
248 | |
|
|
249 | $btn->signal_connect (button_press_event => sub { |
|
|
250 | my ($btn, $ev) = @_; |
|
|
251 | $menu->popup (undef, undef, undef, undef, $ev->button, 0); |
|
|
252 | }); |
|
|
253 | return $btn; |
|
|
254 | |
|
|
255 | } elsif ($type eq 'list') { |
|
|
256 | my $lblb = Gtk2::Label->new ($edspec->{value}->{($arch->{$key} || $al_arch->{$key}) * 1}); |
|
|
257 | my $btn = Gtk2::Button->new; |
|
|
258 | $self->{ttip}->set_tip ($btn, $edspec->{value}->{$al_arch->{$key}}); |
|
|
259 | $btn->add ($lblb); |
|
|
260 | my $menu = $self->create_list_menu ($edspec->{value}, $lbl, $lblb, $arch, $key); |
|
|
261 | |
|
|
262 | $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key}); |
|
|
263 | |
|
|
264 | $btn->signal_connect (button_press_event => sub { |
|
|
265 | my ($btn, $ev) = @_; |
|
|
266 | $menu->popup (undef, undef, undef, undef, $ev->button, 0); |
|
|
267 | }); |
|
|
268 | return $btn; |
|
|
269 | |
241 | } elsif ($type eq 'fixed') { |
270 | } elsif ($type eq 'fixed') { |
242 | return Gtk2::Label->new ("$edspec->{name} = $edspec->{value}"); |
271 | return Gtk2::Label->new ("$edspec->{name} = $edspec->{value}"); |
243 | |
272 | |
244 | } elsif ($type eq 'text') { |
273 | } elsif ($type eq 'text') { |
245 | my $b = $arch->{$key}; |
274 | my $b = $arch->{$key}; |
… | |
… | |
254 | return Gtk2::Label->new ("$key => $edspec->{name} ($type)"); |
283 | return Gtk2::Label->new ("$key => $edspec->{name} ($type)"); |
255 | |
284 | |
256 | } |
285 | } |
257 | } |
286 | } |
258 | |
287 | |
|
|
288 | sub bitmask_to_list { |
|
|
289 | my ($self, $bitlist, $bits) = @_; |
|
|
290 | |
|
|
291 | my @l; |
|
|
292 | for (%$bitlist) { |
|
|
293 | if ($bits & (1 << $_)) { |
|
|
294 | push @l, $bitlist->{$_}; |
|
|
295 | } |
|
|
296 | } |
|
|
297 | return @l; |
|
|
298 | } |
|
|
299 | |
|
|
300 | sub create_list_menu { |
|
|
301 | my ($self, $list, $clbl, $lbl, $arch, $key) = @_; |
|
|
302 | |
|
|
303 | my $menu = Gtk2::Menu->new; |
|
|
304 | |
|
|
305 | for my $item (sort keys %$list) { |
|
|
306 | my $lbltxt = $list->{$item}; |
|
|
307 | my $menuitem = Gtk2::MenuItem->new_with_label ($lbltxt); |
|
|
308 | $menuitem->signal_connect (activate => sub { |
|
|
309 | my ($menuitem) = @_; |
|
|
310 | $lbl->set_text ($list->{$item}); |
|
|
311 | $self->label_set_color_default ($clbl, $arch, $key, $item); |
|
|
312 | $self->update_arch ($arch, $key, $item); |
|
|
313 | }); |
|
|
314 | $menu->append ($menuitem); |
|
|
315 | $menuitem->show; |
|
|
316 | } |
|
|
317 | |
|
|
318 | return $menu; |
|
|
319 | } |
|
|
320 | |
|
|
321 | sub create_bitmask_menu { |
|
|
322 | my ($self, $bits, $clbl, $lbl, $arch, $key, $val) = @_; |
|
|
323 | |
|
|
324 | my $menu = Gtk2::Menu->new; |
|
|
325 | |
|
|
326 | for my $bit (keys %$bits) { |
|
|
327 | my $lbltxt = $bits->{$bit}; |
|
|
328 | my $menuitem = Gtk2::CheckMenuItem->new_with_label ($lbltxt); |
|
|
329 | print "VA: $val\n"; |
|
|
330 | if ($val & (1 << $bit)) { |
|
|
331 | print "foo\n"; |
|
|
332 | $menuitem->set_active (1);#$arch->{$key} & (1 << $bit)); |
|
|
333 | } |
|
|
334 | $menuitem->signal_connect (toggled => sub { |
|
|
335 | my ($menuitem) = @_; |
|
|
336 | my $newval = $arch->{$key}; |
|
|
337 | $newval ^= (1 << $bit); |
|
|
338 | print "BIT $bit : $newval\n"; |
|
|
339 | $lbl->set_text ("bitmask: " . ($newval * 1)); |
|
|
340 | $self->label_set_color_default ($clbl, $arch, $key, $newval); |
|
|
341 | $self->update_arch ($arch, $key, $newval); |
|
|
342 | }); |
|
|
343 | $menu->append ($menuitem); |
|
|
344 | $menuitem->show; |
|
|
345 | } |
|
|
346 | |
|
|
347 | return $menu; |
|
|
348 | } |
|
|
349 | |
259 | |
350 | |
260 | =head1 AUTHOR |
351 | =head1 AUTHOR |
261 | |
352 | |
262 | Marc Lehmann <schmorp@schmorp.de> |
353 | Marc Lehmann <schmorp@schmorp.de> |
263 | http://home.schmorp.de/ |
354 | http://home.schmorp.de/ |