… | |
… | |
142 | |
142 | |
143 | $vbox->add ($self->{name} = new Gtk2::Label $self->{name}); |
143 | $vbox->add ($self->{name} = new Gtk2::Label $self->{name}); |
144 | $vbox->add ($self->{info} = new Gtk2::Label ""); |
144 | $vbox->add ($self->{info} = new Gtk2::Label ""); |
145 | $vbox->add (($self->{clock} = new game::goclock)->widget); |
145 | $vbox->add (($self->{clock} = new game::goclock)->widget); |
146 | |
146 | |
|
|
147 | $vbox->add ($self->{imagebox} = new Gtk2::VBox); |
|
|
148 | |
147 | $self; |
149 | $self; |
148 | } |
150 | } |
149 | |
151 | |
150 | sub set_rules { |
152 | sub set_rules { |
151 | my ($self, $rules) = @_; |
153 | my ($self, $rules) = @_; |
152 | |
154 | |
153 | if ($self->{name}->get_text ne $rules->{player}[$self->{colour}]) { |
155 | if ($self->{name}->get_text ne $rules->{player}[$self->{colour}]) { |
154 | $self->{name}->set_text ($rules->{player}[$self->{colour}]); |
156 | $self->{name}->set_text ($rules->{player}[$self->{colour}]); |
155 | |
157 | |
|
|
158 | $self->{imagebox}->remove ($_) for $self->{imagebox}->get_children; |
|
|
159 | $self->{imagebox}->add (gtk::image_from_data undef); |
|
|
160 | |
156 | # the big picture... |
161 | # the big picture... |
157 | appwin::userpic ($rules->{player}[$self->{colour}], sub { |
162 | appwin::userpic ($rules->{player}[$self->{colour}], sub { |
|
|
163 | if ($_[0]) { |
|
|
164 | $self->{imagebox}->remove ($_) for $self->{imagebox}->get_children; |
158 | $self->{widget}->add (gtk::image_from_data $_[0]) if $_[0]; |
165 | $self->{imagebox}->add (gtk::image_from_data $_[0]); |
159 | $self->{widget}->show_all; |
166 | $self->{imagebox}->show_all; |
160 | # undef => show sth. funny |
167 | } |
161 | }); |
168 | }); |
162 | } |
169 | } |
163 | |
170 | |
164 | $self->{clock}->set_rules (@{$rules->{rules}}{qw(timesys time interval count)}); |
171 | $self->{clock}->set_rules (@{$rules->{rules}}{qw(timesys time interval count)}); |
165 | } |
172 | } |
… | |
… | |
204 | }); |
211 | }); |
205 | |
212 | |
206 | $self->{window}->add($self->{hpane} = new Gtk2::HPaned); |
213 | $self->{window}->add($self->{hpane} = new Gtk2::HPaned); |
207 | gtk::state $self->{hpane}, "game::hpane", undef, position => 500; |
214 | gtk::state $self->{hpane}, "game::hpane", undef, position => 500; |
208 | |
215 | |
|
|
216 | $self->{hpane}->pack1(($self->{left} = new Gtk2::VBox), 1, 1); |
|
|
217 | |
|
|
218 | $self->{boardbox} = new Gtk2::VBox; |
|
|
219 | |
209 | $self->{hpane}->pack1((my $vbox = new Gtk2::VBox), 1, 1); |
220 | $self->{hpane}->pack1((my $vbox = new Gtk2::VBox), 1, 1); |
210 | |
221 | |
|
|
222 | # challenge |
|
|
223 | |
|
|
224 | $self->{challenge} = new challenge channel => $self->{channel}; |
|
|
225 | |
|
|
226 | # board box (aspect/canvas) |
|
|
227 | |
211 | $vbox->pack_start((my $frame = new Gtk2::Frame), 0, 1, 0); |
228 | $self->{boardbox}->pack_start((my $frame = new Gtk2::Frame), 0, 1, 0); |
212 | |
229 | |
213 | { |
230 | { |
214 | $frame->add(my $vbox = new Gtk2::VBox); |
231 | $frame->add(my $vbox = new Gtk2::VBox); |
215 | $vbox->add($self->{title} = new Gtk2::Label $title); |
232 | $vbox->add($self->{title} = new Gtk2::Label $title); |
216 | |
233 | |
… | |
… | |
220 | $scale->set_draw_value (0); |
237 | $scale->set_draw_value (0); |
221 | $scale->set_digits (0); |
238 | $scale->set_digits (0); |
222 | |
239 | |
223 | $self->{moveadj}->signal_connect (value_changed => sub { $self->update_board }); |
240 | $self->{moveadj}->signal_connect (value_changed => sub { $self->update_board }); |
224 | } |
241 | } |
225 | |
242 | |
226 | $vbox->pack_start((my $aspect_frame = new Gtk2::AspectFrame "", 0.5, 0.5, 1, 0), 1, 1, 0); |
243 | $self->{boardbox}->pack_start((my $aspect_frame = new Gtk2::AspectFrame "", 0.5, 0.5, 1, 0), 1, 1, 0); |
227 | $aspect_frame->set (border_width => 0, shadow_type => 'none', label_xalign => 0.5); |
244 | $aspect_frame->set (border_width => 0, shadow_type => 'none', label_xalign => 0.5); |
228 | $self->{board_label} = $aspect_frame->get_label_widget; |
245 | $self->{board_label} = $aspect_frame->get_label_widget; |
229 | |
246 | |
230 | $aspect_frame->add($self->{canvas} = new Gtk2::DrawingArea); |
247 | $aspect_frame->add($self->{canvas} = new Gtk2::DrawingArea); |
231 | $self->{canvas}->double_buffered (0) if $::config->{conserve_memory}; |
248 | $self->{canvas}->double_buffered (0) if $::config->{conserve_memory}; |
… | |
… | |
257 | my $text = $self->{entry}->get_text; |
274 | my $text = $self->{entry}->get_text; |
258 | $self->say($text) if $text =~ /\S/; |
275 | $self->say($text) if $text =~ /\S/; |
259 | $self->{entry}->set_text(""); |
276 | $self->{entry}->set_text(""); |
260 | }); |
277 | }); |
261 | |
278 | |
|
|
279 | $self->event_update_game; |
262 | $self; |
280 | $self; |
263 | } |
281 | } |
264 | |
282 | |
265 | sub event_update_users { |
283 | sub event_update_users { |
266 | my ($self, $add, $update, $remove) = @_; |
284 | my ($self, $add, $update, $remove) = @_; |
… | |
… | |
692 | } |
710 | } |
693 | |
711 | |
694 | $self->{text}->append_text ($text); |
712 | $self->{text}->append_text ($text); |
695 | } |
713 | } |
696 | |
714 | |
|
|
715 | sub event_join { |
|
|
716 | my ($self) = @_; |
|
|
717 | $self->SUPER::event_join; |
|
|
718 | } |
|
|
719 | |
697 | sub event_part { |
720 | sub event_part { |
698 | my ($self) = @_; |
721 | my ($self) = @_; |
699 | $self->SUPER::event_part; |
722 | $self->SUPER::event_part; |
700 | } |
723 | } |
701 | |
724 | |
… | |
… | |
705 | } |
728 | } |
706 | |
729 | |
707 | sub event_update_game { |
730 | sub event_update_game { |
708 | my ($self) = @_; |
731 | my ($self) = @_; |
709 | $self->SUPER::event_update_game; |
732 | $self->SUPER::event_update_game; |
710 | warn "UPDATE GAME";#d# |
733 | warn "GAME UPDATE ".join (":", %$self); |
|
|
734 | warn "SAVED ".$self->is_saved; |
|
|
735 | warn "SCORED ".$self->is_scored; |
|
|
736 | warn "ADJ ".$self->is_adjourned; |
|
|
737 | warn "VALID ".$self->is_valid; |
|
|
738 | warn "MOVES ".$self->moves; |
|
|
739 | warn "TYPE ".$self->type; |
|
|
740 | |
|
|
741 | $self->{left}->remove ($_) for $self->{left}->get_children; |
|
|
742 | if ($self->is_valid) { |
|
|
743 | $self->{left}->add ($self->{boardbox}); |
|
|
744 | (delete $self->{challenge})->destroy if $self->{challenge}; |
|
|
745 | } else { |
|
|
746 | $self->{left}->add ($self->{challenge}->widget); |
|
|
747 | } |
|
|
748 | $self->{left}->show_all; |
711 | } |
749 | } |
712 | |
750 | |
713 | sub destroy { |
751 | sub destroy { |
714 | my ($self) = @_; |
752 | my ($self) = @_; |
715 | (delete $self->{userpanel}[WHITE])->destroy if $self->{userpanel}[WHITE]; |
753 | (delete $self->{userpanel}[WHITE])->destroy if $self->{userpanel}[WHITE]; |