… | |
… | |
11 | use IO::Socket::INET; |
11 | use IO::Socket::INET; |
12 | |
12 | |
13 | use Errno; |
13 | use Errno; |
14 | |
14 | |
15 | init Gtk; |
15 | init Gtk; |
|
|
16 | |
|
|
17 | $HACK = 1; # do NEVER enable. ;) |
16 | |
18 | |
17 | our $config; |
19 | our $config; |
18 | |
20 | |
19 | { |
21 | { |
20 | use Storable (); |
22 | use Storable (); |
… | |
… | |
135 | |
137 | |
136 | KGS::Listener::Debug->new->listen($self->{conn}); #d# debug only :) |
138 | KGS::Listener::Debug->new->listen($self->{conn}); #d# debug only :) |
137 | |
139 | |
138 | $self->listen($self->{conn}); |
140 | $self->listen($self->{conn}); |
139 | |
141 | |
|
|
142 | $self->{roomlist} = new roomlist conn => $self->{conn}; |
|
|
143 | |
140 | $self->{window} = new Gtk::Window 'toplevel'; |
144 | $self->{window} = new Gtk::Window 'toplevel'; |
141 | $self->{window}->set_title('kgsueme'); |
145 | $self->{window}->set_title('kgsueme'); |
142 | ::state $self->{window}, "main::window", undef, window_size => [400, 100]; |
146 | ::state $self->{window}, "main::window", undef, window_size => [400, 100]; |
143 | $self->{window}->signal_connect(delete_event => sub { main_quit Gtk }); |
147 | $self->{window}->signal_connect(delete_event => sub { main_quit Gtk }); |
144 | |
148 | |
145 | $self->{window}->add(my $vbox = new Gtk::VBox); |
149 | $self->{window}->add(my $vbox = new Gtk::VBox); |
146 | |
150 | |
147 | $vbox->pack_start(($self->{buttonbox} = new Gtk::HButtonBox), 0, 1, 0); |
151 | $vbox->pack_start(($buttonbox = new Gtk::HButtonBox), 0, 1, 0); |
|
|
152 | $buttonbox->set_spacing(0); |
148 | |
153 | |
149 | my $button = sub { |
154 | my $button = sub { |
150 | $self->{buttonbox}->add(my $button = new Gtk::Button $_[0]); |
155 | $buttonbox->add(my $button = new Gtk::Button $_[0]); |
151 | signal_connect $button clicked => $_[1]; |
156 | signal_connect $button clicked => $_[1]; |
152 | }; |
157 | }; |
153 | |
158 | |
154 | $button->("Login", sub { |
159 | $button->("Login", sub { $self->login; }); |
155 | $self->login; |
160 | $button->("Roomlist", sub { $self->{roomlist}->show; }); |
156 | }); |
|
|
157 | $button->("Roomlist", sub { |
|
|
158 | $self->{roomlist} ||= new roomlist conn => $self->{conn}; |
|
|
159 | $self->{roomlist}->show; |
|
|
160 | }); |
|
|
161 | $button->("Save Config & Layout", sub { ::save_state }); |
161 | $button->("Save Config & Layout", sub { ::save_state }); |
|
|
162 | $button->("Quit", sub { main_quit Gtk }); |
162 | |
163 | |
163 | $vbox->pack_start((my $hbox = new Gtk::HBox), 0, 1, 0); |
164 | $vbox->pack_start((my $hbox = new Gtk::HBox), 0, 1, 0); |
164 | |
165 | |
165 | $hbox->add(new Gtk::Label "Login"); |
166 | $hbox->add(new Gtk::Label "Login"); |
166 | |
167 | |
167 | $hbox->add($self->{login} = new_with_max_length Gtk::Entry 12); |
168 | $hbox->add($self->{login} = new_with_max_length Gtk::Entry 12); |
168 | $self->{login}->set_text($::config->{login}); |
169 | $self->{login}->set_text($::config->{login}); |
|
|
170 | |
|
|
171 | if ($::HACK) { |
|
|
172 | $self->{login}->signal_connect(activate => sub { |
|
|
173 | $self->{conn}{name} = $self->{login}->get_text; |
|
|
174 | }); |
|
|
175 | } |
169 | |
176 | |
170 | $hbox->add(new Gtk::Label "Password"); |
177 | $hbox->add(new Gtk::Label "Password"); |
171 | $hbox->add($self->{password} = new Gtk::Entry); |
178 | $hbox->add($self->{password} = new Gtk::Entry); |
172 | $self->{password}->set_visibility(0); |
179 | $self->{password}->set_visibility(0); |
173 | |
180 | |
… | |
… | |
210 | my ($self, $msg) = @_; |
217 | my ($self, $msg) = @_; |
211 | |
218 | |
212 | ::status("login", "logged in as '$self->{conn}{name}' with status '$msg->{result}'"); |
219 | ::status("login", "logged in as '$self->{conn}{name}' with status '$msg->{result}'"); |
213 | $::config->{login} = $self->{conn}{name}; |
220 | $::config->{login} = $self->{conn}{name}; |
214 | |
221 | |
215 | $self->{window}->show_all; |
222 | if ($msg->{success}) { |
|
|
223 | warn "hiya\n"; |
|
|
224 | for (keys %{$::config->{rooms}}) { |
|
|
225 | warn "hiya $_\n"; |
|
|
226 | $self->{roomlist}->join_room($_); |
|
|
227 | } |
|
|
228 | } |
|
|
229 | |
|
|
230 | warn PApp::Util::dumpval($::config); |
216 | } |
231 | } |
217 | |
232 | |
218 | sub event_disconnect { } |
233 | sub event_disconnect { } |
219 | |
234 | |
220 | ############################################################################# |
235 | ############################################################################# |
… | |
… | |
231 | |
246 | |
232 | $self->{window} = new Gtk::Window 'toplevel'; |
247 | $self->{window} = new Gtk::Window 'toplevel'; |
233 | $self->{window}->set_title('KGS Rooms'); |
248 | $self->{window}->set_title('KGS Rooms'); |
234 | ::state $self->{window}, "roomlist::window", undef, window_size => [400, 200]; |
249 | ::state $self->{window}, "roomlist::window", undef, window_size => [400, 200]; |
235 | |
250 | |
236 | $self->{window}->signal_connect(delete_event => sub { hide $self->{window} }); |
251 | $self->{window}->signal_connect(delete_event => sub { $self->{window}->hide }); |
237 | |
252 | |
238 | $self->{window}->add(my $vbox = new Gtk::VBox); |
253 | $self->{window}->add(my $vbox = new Gtk::VBox); |
239 | |
254 | |
240 | $vbox->pack_start((my $sw = new Gtk::ScrolledWindow), 1, 1, 0); |
255 | $vbox->pack_start((my $sw = new Gtk::ScrolledWindow), 1, 1, 0); |
241 | $sw->set_policy("automatic", "always"); |
256 | $sw->set_policy("automatic", "always"); |
… | |
… | |
246 | ::state $self->{roomlist}, "roomlist::roomlist", undef, clist_column_widths => [20, 200]; |
261 | ::state $self->{roomlist}, "roomlist::roomlist", undef, clist_column_widths => [20, 200]; |
247 | |
262 | |
248 | $self->{roomlist}->signal_connect(select_row => sub { |
263 | $self->{roomlist}->signal_connect(select_row => sub { |
249 | my $room = $self->{roomlist}->get_row_data($_[1]) |
264 | my $room = $self->{roomlist}->get_row_data($_[1]) |
250 | or return; |
265 | or return; |
251 | $self->{room}{$room->{channel}} ||= new room %$room, conn => $self->{conn}, users => {}; |
|
|
252 | $self->{room}{$room->{channel}}->join; |
|
|
253 | $self->{roomlist}->unselect_all; |
266 | $self->{roomlist}->unselect_all; |
|
|
267 | $self->join_room($room->{channel}); |
254 | }); |
268 | }); |
255 | |
269 | |
256 | $self; |
270 | $self; |
|
|
271 | } |
|
|
272 | |
|
|
273 | sub join_room { |
|
|
274 | my ($self, $channel) = @_; |
|
|
275 | |
|
|
276 | $self->{room}{$channel} ||= room->new(channel => $channel, conn => $self->{conn}, users => {}); |
|
|
277 | $self->{room}{$channel}->join; |
257 | } |
278 | } |
258 | |
279 | |
259 | sub show { |
280 | sub show { |
260 | my ($self, $msg) = @_; |
281 | my ($self, $msg) = @_; |
261 | |
282 | |
… | |
… | |
407 | |
428 | |
408 | sub part { |
429 | sub part { |
409 | my ($self) = @_; |
430 | my ($self) = @_; |
410 | $self->SUPER::part; |
431 | $self->SUPER::part; |
411 | |
432 | |
|
|
433 | delete $::config->{rooms}{$self->{channel}}; |
412 | $self->{window}->hide_all; |
434 | $self->{window}->hide_all; |
413 | $self->event_update; |
435 | $self->event_update; |
414 | $self->event_update_games; |
436 | $self->event_update_games; |
|
|
437 | } |
|
|
438 | |
|
|
439 | sub event_join { |
|
|
440 | my ($self) = @_; |
|
|
441 | $self->SUPER::event_join; |
|
|
442 | |
|
|
443 | $::config->{rooms}{$self->{channel}} = 1; |
415 | } |
444 | } |
416 | |
445 | |
417 | sub event_update_roominfo { |
446 | sub event_update_roominfo { |
418 | my ($self) = @_; |
447 | my ($self) = @_; |
419 | |
448 | |
… | |
… | |
543 | } |
572 | } |
544 | } |
573 | } |
545 | } |
574 | } |
546 | } |
575 | } |
547 | |
576 | |
|
|
577 | package KGS::Game::Board; |
|
|
578 | package KGS::Game::Node; |
|
|
579 | package KGS::Game::Tree; |
|
|
580 | |
548 | 1; |
581 | 1; |
549 | |
582 | |
550 | |
583 | |
551 | |
584 | |