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.14 by elmex, Mon Mar 13 03:13:27 2006 UTC vs.
Revision 1.15 by elmex, Wed Mar 15 19:04:07 2006 UTC

7=cut 7=cut
8 8
9use Gtk2; 9use Gtk2;
10use Gtk2::Gdk::Keysyms; 10use Gtk2::Gdk::Keysyms;
11use Gtk2::SimpleList; 11use Gtk2::SimpleList;
12
13use GCE::InventoryEditor;
12 14
13use Glib::Object::Subclass Gtk2::VBox; 15use Glib::Object::Subclass Gtk2::VBox;
14 16
15use Crossfire; 17use Crossfire;
16 18
120 $buf->get_text ($buf->get_start_iter, $buf->get_end_iter, 0) 122 $buf->get_text ($buf->get_start_iter, $buf->get_end_iter, 0)
121 ); 123 );
122 }); 124 });
123 } 125 }
124 126
127 $self->{ntbook}->append_page (my $inv = GCE::InventoryEditor->new, 'inventory');
128 $inv->set_arch ($arch);
129
125 $self->{ttip}->enable; 130 $self->{ttip}->enable;
126 131
127 $self->show_all; 132 $self->show_all;
128 133
129 } else { 134 } else {
185 190
186 my $type = $edspec->{type}; 191 my $type = $edspec->{type};
187 my $al_arch = $Crossfire::ARCH{$arch->{_name}}; 192 my $al_arch = $Crossfire::ARCH{$arch->{_name}};
188 193
189 if ($type eq 'bool') { 194 if ($type eq 'bool') {
195 my $boolval = $edspec->{value} || [0, 1];
196
190 my $chk = new Gtk2::CheckButton ($edspec->{name} || $key); 197 my $chk = new Gtk2::CheckButton ($edspec->{name} || $key);
198
191 $self->{ttip}->set_tip ($chk, $al_arch->{$key} * 1); 199 $self->{ttip}->set_tip ($chk, $al_arch->{$key} * 1);
200
192 $chk->set_active ($arch->{$key} || $al_arch->{$key}); 201 $chk->set_active (($arch->{$key} || $al_arch->{$key}) == $boolval->[0]);
193 $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key}); 202 $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key});
194 $chk->signal_connect (clicked => sub { 203 $chk->signal_connect (clicked => sub {
195 my ($chk) = @_; 204 my ($chk) = @_;
196 $self->label_set_color_default ($lbl, $arch, $key, $chk->get_active * 1); 205 $self->label_set_color_default ($lbl, $arch, $key, $boolval->[$chk->get_active * 1]);
197 $self->update_arch ($arch, $key, $chk->get_active * 1); 206 $self->update_arch ($arch, $key, $boolval->[$chk->get_active * 1]);
198 print "SET $attr :" . $chk->get_active . "\n";
199 }); 207 });
200 return $chk 208 return $chk
201 209
202 } elsif (grep { $type eq $_ } qw/string int treasurelist float/) { 210 } elsif (grep { $type eq $_ } qw/string int treasurelist float/) {
203 my $entry = new Gtk2::Entry; 211 my $entry = new Gtk2::Entry;
240 } elsif ($type eq 'bitmask') { 248 } elsif ($type eq 'bitmask') {
241 my $lblb = Gtk2::Label->new ("bitmask: " . ($arch->{$key} || $al_arch->{$key}) * 1); 249 my $lblb = Gtk2::Label->new ("bitmask: " . ($arch->{$key} || $al_arch->{$key}) * 1);
242 my $btn = Gtk2::Button->new; 250 my $btn = Gtk2::Button->new;
243 $self->{ttip}->set_tip ($btn, $al_arch->{$key}); 251 $self->{ttip}->set_tip ($btn, $al_arch->{$key});
244 $btn->add ($lblb); 252 $btn->add ($lblb);
253 my $chval = $arch->{$key} || $al_arch->{$key};
245 my $menu = $self->create_bitmask_menu ($edspec->{value}, $lbl, $lblb, $arch, $key, $arch->{$key} || $al_arch->{$key}); 254 my $menu = $self->create_bitmask_menu ($edspec->{value}, $lbl, $lblb, $arch, $key, \$chval);
246 255
247 $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key}); 256 $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key});
248 257
249 $btn->signal_connect (button_press_event => sub { 258 $btn->signal_connect (button_press_event => sub {
250 my ($btn, $ev) = @_; 259 my ($btn, $ev) = @_;
317 326
318 return $menu; 327 return $menu;
319} 328}
320 329
321sub create_bitmask_menu { 330sub create_bitmask_menu {
322 my ($self, $bits, $clbl, $lbl, $arch, $key, $val) = @_; 331 my ($self, $bits, $clbl, $lbl, $arch, $key, $rval) = @_;
323 332
324 my $menu = Gtk2::Menu->new; 333 my $menu = Gtk2::Menu->new;
325 334
326 for my $bit (keys %$bits) { 335 for my $bit (keys %$bits) {
327 my $lbltxt = $bits->{$bit}; 336 my $lbltxt = $bits->{$bit};
328 my $menuitem = Gtk2::CheckMenuItem->new_with_label ($lbltxt); 337 my $menuitem = Gtk2::CheckMenuItem->new_with_label ($lbltxt);
329 print "VA: $val\n";
330 if ($val & (1 << $bit)) { 338 if ($$rval & (1 << $bit)) {
331 print "foo\n";
332 $menuitem->set_active (1);#$arch->{$key} & (1 << $bit)); 339 $menuitem->set_active (1);#$arch->{$key} & (1 << $bit));
333 } 340 }
334 $menuitem->signal_connect (toggled => sub { 341 $menuitem->signal_connect (toggled => sub {
335 my ($menuitem) = @_; 342 my ($menuitem) = @_;
336 my $newval = $arch->{$key}; 343 my $newval = $arch->{$key};
337 $newval ^= (1 << $bit); 344 $$rval &= ~(1 << $bit);
338 print "BIT $bit : $newval\n"; 345 $$rval |= (1 << $bit) if $menuitem->get_active;
339 $lbl->set_text ("bitmask: " . ($newval * 1)); 346 $lbl->set_text ("bitmask: " . ($$rval * 1));
340 $self->label_set_color_default ($clbl, $arch, $key, $newval); 347 $self->label_set_color_default ($clbl, $arch, $key, $$rval);
341 $self->update_arch ($arch, $key, $newval); 348 $self->update_arch ($arch, $key, $$rval);
342 }); 349 });
343 $menu->append ($menuitem); 350 $menu->append ($menuitem);
344 $menuitem->show; 351 $menuitem->show;
345 } 352 }
346 353

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines