ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/gamelist.pl
Revision: 1.19
Committed: Fri Apr 2 23:16:30 2004 UTC (20 years, 2 months ago) by pcg
Content type: text/plain
Branch: MAIN
Changes since 1.18: +1 -1 lines
Log Message:
*** empty log message ***

File Contents

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