1 | package appwin; |
1 | package appwin; |
2 | |
2 | |
|
|
3 | use Scalar::Util; |
|
|
4 | |
3 | use base KGS::Listener; |
5 | use base KGS::Listener; |
|
|
6 | use base gtk::widget; |
4 | |
7 | |
5 | my %context_id; |
8 | my %context_id; |
6 | |
9 | |
7 | sub status { |
10 | sub status { |
8 | my ($type, $text) = @_; |
11 | my ($type, $text) = @_; |
… | |
… | |
14 | sub new { |
17 | sub new { |
15 | my $self = shift; |
18 | my $self = shift; |
16 | $self = $self->SUPER::new(@_); |
19 | $self = $self->SUPER::new(@_); |
17 | |
20 | |
18 | $appwin::self = $self; # singleton |
21 | $appwin::self = $self; # singleton |
|
|
22 | Scalar::Util::weaken $appwin::self; |
19 | |
23 | |
20 | $self->{conn} = new KGS::Protocol; |
24 | $self->{conn} = new KGS::Protocol; |
21 | |
25 | |
22 | KGS::Listener::Debug->new->listen($self->{conn}, "any"); #d# debug only :) |
26 | KGS::Listener::Debug->new->listen($self->{conn}, "any"); #d# debug only :) |
23 | |
27 | |
… | |
… | |
25 | |
29 | |
26 | $self->{roomlist} = new roomlist conn => $self->{conn}; |
30 | $self->{roomlist} = new roomlist conn => $self->{conn}; |
27 | |
31 | |
28 | $self->{window} = new Gtk2::Window 'toplevel'; |
32 | $self->{window} = new Gtk2::Window 'toplevel'; |
29 | $self->{window}->set_title('kgsueme'); |
33 | $self->{window}->set_title('kgsueme'); |
30 | gtk::state $self->{window}, "main::window", undef, window_size => [400, 100]; |
34 | gtk::state $self->{window}, "main::window", undef, window_size => [400, 400]; |
31 | $self->{window}->signal_connect(delete_event => sub { main_quit Gtk2; 1 }); |
35 | $self->{window}->signal_connect(delete_event => sub { main_quit Gtk2; 1 }); |
32 | |
36 | |
33 | $self->{window}->add(my $vbox = new Gtk2::VBox); |
37 | $self->{window}->add(my $vbox = new Gtk2::VBox); |
34 | |
38 | |
35 | $vbox->pack_start(($buttonbox = new Gtk2::HButtonBox), 0, 1, 0); |
39 | $vbox->pack_start(($buttonbox = new Gtk2::HButtonBox), 0, 1, 0); |
… | |
… | |
59 | } |
63 | } |
60 | |
64 | |
61 | $hbox->add(new Gtk2::Label "Password"); |
65 | $hbox->add(new Gtk2::Label "Password"); |
62 | $hbox->add($self->{password} = new Gtk2::Entry); |
66 | $hbox->add($self->{password} = new Gtk2::Entry); |
63 | $self->{password}->set_visibility(0); |
67 | $self->{password}->set_visibility(0); |
|
|
68 | |
|
|
69 | $self->{gamelist} = new gamelist conn => $self->{conn}; |
|
|
70 | $vbox->pack_start ($self->{gamelist}->widget, 1, 1, 0); |
|
|
71 | |
|
|
72 | $appwin::gamelist = $self->{gamelist}; |
|
|
73 | Scalar::Util::weaken $appwin::gamelist; |
64 | |
74 | |
65 | $vbox->pack_start(($self->{status} = new Gtk2::Statusbar), 0, 1, 0); |
75 | $vbox->pack_start(($self->{status} = new Gtk2::Statusbar), 0, 1, 0); |
66 | |
76 | |
67 | $self->{window}->show_all; |
77 | $self->{window}->show_all; |
68 | |
78 | |
… | |
… | |
103 | |
113 | |
104 | appwin::status("login", "logged in as '$self->{conn}{name}' with status '$msg->{result}'"); |
114 | appwin::status("login", "logged in as '$self->{conn}{name}' with status '$msg->{result}'"); |
105 | $::config->{login} = $self->{conn}{name}; |
115 | $::config->{login} = $self->{conn}{name}; |
106 | |
116 | |
107 | if ($msg->{success}) { |
117 | if ($msg->{success}) { |
|
|
118 | # auto-join |
108 | for (keys %{$::config->{rooms}}) { |
119 | for (values %{$::config->{rooms}}) { |
109 | $self->{roomlist}->join_room($_); |
120 | $self->{roomlist}->join_room($_); |
110 | } |
121 | } |
111 | sound::play 3, "connect"; |
122 | sound::play 3, "connect"; |
112 | } elsif ($msg->{result} eq "user unknown") { |
123 | } elsif ($msg->{result} eq "user unknown") { |
113 | sound::play 2, "user_unknown"; |
124 | sound::play 2, "user_unknown"; |