ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/bin/pclient
(Generate patch)

Comparing deliantra/Deliantra-Client/bin/pclient (file contents):
Revision 1.22 by root, Fri Apr 7 20:13:13 2006 UTC vs.
Revision 1.23 by elmex, Fri Apr 7 20:15:01 2006 UTC

162 $FACECACHE->{"$face->{chksum},$face->{name}"} = $face->{image}; 162 $FACECACHE->{"$face->{chksum},$face->{name}"} = $face->{image};
163 163
164 $face->{texture} = new_from_image Crossfire::Client::Texture delete $face->{image}; 164 $face->{texture} = new_from_image Crossfire::Client::Texture delete $face->{image};
165} 165}
166 166
167sub gtk_add_cfg_field {
168 my ($tbl, $cfg, $klbl, $key, $value) = @_;
169 my $i = $cfg->{_i}++;
170 $tbl->attach_defaults (my $lbl = Gtk2::Label->new ($klbl), 0, 1, $i, $i + 1);
171 $tbl->attach_defaults (my $ent = Gtk2::Entry->new, 1, 2, $i, $i + 1);
172 if ($key eq 'password') {
173 $ent->set_invisible_char ("*");
174 $ent->set (visibility => 0)
175 }
176 $ent->set_text ($value);
177 $ent->signal_connect (changed => sub {
178 my ($ent) = @_;
179 $cfg->{$key} = $ent->get_text;
180 });
181}
182
183sub run_config_dialog {
184 my (%events) = @_;
185
186 my $w = Gtk2::Window->new;
187
188 my @cfg = (
189 [qw/Host host/],
190 [qw/Port port/],
191 [qw/Username user/],
192 [qw/Password password/],
193 );
194
195 my $cfg = {};
196
197 my $a = SDL::ListModes (0, SDL_FULLSCREEN|SDL_HWSURFACE);
198 my @modes = map { [SDL::RectW ($_), SDL::RectH ($_)] } @$a;
199
200 $w->add (my $vb = Gtk2::VBox->new);
201 $vb->pack_start (my $t = Gtk2::Table->new (2, scalar @cfg), 0, 0, 0);
202 my $selmode = $::CFG->{width} . 'x' . $::CFG->{height};
203 $t->attach_defaults (Gtk2::Label->new ("Modes"), 0, 1, 0, 1);
204 $t->attach_defaults (my $cb = Gtk2::ComboBox->new_text, 1, 2, 0, 1);
205 my $i = 0;
206 my $act = 0;
207 for (map { "$_->[0]x$_->[1]" } reverse @modes) {
208 if ($_ eq $selmode) { $act = $i }
209 $cb->append_text ($_);
210 $i++;
211 }
212 $cb->set_active ($act);
213 $cb->signal_connect (changed => sub {
214 my ($cb) = @_;
215 my $txt = $cb->get_active_text;
216 if ($txt =~ m/(\d+)x(\d+)/) {
217 $::CFG->{width} = $1;
218 $::CFG->{height} = $2;
219 }
220 });
221
222 $cfg->{_i} = 1;
223 for (@cfg) {
224 gtk_add_cfg_field ($t, $cfg, $_->[0], $_->[1], $::CFG->{$_->[1]});
225 }
226
227 $vb->pack_start (my $hb = Gtk2::HBox->new, 0, 0, 0);
228 $hb->pack_start (my $cb = Gtk2::Button->new ("save"), 1, 1, 5);
229 $cb->signal_connect (clicked => sub {
230 for (keys %$cfg) {
231 $::CFG->{$_} = $cfg->{$_}
232 if $_ ne '_i';
233 }
234 Crossfire::Client::write_cfg "$Crossfire::VARDIR/pclientrc";
235 });
236 $hb->pack_start (my $cb = Gtk2::Button->new ("login"), 1, 1, 5);
237 $cb->signal_connect (clicked => sub {
238 for (keys %$cfg) {
239 $::CFG->{$_} = $cfg->{$_}
240 if $_ ne '_i';
241 }
242 my $cb = $events{login} || sub {};
243 $cb->($::CFG->{user}, $::CFG->{password});
244 });
245 $hb->pack_start (my $cb = Gtk2::Button->new ("logout"), 1, 1, 5);
246 $cb->signal_connect (clicked => sub {
247 my $cb = $events{login} || sub {};
248 $cb->();
249 });
250 $hb->pack_start (my $cb = Gtk2::Button->new ("quit"), 1, 1, 5);
251 $cb->signal_connect (clicked => sub { $w->destroy });
252
253 $w->show_all;
254
255 $w->signal_connect (destroy => sub { Gtk2->main_quit });
256}
257
258
167############################################################################# 259#############################################################################
168 260
169SDL::Init(SDL_INIT_EVERYTHING()); 261SDL::Init(SDL_INIT_EVERYTHING());
170 262
171my $mapwidget = Crossfire::Client::Widget::MapWidget->new; 263my $mapwidget = Crossfire::Client::Widget::MapWidget->new;
172 264
173#find_rcfile "uifont.ttf"; 265find_rcfile "uifont.ttf";
174 266
175$mapwidget->activate; 267$mapwidget->activate;
176$mapwidget->focus_in; 268$mapwidget->focus_in;
177 269
178Crossfire::Client::read_cfg "$Crossfire::VARDIR/pclientrc"; 270Crossfire::Client::read_cfg "$Crossfire::VARDIR/pclientrc";
185 fullscreen => 0, 277 fullscreen => 0,
186 host => "crossfire.schmorp.de", 278 host => "crossfire.schmorp.de",
187 port => 13327, 279 port => 13327,
188}; 280};
189 281
190Crossfire::Client::Util::run_config_dialog 282run_config_dialog
191 login => sub { start_game }, 283 login => sub { start_game },
192 logout => sub { stop_game }; 284 logout => sub { stop_game };
193 285
194main Gtk2; 286main Gtk2;
195 287

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines