… | |
… | |
3 | =head1 NAME |
3 | =head1 NAME |
4 | |
4 | |
5 | GCE::AttrEdit - an edit wiget for attributes |
5 | GCE::AttrEdit - an edit wiget for attributes |
6 | |
6 | |
7 | =cut |
7 | =cut |
|
|
8 | |
|
|
9 | use Scalar::Util qw/weaken/; |
8 | |
10 | |
9 | use Gtk2; |
11 | use Gtk2; |
10 | use Gtk2::Gdk::Keysyms; |
12 | use Gtk2::Gdk::Keysyms; |
11 | use Gtk2::SimpleList; |
13 | use Gtk2::SimpleList; |
12 | |
14 | |
… | |
… | |
64 | my $ar = $self->{archref}; |
66 | my $ar = $self->{archref}; |
65 | return unless $ar; |
67 | return unless $ar; |
66 | unless ($self->{attach_editor}) { |
68 | unless ($self->{attach_editor}) { |
67 | my $w = GCE::AttachEditor->new; |
69 | my $w = GCE::AttachEditor->new; |
68 | $w->set_attachment ( |
70 | $w->set_attachment ( |
69 | $ar->get ('attach'), |
71 | $ar->attr ('attach'), |
70 | sub { |
72 | sub { |
71 | if (@{$_[0]}) { |
73 | if (@{$_[0]}) { |
72 | $ar->set (attach => $_[0]) |
74 | $ar->attr_set (attach => $_[0], undef, 'attr_edit') |
73 | } else { |
75 | } else { |
74 | $ar->set (attach => undef) |
76 | $ar->attr_set (attach => undef, undef, 'attr_edit') |
75 | } |
77 | } |
76 | } |
78 | } |
77 | ); |
79 | ); |
78 | $self->{attach_editor} = $w; |
80 | $self->{attach_editor} = $w; |
79 | $w->signal_connect (destroy => sub { delete $self->{attach_editor} }); |
81 | $w->signal_connect (destroy => sub { delete $self->{attach_editor} }); |
… | |
… | |
115 | $self->{use_lbl}->set_line_wrap (1); |
117 | $self->{use_lbl}->set_line_wrap (1); |
116 | |
118 | |
117 | $self->add2 (my $sw = Gtk2::ScrolledWindow->new); |
119 | $self->add2 (my $sw = Gtk2::ScrolledWindow->new); |
118 | $sw->set_policy ('automatic', 'automatic'); |
120 | $sw->set_policy ('automatic', 'automatic'); |
119 | $sw->add_with_viewport (my $inv = $self->{inv_edit} = GCE::InventoryEditor->new); |
121 | $sw->add_with_viewport (my $inv = $self->{inv_edit} = GCE::InventoryEditor->new); |
120 | |
|
|
121 | $::MAINWIN->reg_cb ( |
|
|
122 | cursor_updates => sub { |
|
|
123 | my ($mainwin, $cursors) = @_; |
|
|
124 | |
|
|
125 | if (grep { $_ == $self->{archref} } @$cursors) { |
|
|
126 | $self->set_from_map; |
|
|
127 | } |
|
|
128 | } |
|
|
129 | ); |
|
|
130 | } |
|
|
131 | |
|
|
132 | #sub spawn_editor { |
|
|
133 | # my ($arch, $cb) = @_; |
|
|
134 | # |
|
|
135 | # my $w = Gtk2::Window->new; |
|
|
136 | # $w->set_title ("gce - edit attrs"); |
|
|
137 | # $w->add (my $ae = GCE::AttrEdit->new); |
|
|
138 | # |
|
|
139 | # main::set_pos_and_size ($w, $main::CFG->{attr_view}, 200, 200); |
|
|
140 | # |
|
|
141 | # $ae->set_arch ($arch, $cb); |
|
|
142 | # $w->set_title ("gce - edit $arch->{_name}"); |
|
|
143 | # |
|
|
144 | # $w->show_all; |
|
|
145 | #} |
|
|
146 | |
|
|
147 | sub update_arch { |
|
|
148 | my ($self, $ar, $key, $value) = @_; |
|
|
149 | $ar->set ($key, $value); |
|
|
150 | } |
|
|
151 | |
|
|
152 | sub set_attr { |
|
|
153 | my ($self, $key, $value) = @_; |
|
|
154 | |
|
|
155 | my $attr = $self->{archref}->get ($key); |
|
|
156 | |
|
|
157 | unless (ref $attr) { |
|
|
158 | |
|
|
159 | $self->{archref}->set ($key, $value); |
|
|
160 | } |
|
|
161 | } |
122 | } |
162 | |
123 | |
163 | sub get_arch { |
124 | sub get_arch { |
164 | my ($self) = @_; |
125 | my ($self) = @_; |
165 | |
|
|
166 | $self->{archref} |
126 | $self->{arch} |
167 | } |
127 | } |
168 | |
128 | |
169 | #sub update { |
129 | sub update_attrs { |
170 | # my ($self, $narch) = @_; |
130 | my ($self) = @_; |
171 | # |
|
|
172 | # if (ref ($narch) ne 'GCE::ArchRef') { require Carp; Carp::confess ("NO ARCH REF!") } |
|
|
173 | # |
|
|
174 | # if ($narch) { |
|
|
175 | # $self->set_arch ($narch); |
|
|
176 | # } else { |
|
|
177 | # $self->set_arch ($self->{archref}); |
|
|
178 | # } |
|
|
179 | #} |
|
|
180 | |
131 | |
181 | sub set_from_map { |
|
|
182 | #my ($self, $ar, $clear_inv) = @_; |
|
|
183 | my ($self, $map, $x, $y, $z) = @_; |
|
|
184 | |
|
|
185 | unless (defined $map) { |
|
|
186 | ($map, $x, $y, $z) = ( |
|
|
187 | $self->{archref}->{map}, |
|
|
188 | $self->{archref}->{x}, |
|
|
189 | $self->{archref}->{y}, |
|
|
190 | $self->{archref}->{z} |
|
|
191 | ); |
|
|
192 | } |
|
|
193 | |
|
|
194 | my $ar = |
|
|
195 | $self->{archref} = |
|
|
196 | $::MAINWIN->cursor ($map, attr_edit => $x, $y, $z); |
|
|
197 | |
|
|
198 | unless (defined $ar) { |
|
|
199 | $ar = $self->{archref} = |
132 | my $ar = $self->{arch}; |
200 | GCE::ArchRef->new (arch => { _name => 'empty_archetype' }); |
133 | |
201 | } |
134 | $self->{attach_editor}->destroy |
|
|
135 | if $self->{attach_editor}; |
202 | |
136 | |
203 | # XXX: port to new scheme |
137 | # XXX: port to new scheme |
204 | $self->{attach_editor}->destroy if $self->{attach_editor}; |
|
|
205 | |
|
|
206 | #$self->{inv_edit}->clear_inv_hist if $clear_inv; |
138 | #$self->{inv_edit}->clear_inv_hist if $clear_inv; |
207 | #$self->{inv_edit}->set_arch ($ar); |
139 | #$self->{inv_edit}->set_arch ($ar); |
208 | |
140 | |
209 | $self->{arch_name_lbl}->set_text ($ar->longname); |
141 | $self->{arch_name_lbl}->set_text ($ar->longname); |
|
|
142 | warn "LONGNAME: " . $ar->longname . "\n"; |
210 | |
143 | |
211 | fill_pb_from_arch ($self->{arch_pb}, $ar->getarch); |
144 | fill_pb_from_arch ($self->{arch_pb}, $ar->get); |
212 | $self->{arch_img}->set_from_pixbuf ($self->{arch_pb}); |
145 | $self->{arch_img}->set_from_pixbuf ($self->{arch_pb}); |
213 | $self->label_set_color ($self->{arch_name_lbl}, 0); |
146 | $self->label_set_color ($self->{arch_name_lbl}, 0); |
214 | |
147 | |
215 | $self->{arch_stat_btn}->set_label ($ar->{source}); |
148 | $self->{arch_stat_btn}->set_label ($ar->{source}); |
216 | |
149 | |
… | |
… | |
241 | $self->{ntbook}->append_page (my $v = Gtk2::VBox->new, $key); |
174 | $self->{ntbook}->append_page (my $v = Gtk2::VBox->new, $key); |
242 | $v->pack_start (my $sw = Gtk2::ScrolledWindow->new, 1, 1, 0); |
175 | $v->pack_start (my $sw = Gtk2::ScrolledWindow->new, 1, 1, 0); |
243 | $sw->set_policy ('automatic', 'automatic'); |
176 | $sw->set_policy ('automatic', 'automatic'); |
244 | $sw->add (my $tb = $self->{"${key}_txt"} = Gtk2::TextView->new); |
177 | $sw->add (my $tb = $self->{"${key}_txt"} = Gtk2::TextView->new); |
245 | my $buf = $tb->get_buffer; |
178 | my $buf = $tb->get_buffer; |
|
|
179 | |
246 | $buf->set_text ($ar->get ($key)); |
180 | $buf->set_text ($ar->attr ($key)); |
|
|
181 | |
247 | $buf->signal_connect (changed => sub { |
182 | $buf->signal_connect (changed => sub { |
248 | my ($buf) = @_; |
183 | my ($buf) = @_; |
|
|
184 | |
|
|
185 | my $txt = |
|
|
186 | $buf->get_text ( |
249 | my $txt = $buf->get_text ($buf->get_start_iter, $buf->get_end_iter, 0); |
187 | $buf->get_start_iter, $buf->get_end_iter, 0); |
|
|
188 | |
250 | if ($txt ne $ar->get ($key)) { |
189 | if ($txt ne $ar->attr ($key)) { |
251 | $ar->set ($key, $txt); |
190 | $ar->attr_set ($key, $txt, 'attr_edit'); |
252 | } |
191 | } |
|
|
192 | |
253 | 1 |
193 | 1 |
254 | }); |
194 | }); |
255 | } |
195 | } |
256 | |
196 | |
257 | my $desc = pseudohtml2txt $type->{desc}; |
197 | my $desc = pseudohtml2txt $type->{desc}; |
… | |
… | |
274 | $self->{ntbook}->set_current_page ($i); |
214 | $self->{ntbook}->set_current_page ($i); |
275 | last; |
215 | last; |
276 | } |
216 | } |
277 | } |
217 | } |
278 | } |
218 | } |
|
|
219 | } |
|
|
220 | |
|
|
221 | sub update_view { |
|
|
222 | my ($self, $ar) = @_; |
|
|
223 | |
|
|
224 | unless (defined $ar) { |
|
|
225 | delete $self->{arch_cb_reg}; |
|
|
226 | $ar = $self->{arch}; |
|
|
227 | } |
|
|
228 | |
|
|
229 | unless (defined $ar) { # fallback in case the arch was deleted! |
|
|
230 | delete $self->{arch_cb_reg}; |
|
|
231 | my $sr = GCE::StackRef->new (owner => 'attr_edit'); |
|
|
232 | $ar = $sr->cursor (0); |
|
|
233 | } |
|
|
234 | |
|
|
235 | $self->{arch} = $ar; |
|
|
236 | |
|
|
237 | unless (defined $self->{arch_cb_reg}) { |
|
|
238 | $self->{arch_cb_reg} = $ar->reg_cb (changed => sub { |
|
|
239 | my ($ar, $change, $invalid) = @_; |
|
|
240 | |
|
|
241 | if ($invalid) { |
|
|
242 | delete $self->{arch}; |
|
|
243 | $self->update_view; |
|
|
244 | |
|
|
245 | } elsif ($change =~ /attr_edit!attribute_edit/) { |
|
|
246 | # nop, skip update_view, WE changed! |
|
|
247 | |
|
|
248 | } else { |
|
|
249 | $self->update_view; |
|
|
250 | } |
|
|
251 | }); |
|
|
252 | } |
|
|
253 | |
|
|
254 | $self->update_attrs; |
279 | |
255 | |
280 | $ar |
256 | $ar |
281 | } |
257 | } |
282 | |
258 | |
283 | sub add_section_edit_widgets { |
259 | sub add_section_edit_widgets { |
… | |
… | |
346 | my $al_arch = $ar->archetype; |
322 | my $al_arch = $ar->archetype; |
347 | |
323 | |
348 | if ($type eq 'bool') { |
324 | if ($type eq 'bool') { |
349 | my $boolval = def ($edspec->{value}, [0, 1]); |
325 | my $boolval = def ($edspec->{value}, [0, 1]); |
350 | |
326 | |
351 | |
|
|
352 | $self->label_set_color_default ($lbl, $ar, $key, $ar->get_or_default ($key)); |
327 | $self->label_set_color_default ($lbl, $ar, $key, $ar->attr_or_arch ($key)); |
353 | |
328 | |
354 | my $chk = new Gtk2::CheckButton (def ($edspec->{name}, $key)); |
329 | my $chk = new Gtk2::CheckButton (def ($edspec->{name}, $key)); |
355 | $chk->set_active ($ar->get_or_default ($key) == $boolval->[1]); |
330 | $chk->set_active ($ar->attr_or_arch ($key) == $boolval->[1]); |
356 | $chk->signal_connect (clicked => sub { |
331 | $chk->signal_connect (clicked => sub { |
357 | my ($chk) = @_; |
332 | my ($chk) = @_; |
358 | |
333 | |
359 | $ar->set ($key, $boolval->[$chk->get_active * 1], $type); |
334 | $ar->attr_set ($key, $boolval->[$chk->get_active * 1], $type, 'attr_edit'); |
360 | |
335 | |
361 | $self->label_set_color_default ($lbl, $ar, $key, $boolval->[$chk->get_active * 1]); |
336 | $self->label_set_color_default ($lbl, $ar, $key, $boolval->[$chk->get_active * 1]); |
362 | }); |
337 | }); |
363 | |
338 | |
364 | $self->{ttip}->set_tip ($chk, $al_arch->{$key} * 1); |
339 | $self->{ttip}->set_tip ($chk, $al_arch->{$key} * 1); |
365 | |
340 | |
366 | return $chk |
341 | return $chk |
367 | |
342 | |
368 | } elsif (grep { $type eq $_ } qw/string int treasurelist float/) { |
343 | } elsif (grep { $type eq $_ } qw/string int treasurelist float/) { |
369 | $self->label_set_color_default ($lbl, $ar, $key, $ar->get_or_default ($key)); |
344 | $self->label_set_color_default ($lbl, $ar, $key, $ar->attr_or_arch ($key)); |
370 | |
345 | |
371 | my $entry = new Gtk2::Entry; |
346 | my $entry = new Gtk2::Entry; |
372 | $entry->set_text ($ar->get_or_default ($key)); |
347 | $entry->set_text ($ar->attr_or_arch ($key)); |
373 | $entry->signal_connect (changed => sub { |
348 | $entry->signal_connect (changed => sub { |
374 | my ($entry) = @_; |
349 | my ($entry) = @_; |
375 | $self->label_set_color_default ($lbl, $ar, $key, $entry->get_text); |
350 | $self->label_set_color_default ($lbl, $ar, $key, $entry->get_text); |
376 | $ar->set ($key, $entry->get_text); |
351 | $ar->attr_set ($key, $entry->get_text, $type, 'attr_edit'); |
377 | 1 |
352 | 1 |
378 | }); |
353 | }); |
379 | |
354 | |
380 | $self->{ttip}->set_tip ($entry, $ar->archetype->{$key}); |
355 | $self->{ttip}->set_tip ($entry, $ar->archetype->{$key}); |
381 | |
356 | |
… | |
… | |
396 | |
371 | |
397 | $comb->append_text ($sp->{$_}); |
372 | $comb->append_text ($sp->{$_}); |
398 | } |
373 | } |
399 | #XXX: FIXME: $self->{ttip}->set_tip ($comb, $sp->{$al_arch->{$key}}); |
374 | #XXX: FIXME: $self->{ttip}->set_tip ($comb, $sp->{$al_arch->{$key}}); |
400 | |
375 | |
401 | $comb->set_active ($spells_idx->{$ar->get_or_default ($key)}); |
376 | $comb->set_active ($spells_idx->{$ar->attr_or_arch ($key)}); |
402 | $self->label_set_color_default ($lbl, $ar, $key, $ar->get_or_default ($key)); |
377 | $self->label_set_color_default ($lbl, $ar, $key, $ar->attr_or_arch ($key)); |
403 | |
378 | |
404 | $comb->signal_connect (changed => sub { |
379 | $comb->signal_connect (changed => sub { |
405 | my ($comb) = @_; |
380 | my ($comb) = @_; |
406 | $self->label_set_color_default ($lbl, $ar, $key, $spells_cmd_idx->{$comb->get_active}); |
381 | $self->label_set_color_default ($lbl, $ar, $key, $spells_cmd_idx->{$comb->get_active}); |
407 | $ar->set ($key, $spells_cmd_idx->{$comb->get_active}); |
382 | $ar->attr_set ($key, $spells_cmd_idx->{$comb->get_active}, $type, 'attr_edit'); |
408 | }); |
383 | }); |
409 | return $comb |
384 | return $comb |
410 | |
385 | |
411 | } elsif ($type eq 'bitmask') { |
386 | } elsif ($type eq 'bitmask') { |
412 | my $chval = $ar->get_or_default ($key); |
387 | my $chval = $ar->attr_or_arch ($key); |
413 | my $btn = Gtk2::Button->new; |
388 | my $btn = Gtk2::Button->new; |
414 | $btn->add (my $lblb = Gtk2::Label->new ("bitmask: " . ($chval * 1))); |
389 | $btn->add (my $lblb = Gtk2::Label->new ("bitmask: " . ($chval * 1))); |
415 | $self->{ttip}->set_tip ($btn, $al_arch->{$key}); |
390 | $self->{ttip}->set_tip ($btn, $al_arch->{$key}); |
416 | |
391 | |
417 | my $menu = $self->create_bitmask_menu ($edspec->{value}, $lbl, $lblb, $ar, $key, \$chval); |
392 | my $menu = $self->create_bitmask_menu ($edspec->{value}, $lbl, $lblb, $ar, $key, \$chval); |
… | |
… | |
424 | }); |
399 | }); |
425 | |
400 | |
426 | return $btn; |
401 | return $btn; |
427 | |
402 | |
428 | } elsif ($type eq 'list') { |
403 | } elsif ($type eq 'list') { |
429 | my $lblb = Gtk2::Label->new ($edspec->{value}->{$ar->get_or_default ($key) * 1}); |
404 | my $lblb = Gtk2::Label->new ($edspec->{value}->{$ar->attr_or_arch ($key) * 1}); |
430 | my $btn = Gtk2::Button->new; |
405 | my $btn = Gtk2::Button->new; |
431 | $self->{ttip}->set_tip ($btn, $edspec->{value}->{$al_arch->{$key}}); |
406 | $self->{ttip}->set_tip ($btn, $edspec->{value}->{$al_arch->{$key}}); |
432 | $btn->add ($lblb); |
407 | $btn->add ($lblb); |
433 | my $menu = $self->create_list_menu ($edspec->{value}, $lbl, $lblb, $ar, $key); |
408 | my $menu = $self->create_list_menu ($edspec->{value}, $lbl, $lblb, $ar, $key); |
434 | |
409 | |
435 | $self->label_set_color_default ($lbl, $ar, $key, $ar->get_or_default ($key)); |
410 | $self->label_set_color_default ($lbl, $ar, $key, $ar->attr_or_arch ($key)); |
436 | |
411 | |
437 | $btn->signal_connect (button_press_event => sub { |
412 | $btn->signal_connect (button_press_event => sub { |
438 | my ($btn, $ev) = @_; |
413 | my ($btn, $ev) = @_; |
439 | $menu->popup (undef, undef, undef, undef, $ev->button, 0); |
414 | $menu->popup (undef, undef, undef, undef, $ev->button, 0); |
440 | }); |
415 | }); |
… | |
… | |
462 | my $calc_lbl = sub { # update callback for the buttons |
437 | my $calc_lbl = sub { # update callback for the buttons |
463 | for (@lblbtns) { |
438 | for (@lblbtns) { |
464 | my $btn = $_->[0]; |
439 | my $btn = $_->[0]; |
465 | my $lbl = $_->[1]; |
440 | my $lbl = $_->[1]; |
466 | |
441 | |
467 | if (defined $ar->get ($key)) { |
442 | if (defined $ar->attr ($key)) { |
468 | my $res = $ar->get ($key) >= $lbl; |
443 | my $res = $ar->attr ($key) >= $lbl; |
469 | |
444 | |
470 | if (defined $res) { |
445 | if (defined $res) { |
471 | $self->label_set_color ($btn, 0); |
446 | $self->label_set_color ($btn, 0); |
472 | $lbl = ($res ? "+" : "-") . $lbl; |
447 | $lbl = ($res ? "+" : "-") . $lbl; |
473 | |
448 | |
… | |
… | |
482 | |
457 | |
483 | $btn->set_label ($lbl); |
458 | $btn->set_label ($lbl); |
484 | } |
459 | } |
485 | }; |
460 | }; |
486 | |
461 | |
487 | $self->label_set_color_default ($lbl, $ar, $key, $ar->get_or_default ($key)); |
462 | $self->label_set_color_default ($lbl, $ar, $key, $ar->attr_or_arch ($key)); |
488 | |
463 | |
489 | my $mid = (scalar @Deliantra::MOVE_TYPE) / 2; |
464 | my $mid = (scalar @Deliantra::MOVE_TYPE) / 2; |
490 | my $cnt = 0; |
465 | my $cnt = 0; |
491 | my $box = $btns1; |
466 | my $box = $btns1; |
492 | |
467 | |
… | |
… | |
494 | $box->pack_start (my $btn = Gtk2::Button->new ($calc_lbl->()), 0, 1, 0); |
469 | $box->pack_start (my $btn = Gtk2::Button->new ($calc_lbl->()), 0, 1, 0); |
495 | push @lblbtns, [$btn, $mty]; |
470 | push @lblbtns, [$btn, $mty]; |
496 | |
471 | |
497 | $self->{ttip}->set_tip ($btn, $ar->archetype->{$key}); |
472 | $self->{ttip}->set_tip ($btn, $ar->archetype->{$key}); |
498 | $btn->signal_connect (clicked => sub { |
473 | $btn->signal_connect (clicked => sub { |
499 | my $v = $ar->get ($key) || Deliantra::MoveType->new; |
474 | my $v = $ar->attr ($key) || Deliantra::MoveType->new; |
500 | |
475 | |
501 | $v x= $mty; |
476 | $v x= $mty; |
502 | $v = $v eq '' ? undef : $v; |
477 | $v = $v eq '' ? undef : $v; |
503 | $ar->set ($key, $v); |
478 | $ar->attr_set ($key, $v, $type, 'attr_edit'); |
504 | |
479 | |
505 | $self->label_set_color_default ($lbl, $ar, $key, $v); |
480 | $self->label_set_color_default ($lbl, $ar, $key, $v); |
506 | $calc_lbl->(); |
481 | $calc_lbl->(); |
507 | }); |
482 | }); |
508 | |
483 | |
… | |
… | |
540 | my $menuitem = Gtk2::MenuItem->new_with_label ($lbltxt); |
515 | my $menuitem = Gtk2::MenuItem->new_with_label ($lbltxt); |
541 | $menuitem->signal_connect (activate => sub { |
516 | $menuitem->signal_connect (activate => sub { |
542 | my ($menuitem) = @_; |
517 | my ($menuitem) = @_; |
543 | $lbl->set_text ($list->{$item}); |
518 | $lbl->set_text ($list->{$item}); |
544 | $self->label_set_color_default ($clbl, $ar, $key, $item); |
519 | $self->label_set_color_default ($clbl, $ar, $key, $item); |
545 | $ar->set ($key, $item); |
520 | $ar->attr_set ($key, $item, undef, 'attr_edit'); |
546 | }); |
521 | }); |
547 | $menu->append ($menuitem); |
522 | $menu->append ($menuitem); |
548 | $menuitem->show; |
523 | $menuitem->show; |
549 | } |
524 | } |
550 | |
525 | |
… | |
… | |
562 | if ($$rval & (1 << $bit)) { |
537 | if ($$rval & (1 << $bit)) { |
563 | $menuitem->set_active (1);#$arch->{$key} & (1 << $bit)); |
538 | $menuitem->set_active (1);#$arch->{$key} & (1 << $bit)); |
564 | } |
539 | } |
565 | $menuitem->signal_connect (toggled => sub { |
540 | $menuitem->signal_connect (toggled => sub { |
566 | my ($menuitem) = @_; |
541 | my ($menuitem) = @_; |
567 | my $newval = $ar->get ($key); |
542 | my $newval = $ar->attr ($key); |
568 | $$rval &= ~(1 << $bit); |
543 | $$rval &= ~(1 << $bit); |
569 | $$rval |= (1 << $bit) if $menuitem->get_active; |
544 | $$rval |= (1 << $bit) if $menuitem->get_active; |
570 | $lbl->set_text ("bitmask: " . ($$rval * 1)); |
545 | $lbl->set_text ("bitmask: " . ($$rval * 1)); |
571 | $self->label_set_color_default ($clbl, $ar, $key, $$rval); |
546 | $self->label_set_color_default ($clbl, $ar, $key, $$rval); |
572 | $ar->set ($key, $$rval); |
547 | $ar->attr_set ($key, $$rval, undef, 'attr_edit'); |
573 | }); |
548 | }); |
574 | $menu->append ($menuitem); |
549 | $menu->append ($menuitem); |
575 | $menuitem->show; |
550 | $menuitem->show; |
576 | } |
551 | } |
577 | |
552 | |