… | |
… | |
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 | |
12 | |
13 | use Glib::Object::Subclass Gtk2::VBox; |
13 | use Glib::Object::Subclass Gtk2::Notebook; |
|
|
14 | |
|
|
15 | use GCE::AttrList; |
|
|
16 | |
|
|
17 | use Crossfire; |
14 | |
18 | |
15 | sub INIT_INSTANCE { |
19 | sub INIT_INSTANCE { |
16 | my ($self) = @_; |
20 | my ($self) = @_; |
17 | |
21 | |
18 | my $sl = $self->{sl} = Gtk2::SimpleList->new ('Attr' => 'text', 'Value' => 'text'); |
22 | my $al = $self->{al} = GCE::AttrList->new (editable => 1, raw => 0); |
|
|
23 | $self->append_page ($al, "obj attrs"); |
|
|
24 | $al->set_arch_cb (sub { $self->update_arch (@_) }); |
19 | |
25 | |
20 | $sl->set_column_editable (1, 1); |
26 | $al = $self->{raw_al} = GCE::AttrList->new (editable => 1); |
|
|
27 | $self->append_page ($al, "raw attrs"); |
|
|
28 | $al->set_arch_cb (sub { $self->update_arch (@_) }); |
21 | |
29 | |
22 | $self->pack_start ($sl, 1, 1, 0); |
30 | $al = $self->{al_arch} = GCE::AttrList->new (editable => 0); |
|
|
31 | $self->append_page ($al, "arch attrs"); |
|
|
32 | $al->set_arch_cb (sub { $self->update_arch (@_) }); |
|
|
33 | } |
|
|
34 | |
|
|
35 | sub update_arch { |
|
|
36 | my ($self, $arch, $key, $value) = @_; |
|
|
37 | |
|
|
38 | |
|
|
39 | if ($value ne '') { |
|
|
40 | |
|
|
41 | $arch->{$key} = $value; |
|
|
42 | |
|
|
43 | } else { |
|
|
44 | |
|
|
45 | delete $arch->{$key}; |
|
|
46 | |
|
|
47 | } |
|
|
48 | |
|
|
49 | $self->set_arch ($arch); |
23 | } |
50 | } |
24 | |
51 | |
25 | sub set_arch { |
52 | sub set_arch { |
26 | my ($self, $arch) = @_; |
53 | my ($self, $arch, $ro) = @_; |
27 | |
54 | |
28 | @{$self->{sl}->{data}} = |
55 | if ($ro) { |
29 | sort { $a->[0] cmp $b->[0] } |
56 | |
30 | map { my $c = $arch->{$_}; |
57 | $self->{al}->set (editable => 0); |
31 | if (ref $c eq 'ARRAY') { |
58 | $self->{raw_al}->set (editable => 0); |
32 | [$_, join (',', map { $_->{_name} } @$c)]; |
59 | |
33 | } else { |
60 | } else { |
34 | [$_, $c]; |
61 | |
35 | } |
62 | $self->{al}->set (editable => 1); |
36 | } keys %$arch; |
63 | $self->{raw_al}->set (editable => 1); |
|
|
64 | } |
|
|
65 | |
|
|
66 | $self->{al}->set_arch ($arch); |
|
|
67 | $self->{raw_al}->set_arch ($arch); |
|
|
68 | my $al_arch = $Crossfire::ARCH->{$arch->{_name}}; |
|
|
69 | |
|
|
70 | if ($al_arch) { |
|
|
71 | |
|
|
72 | $self->{al_arch}->set_arch ($al_arch); |
|
|
73 | |
|
|
74 | } else { |
|
|
75 | |
|
|
76 | $self->{al_arch}->set_arch ({ noarch => 'noarch' }); |
|
|
77 | } |
37 | } |
78 | } |
38 | |
79 | |
39 | |
80 | |
40 | =head1 AUTHOR |
81 | =head1 AUTHOR |
41 | |
82 | |