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.18 by elmex, Thu Mar 16 02:19:00 2006 UTC vs.
Revision 1.19 by elmex, Thu Mar 16 11:59:34 2006 UTC

8 8
9use Gtk2; 9use Gtk2;
10use Gtk2::Gdk::Keysyms; 10use Gtk2::Gdk::Keysyms;
11use Gtk2::SimpleList; 11use Gtk2::SimpleList;
12 12
13use GCE::Util;
13use GCE::InventoryEditor; 14use GCE::InventoryEditor;
14 15
15use Glib::Object::Subclass Gtk2::VBox; 16use Glib::Object::Subclass Gtk2::VBox;
16 17
17use Crossfire; 18use Crossfire;
32 if (ref $value) { 33 if (ref $value) {
33 $arch->{$key} = $value; 34 $arch->{$key} = $value;
34 35
35 } else { 36 } else {
36 if (not defined $al_arch->{$key}) { 37 if (not defined $al_arch->{$key}) {
37 if (not $value) { 38 if (not defined $value) {
38 # try to normalize 39 # try to normalize
39 delete $arch->{$key}; 40 delete $arch->{$key};
40 } else { 41 } else {
41 # try to normalize 42 # try to normalize
42 $arch->{$key} = $value; 43 $arch->{$key} = $value;
137 for my $sec (@$section) { 138 for my $sec (@$section) {
138 my $bwid = Gtk2::EventBox->new; 139 my $bwid = Gtk2::EventBox->new;
139 my $al = Gtk2::Alignment->new (0.0, 0.5, 0, 1); 140 my $al = Gtk2::Alignment->new (0.0, 0.5, 0, 1);
140 my $key = $sec->[0]; 141 my $key = $sec->[0];
141 $sec = $sec->[1]; 142 $sec = $sec->[1];
142 $al->add (Gtk2::Label->new ($sec->{name} || $key)); 143 $al->add (Gtk2::Label->new (def ($sec->{name}, $key)));
143 $bwid->add ($al); 144 $bwid->add ($al);
144 if ($sec->{desc} !~ m/^\s*$/s) { 145 if ($sec->{desc} !~ m/^\s*$/s) {
145 $self->{ttip}->set_tip ($bwid, $sec->{desc}); 146 $self->{ttip}->set_tip ($bwid, $sec->{desc});
146 } 147 }
147 $table->attach ($bwid, 0, 1, $i, $i + 1, ['shrink','fill'], 'fill', 5, 0); 148 $table->attach ($bwid, 0, 1, $i, $i + 1, ['shrink','fill'], 'fill', 5, 0);
159 160
160# my $fgcolor = $lbl->get_default_style-> Gtk2::Gdk::Color->parse ("lightblue"); 161# my $fgcolor = $lbl->get_default_style-> Gtk2::Gdk::Color->parse ("lightblue");
161# my $fgcolor2 = Gtk2::Gdk::Color->parse ("black");#grey"); 162# my $fgcolor2 = Gtk2::Gdk::Color->parse ("black");#grey");
162 163
163 if ( (defined $al_arch->{$key} and $al_arch->{$key} ne $val) 164 if ( (defined $al_arch->{$key} and $al_arch->{$key} ne $val)
164 or (not (defined $al_arch->{$key}) and $val)) 165 or (not (defined $al_arch->{$key}) and defined $val))
165 { 166 {
166 for (qw/normal active prelight selected insensitive/) { 167 for (qw/normal active prelight selected insensitive/) {
167 $lbl->modify_bg ($_, $lbl->get_default_style->bg ('active')); 168 $lbl->modify_bg ($_, $lbl->get_default_style->bg ('active'));
168 $lbl->modify_fg ($_, $lbl->get_default_style->fg ('active')); 169 $lbl->modify_fg ($_, $lbl->get_default_style->fg ('active'));
169 } 170 }
180 181
181 my $type = $edspec->{type}; 182 my $type = $edspec->{type};
182 my $al_arch = $Crossfire::ARCH{$arch->{_name}}; 183 my $al_arch = $Crossfire::ARCH{$arch->{_name}};
183 184
184 if ($type eq 'bool') { 185 if ($type eq 'bool') {
185 my $boolval = $edspec->{value} || [0, 1]; 186 my $boolval = def ($edspec->{value}, [0, 1]);
186 187
187 my $chk = new Gtk2::CheckButton ($edspec->{name} || $key); 188 my $chk = new Gtk2::CheckButton (def ($edspec->{name}, $key));
188 189
189 $self->{ttip}->set_tip ($chk, $al_arch->{$key} * 1); 190 $self->{ttip}->set_tip ($chk, $al_arch->{$key} * 1);
190 191
191 $chk->set_active (($arch->{$key} || $al_arch->{$key}) == $boolval->[1]); 192 $chk->set_active (def ($arch->{$key}, $al_arch->{$key}) == $boolval->[1]);
192 $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key}); 193 $self->label_set_color_default ($lbl, $arch, $key, def ($arch->{$key}, $al_arch->{$key}));
193 $chk->signal_connect (clicked => sub { 194 $chk->signal_connect (clicked => sub {
194 my ($chk) = @_; 195 my ($chk) = @_;
195 $self->label_set_color_default ($lbl, $arch, $key, $boolval->[$chk->get_active * 1]); 196 $self->label_set_color_default ($lbl, $arch, $key, $boolval->[$chk->get_active * 1]);
196 $self->update_arch ($arch, $key, $boolval->[$chk->get_active * 1]); 197 $self->update_arch ($arch, $key, $boolval->[$chk->get_active * 1]);
197 }); 198 });
198 return $chk 199 return $chk
199 200
200 } elsif (grep { $type eq $_ } qw/string int treasurelist float/) { 201 } elsif (grep { $type eq $_ } qw/string int treasurelist float/) {
201 my $entry = new Gtk2::Entry; 202 my $entry = new Gtk2::Entry;
202 $self->{ttip}->set_tip ($entry, $al_arch->{$key}); 203 $self->{ttip}->set_tip ($entry, $al_arch->{$key});
203 $entry->set_text ($arch->{$key} || $al_arch->{$key}); 204 $entry->set_text (def ($arch->{$key}, $al_arch->{$key}));
204 $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key}); 205 $self->label_set_color_default ($lbl, $arch, $key, def ($arch->{$key}, $al_arch->{$key}));
205 $entry->signal_connect (changed => sub { 206 $entry->signal_connect (changed => sub {
206 my ($entry) = @_; 207 my ($entry) = @_;
207 $self->label_set_color_default ($lbl, $arch, $key, $entry->get_text); 208 $self->label_set_color_default ($lbl, $arch, $key, $entry->get_text);
208 $self->update_arch ($arch, $key, $entry->get_text); 209 $self->update_arch ($arch, $key, $entry->get_text);
209 }); 210 });
223 $spells_idx{$_} = $idx++; 224 $spells_idx{$_} = $idx++;
224 225
225 $comb->append_text ($sp->{$_}); 226 $comb->append_text ($sp->{$_});
226 } 227 }
227 #XXX: FIXME: $self->{ttip}->set_tip ($comb, $sp->{$al_arch->{$key}}); 228 #XXX: FIXME: $self->{ttip}->set_tip ($comb, $sp->{$al_arch->{$key}});
228 $comb->set_active ($spells_idx{$arch->{$key} || $al_arch->{$key}}); 229 $comb->set_active ($spells_idx{def ($arch->{$key}, $al_arch->{$key})});
229 $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key}); 230 $self->label_set_color_default ($lbl, $arch, $key, def ($arch->{$key}, $al_arch->{$key}));
230 231
231 $comb->signal_connect (changed => sub { 232 $comb->signal_connect (changed => sub {
232 my ($comb) = @_; 233 my ($comb) = @_;
233 $self->label_set_color_default ($lbl, $arch, $key, $spells_cmd_idx{$comb->get_active}); 234 $self->label_set_color_default ($lbl, $arch, $key, $spells_cmd_idx{$comb->get_active});
234 $self->update_arch ($arch, $key, $spells_cmd_idx{$comb->get_active}); 235 $self->update_arch ($arch, $key, $spells_cmd_idx{$comb->get_active});
235 }); 236 });
236 return $comb 237 return $comb
237 238
238 } elsif ($type eq 'bitmask') { 239 } elsif ($type eq 'bitmask') {
239 my $lblb = Gtk2::Label->new ("bitmask: " . ($arch->{$key} || $al_arch->{$key}) * 1); 240 my $lblb = Gtk2::Label->new ("bitmask: " . (def ($arch->{$key}, $al_arch->{$key})) * 1);
240 my $btn = Gtk2::Button->new; 241 my $btn = Gtk2::Button->new;
241 $self->{ttip}->set_tip ($btn, $al_arch->{$key}); 242 $self->{ttip}->set_tip ($btn, $al_arch->{$key});
242 $btn->add ($lblb); 243 $btn->add ($lblb);
243 my $chval = $arch->{$key} || $al_arch->{$key}; 244 my $chval = def ($arch->{$key}, $al_arch->{$key});
244 my $menu = $self->create_bitmask_menu ($edspec->{value}, $lbl, $lblb, $arch, $key, \$chval); 245 my $menu = $self->create_bitmask_menu ($edspec->{value}, $lbl, $lblb, $arch, $key, \$chval);
245 246
246 $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key}); 247 $self->label_set_color_default ($lbl, $arch, $key, def ($arch->{$key}, $al_arch->{$key}));
247 248
248 $btn->signal_connect (button_press_event => sub { 249 $btn->signal_connect (button_press_event => sub {
249 my ($btn, $ev) = @_; 250 my ($btn, $ev) = @_;
250 $menu->popup (undef, undef, undef, undef, $ev->button, 0); 251 $menu->popup (undef, undef, undef, undef, $ev->button, 0);
251 }); 252 });
252 return $btn; 253 return $btn;
253 254
254 } elsif ($type eq 'list') { 255 } elsif ($type eq 'list') {
255 my $lblb = Gtk2::Label->new ($edspec->{value}->{($arch->{$key} || $al_arch->{$key}) * 1}); 256 my $lblb = Gtk2::Label->new ($edspec->{value}->{def($arch->{$key}, $al_arch->{$key}) * 1});
256 my $btn = Gtk2::Button->new; 257 my $btn = Gtk2::Button->new;
257 $self->{ttip}->set_tip ($btn, $edspec->{value}->{$al_arch->{$key}}); 258 $self->{ttip}->set_tip ($btn, $edspec->{value}->{$al_arch->{$key}});
258 $btn->add ($lblb); 259 $btn->add ($lblb);
259 my $menu = $self->create_list_menu ($edspec->{value}, $lbl, $lblb, $arch, $key); 260 my $menu = $self->create_list_menu ($edspec->{value}, $lbl, $lblb, $arch, $key);
260 261
261 $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key}); 262 $self->label_set_color_default ($lbl, $arch, $key, def ($arch->{$key}, $al_arch->{$key}));
262 263
263 $btn->signal_connect (button_press_event => sub { 264 $btn->signal_connect (button_press_event => sub {
264 my ($btn, $ev) = @_; 265 my ($btn, $ev) = @_;
265 $menu->popup (undef, undef, undef, undef, $ev->button, 0); 266 $menu->popup (undef, undef, undef, undef, $ev->button, 0);
266 }); 267 });

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines