ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/gamelist.pl
Revision: 1.24
Committed: Wed Jun 2 04:39:07 2004 UTC (19 years, 11 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.23: +1 -1 lines
Log Message:
*** empty log message ***

File Contents

# Content
1 package gamelist;
2
3 use KGS::Constants;
4
5 use Glib::Object::Subclass
6 Gtk2::VPaned;
7
8 sub new {
9 my ($class, %arg) = @_;
10 my $self = $class->Glib::Object::new;
11 $self->{$_} = delete $arg{$_} for keys %arg;
12
13 $self->signal_connect (destroy => sub {
14 %{$_[0]} = ();
15 });
16
17 $self->set(position_set => 1);
18 gtk::state $self, "gamelist::vpane", undef, position => 120;
19
20 $self->{model1} = new Gtk2::ListStore Glib::Scalar,
21 Glib::String, Glib::String, Glib::String, Glib::String, Glib::Int, Glib::String, Glib::String;
22 gtk::state $self->{model1}, "gamelist::model1", undef, modelsortorder => [4, 'descending'];
23
24 $self->add(my $sw = new Gtk2::ScrolledWindow);
25 $sw->set_policy("never", "always");
26 $sw->add($self->{view1} = new Gtk2::TreeView $self->{model1});
27 $self->{view1}->set (rules_hint => 1, search_column => 2);
28
29 $self->{model2} = new Gtk2::ListStore Glib::Scalar,
30 Glib::String, Glib::String, Glib::String, Glib::String, Glib::Int,
31 Glib::String, Glib::String, Glib::Int, Glib::Int, Glib::Int, Glib::String;
32 gtk::state $self->{model2}, "gamelist::model1", undef, modelsortorder => [4, 'descending'];
33
34 $self->add(my $sw = new Gtk2::ScrolledWindow);
35 $sw->set_policy("never", "always");
36 $sw->add($self->{view2} = new Gtk2::TreeView $self->{model2});
37 $self->{view2}->set_search_column(1);
38 $self->{view2}->set (rules_hint => 1, search_column => 2);
39
40 for my $view ($self->{view1}, $self->{view2}) {
41 push @{$self->{rlcolumns}}, my $column =
42 Gtk2::TreeViewColumn->new_with_attributes ("Room", $gtk::text_renderer, text => 1);
43 $column->set_sort_column_id(1);
44 $column->set(resizable => 1);
45 $column->set(sizing => 'fixed');
46 gtk::state $column, "gamelist::model::Room", undef, column_size => 80;
47 $view->append_column ($column);
48
49 push @{$self->{rlcolumns}}, my $column =
50 Gtk2::TreeViewColumn->new_with_attributes ("T", $gtk::text_renderer, text => 2);
51 $column->set_sort_column_id(2);
52 $column->set(sizing => 'grow-only');
53 $view->append_column ($column);
54
55 push @{$self->{rlcolumns}}, my $column =
56 Gtk2::TreeViewColumn->new_with_attributes ("Owner", $gtk::text_renderer, text => 3);
57 $column->set_sort_column_id(3);
58 $column->set(resizable => 1);
59 $column->set(sizing => 'fixed');
60 gtk::state $column, "gamelist::model::Owner", undef, column_size => 100;
61 $view->append_column ($column);
62
63 push @{$self->{rlcolumns}}, my $column =
64 Gtk2::TreeViewColumn->new_with_attributes ("Rk", $gtk::text_renderer, text => 4);
65 $column->set_sort_column_id(5);
66 $column->set(sizing => 'grow-only');
67 $view->append_column ($column);
68 }
69
70 push @{$self->{rlcolumns}}, my $column =
71 Gtk2::TreeViewColumn->new_with_attributes ("Info", $gtk::text_renderer, text => 6);
72 $column->set(resizable => 1);
73 $column->set(sizing => 'autosize');
74 gtk::state $column, "gamelist::model::Info", undef, column_size => 80;
75 $self->{view1}->append_column ($column);
76
77 push @{$self->{rlcolumns}}, my $column =
78 Gtk2::TreeViewColumn->new_with_attributes ("Notes", $gtk::text_renderer, text => 7);
79 $column->set(resizable => 1);
80 $column->set(sizing => 'autosize');
81 gtk::state $column, "gamelist::model::Notes", undef, column_size => 200;
82 $self->{view1}->append_column ($column);
83
84 ###########
85
86 push @{$self->{rlcolumns}}, my $column =
87 Gtk2::TreeViewColumn->new_with_attributes ("Opponent", $gtk::text_renderer, text => 6);
88 $column->set(resizable => 1);
89 $column->set(sizing => 'fixed');
90 gtk::state $column, "gamelist::model::Opponent", undef, column_size => 120;
91 $self->{view2}->append_column ($column);
92
93 push @{$self->{rlcolumns}}, my $column =
94 Gtk2::TreeViewColumn->new_with_attributes ("Rk", $gtk::text_renderer, text => 7);
95 $column->set_sort_column_id(8);
96 $column->set(sizing => 'grow-only');
97 $self->{view2}->append_column ($column);
98
99 push @{$self->{rlcolumns}}, my $column =
100 Gtk2::TreeViewColumn->new_with_attributes ("Mv", $gtk::int_renderer, text => 9);
101 $column->set_sort_column_id(9);
102 $column->set(sizing => 'grow-only');
103 $self->{view2}->append_column ($column);
104
105 push @{$self->{rlcolumns}}, my $column =
106 Gtk2::TreeViewColumn->new_with_attributes ("Ob", $gtk::int_renderer, text => 10);
107 $column->set_sort_column_id(10);
108 $column->set(sizing => 'grow-only');
109 $self->{view2}->append_column ($column);
110
111 push @{$self->{rlcolumns}}, my $column =
112 Gtk2::TreeViewColumn->new_with_attributes ("Info", $gtk::text_renderer, text => 11);
113 $column->set(resizable => 1);
114 $column->set(sizing => 'autosize');
115 gtk::state $column, "gamelist::model::Info", undef, column_size => 120;
116 $self->{view2}->append_column ($column);
117
118 ###########
119
120 $self->{view1}->signal_connect(row_activated => sub {
121 my ($widget, $path, $column) = @_;
122 my $game = $self->{model1}->get ($self->{model1}->get_iter ($path), 0);
123 $self->{app}->open_game (%$game); # challenging private game sis allowed
124 1;
125 });
126
127 $self->{view2}->signal_connect(row_activated => sub {
128 my ($widget, $path, $column) = @_;
129 my $game = $self->{model2}->get ($self->{model2}->get_iter ($path), 0);
130 $self->{app}->open_game (%$game) unless $game->is_private;
131 1;
132 });
133
134 $self;
135 }
136
137 sub update {
138 my ($self, $room, $add, $update, $remove) = @_;
139
140 $self->{games}{$room->{name}} = $room->{games};
141
142 my $m1 = $self->{model1};
143 my $m2 = $self->{model2};
144
145 for (@$remove) {
146 (delete $_->{model})->remove (delete $_->{iter}) if $_->{model};
147 }
148
149 for (@$add, @$update) {
150 my $owner = $_->owner;
151 if ($_->is_inprogress) {
152 (delete $_->{model})->remove (delete $_->{iter}) if $_->{model} && $_->{model} != $m2;#d#
153 $_->{model} = $m2;
154 $m2->set ($_->{iter} ||= $m2->append,
155 0, $_,
156 1, $room->{name},
157 2, $_->type_char,
158 3, $owner->{name},
159 4, $owner->rank_string,
160 5, $owner->rank_number,
161 6, $_->opponent_string,
162 7, $_->{black}->rank_string,
163 8, $_->{black}->rank_number,
164 9, $_->moves,
165 10, $_->{observers},
166 11, $_->rules,
167 );
168 } else {
169 (delete $_->{model})->remove (delete $_->{iter}) if $_->{model} && $_->{model} != $m1;#d#
170 $_->{model} = $m1;
171 $m1->set ($_->{iter} ||= $m1->append,
172 0, $_,
173 1, $room->{name},
174 2, $_->type_char,
175 3, $owner->{name},
176 4, $owner->rank_string,
177 5, $owner->rank_number,
178 6, $_->rules,
179 7, $_->{notes},
180 );
181 }
182 }
183 }
184
185 1;
186