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.10 by elmex, Sun Mar 12 14:39:19 2006 UTC vs.
Revision 1.11 by elmex, Sun Mar 12 23:32:58 2006 UTC

100 $self->hide; 100 $self->hide;
101 $self->{ntbook}->remove ($_) 101 $self->{ntbook}->remove ($_)
102 for $self->{ntbook}->get_children; 102 for $self->{ntbook}->get_children;
103 103
104 my $ar = Crossfire::arch_attr $al_arch; 104 my $ar = Crossfire::arch_attr $al_arch;
105# warn "FO1:" . Data::Dumper::Dumper ($al_arch) . ">\n"; 105 warn "FO1:" . Data::Dumper::Dumper ($al_arch) . ">\n";
106# warn "FO2:" . Data::Dumper::Dumper ($ar) . ">\n"; 106 warn "FO2:" . Data::Dumper::Dumper ($ar) . ">\n";
107# warn "REAL: " . Data::Dumper::Dumper ($arch) . "\n"; 107 warn "REAL: " . Data::Dumper::Dumper ($arch) . "\n";
108 108
109 $self->{ttip} = Gtk2::Tooltips->new; 109 $self->{ttip} = Gtk2::Tooltips->new;
110 110
111 $self->add_section_edit_widgets ($self->{ntbook}, 'general', $arch, $ar->{attr}); 111 #$self->add_section_edit_widgets ($self->{ntbook}, 'general', $arch, $ar->{attr});
112 112
113 my %sects = map { @$_ } @{$ar->{section}}; 113 for my $sec (@{$ar->{section}}) {
114
115
116 for my $sec (keys %sects) {
117 my $cnt = scalar keys %{$sects{$sec}}; 114# my $cnt = scalar keys %{$sects{$sec}};
115 my $secname = shift @$sec;
118 $self->add_section_edit_widgets ($self->{ntbook}, $sec, $arch, $sects{$sec}); 116 $self->add_section_edit_widgets ($self->{ntbook}, $secname, $arch, $sec);#$sects{$sec});
119 } 117 }
120 118
121 for my $key (qw/lore msg/) { 119 for my $key (qw/lore msg/) {
122 $self->{ntbook}->append_page (my $v = Gtk2::VBox->new, $key); 120 $self->{ntbook}->append_page (my $v = Gtk2::VBox->new, $key);
123 $v->pack_start (my $sw = Gtk2::ScrolledWindow->new, 1, 1, 0); 121 $v->pack_start (my $sw = Gtk2::ScrolledWindow->new, 1, 1, 0);
144} 142}
145 143
146sub add_section_edit_widgets { 144sub add_section_edit_widgets {
147 my ($self, $ntbook, $name, $arch, $section) = @_; 145 my ($self, $ntbook, $name, $arch, $section) = @_;
148 146
149
150 $self->{ntbook}->append_page (my $vb = Gtk2::VBox->new, $name); 147 $self->{ntbook}->append_page (my $vb = Gtk2::VBox->new, $name);
151 $vb->pack_start (my $table = new Gtk2::Table (2, $cnt), 0, 1, 0); 148 $vb->pack_start (my $table = new Gtk2::Table (2, $cnt), 0, 1, 0);
152 149
153 my $i = 0; 150 my $i = 0;
154 for my $key (keys %{$section}) { 151 for my $sec (@$section) {
155 my $bwid; 152 my $bwid = Gtk2::EventBox->new;
153 my $key = $sec->[0];
154 $sec = $sec->[1];
155 $bwid->add (Gtk2::Label->new ($sec->{name} || $key));
156 if ($section->{$key}->{desc} =~ m/^\s*$/s) { 156 if ($sec->{desc} !~ m/^\s*$/s) {
157 $bwid = Gtk2::Label->new ($section->{$key}->{name} || $key);
158 } else {
159 $bwid = Gtk2::Button->new_with_label ($section->{$key}->{name} || $key);
160 $self->{ttip}->set_tip ($bwid, $section->{$key}->{desc}); 157 $self->{ttip}->set_tip ($bwid, $sec->{desc});
161 $bwid->signal_connect (clicked => sub { $self->description_popup ($section->{$key}->{desc}) });
162 }
163 $table->attach_defaults ($bwid, 0, 1, $i, $i + 1);
164 $table->attach_defaults (
165 $self->get_edit_widget ($key, $section->{$key}, $arch),
166 1, 2, $i, $i + 1
167 ); 158 }
159 my $al = Gtk2::Alignment->new (0.0, 0.5, 0, 0);
160 $al->add ($bwid);
161 $table->attach ($al, 0, 1, $i, $i + 1, ['shrink','fill'], 'fill', 5, 0);
162
163 $al = Gtk2::Alignment->new (0.0, 0.5, 1, 0);
164 $al->add ($self->get_edit_widget ($key, $sec, $arch, $bwid));
165 $table->attach ($al, 1, 2, $i, $i + 1, ['expand', 'fill'], 'expand', 0, 0);
168 $i++; 166 $i++;
169 } 167 }
170} 168}
171 169
172sub description_popup { 170sub label_set_color_default {
173 my ($self, $desc) = @_; 171 my ($self, $lbl, $arch, $key, $val) = @_;
172 my $al_arch = $Crossfire::ARCH{$arch->{_name}};
174 173
175 my $w = Gtk2::Window->new ('toplevel'); 174 my $fgcolor = Gtk2::Gdk::Color->parse ("lightblue");
176 $w->set_default_size (300, 200); 175 my $fgcolor2 = Gtk2::Gdk::Color->parse ("black");#grey");
177 $w->add (my $v = Gtk2::VBox->new); 176
178 $v->pack_start (my $sw = Gtk2::ScrolledWindow->new, 1, 1, 0); 177 if ($al_arch->{$key} eq $arch->{$key}) {
179 $sw->set_policy ('automatic', 'automatic'); 178 $lbl->modify_base (qw/normal/, $fgcolor);
180 $sw->add (my $txtv = Gtk2::TextView->new); 179 } else {
181 $txtv->set_wrap_mode ('word'); 180 $lbl->modify_base (qw/normal/, $fgcolor2);
182 $txtv->get_buffer->set_text ($desc); 181 }
183 $v->pack_start (my $b = Gtk2::Button->new_with_label ("close"), 0, 1, 0);
184 $b->signal_connect (clicked => sub {
185 $w->destroy;
186 $w = undef;
187 });
188 $w->show_all;
189} 182}
190 183
191sub get_edit_widget { 184sub get_edit_widget {
192 my ($self, $key, $edspec, $arch) = @_; 185 my ($self, $key, $edspec, $arch, $lbl) = @_;
193 186
194 my $type = $edspec->{type}; 187 my $type = $edspec->{type};
195 my $al_arch = $Crossfire::ARCH{$arch->{_name}}; 188 my $al_arch = $Crossfire::ARCH{$arch->{_name}};
196 189
197 if ($type eq 'bool') { 190 if ($type eq 'bool') {
198 my $chk = new Gtk2::CheckButton ($edspec->{name} || $key); 191 my $chk = new Gtk2::CheckButton ($edspec->{name} || $key);
199 $chk->set_active ($arch->{$key} || $al_arch->{$key}); 192 $chk->set_active ($arch->{$key} || $al_arch->{$key});
193 $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key});
200 $chk->signal_connect (clicked => sub { 194 $chk->signal_connect (clicked => sub {
201 my ($chk) = @_; 195 my ($chk) = @_;
202 $self->update_arch ($arch, $key, $chk->get_active * 1); 196 $self->update_arch ($arch, $key, $chk->get_active * 1);
197 $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key});
203 print "SET $attr :" . $chk->get_active . "\n"; 198 print "SET $attr :" . $chk->get_active . "\n";
204 }); 199 });
205 return $chk 200 return $chk
206 201
207 } elsif (grep { $type eq $_ } qw/string int treasurelist float/) { 202 } elsif (grep { $type eq $_ } qw/string int treasurelist float/) {
208 my $entry = new Gtk2::Entry; 203 my $entry = new Gtk2::Entry;
209 $entry->set_text ($arch->{$key} || $al_arch->{$key}); 204 $entry->set_text ($arch->{$key} || $al_arch->{$key});
205 $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key});
210 $entry->signal_connect (changed => sub { 206 $entry->signal_connect (changed => sub {
211 my ($entry) = @_; 207 my ($entry) = @_;
212 $self->update_arch ($arch, $key, $entry->get_text); 208 $self->update_arch ($arch, $key, $entry->get_text);
209 $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key});
213 }); 210 });
214 return $entry 211 return $entry
215 212
216# } elsif ($type eq 'bitmask') { 213# } elsif ($type eq 'bitmask') {
217 } elsif ($type eq 'spell' or $type eq 'nz_spell') { # XXX: nz_spell bug in datafiles? 214 } elsif ($type eq 'spell' or $type eq 'nz_spell') { # XXX: nz_spell bug in datafiles?
228 $spells_idx{$_} = $idx++; 225 $spells_idx{$_} = $idx++;
229 226
230 $comb->append_text ($sp->{$_}); 227 $comb->append_text ($sp->{$_});
231 } 228 }
232 $comb->set_active ($spells_idx{$arch->{$key} || $al_arch->{$key}}); 229 $comb->set_active ($spells_idx{$arch->{$key} || $al_arch->{$key}});
230 $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key} || $al_arch->{$key});
233 231
234 $comb->signal_connect (changed => sub { 232 $comb->signal_connect (changed => sub {
235 my ($comb) = @_; 233 my ($comb) = @_;
236 $self->update_arch ($arch, $key, $spells_cmd_idx{$comb->get_active}); 234 $self->update_arch ($arch, $key, $spells_cmd_idx{$comb->get_active});
235 $self->label_set_color_default ($lbl, $arch, $key, $arch->{$key});
237 }); 236 });
238 return $comb 237 return $comb
239 238
240 } elsif ($type eq 'fixed') { 239 } elsif ($type eq 'fixed') {
241 return Gtk2::Label->new ("$edspec->{name} = $edspec->{value}"); 240 return Gtk2::Label->new ("$edspec->{name} = $edspec->{value}");

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines