… | |
… | |
7 | =cut |
7 | =cut |
8 | |
8 | |
9 | use Gtk2; |
9 | use Gtk2; |
10 | use Gtk2::Gdk::Keysyms; |
10 | use Gtk2::Gdk::Keysyms; |
11 | use Gtk2::SimpleList; |
11 | use Gtk2::SimpleList; |
|
|
12 | |
|
|
13 | use GCE::InventoryEditor; |
12 | |
14 | |
13 | use Glib::Object::Subclass Gtk2::VBox; |
15 | use Glib::Object::Subclass Gtk2::VBox; |
14 | |
16 | |
15 | use Crossfire; |
17 | use 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 | |
321 | sub create_bitmask_menu { |
330 | sub 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 | |