ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/gde/GCE/AttrEdit.pm
(Generate patch)

Comparing deliantra/gde/GCE/AttrEdit.pm (file contents):
Revision 1.13 by elmex, Mon Mar 13 00:58:53 2006 UTC vs.
Revision 1.14 by elmex, Mon Mar 13 03:13:27 2006 UTC

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
288sub 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
300sub 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
321sub 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/

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines