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

Comparing deliantra/Deliantra-Client/bin/cfplus (file contents):
Revision 1.82 by elmex, Wed Jun 28 10:37:19 2006 UTC vs.
Revision 1.94 by root, Sun Jul 16 20:04:08 2006 UTC

40use CFClient::UI; 40use CFClient::UI;
41use CFClient::BindingEditor; 41use CFClient::BindingEditor;
42use CFClient::MapWidget; 42use CFClient::MapWidget;
43 43
44$SIG{QUIT} = sub { Carp::cluck "QUIT" }; 44$SIG{QUIT} = sub { Carp::cluck "QUIT" };
45$SIG{PIPE} = 'IGNORE';
45 46
46$Event::DIED = sub { 47$Event::DIED = sub {
47 # TODO: display dialog box or so 48 # TODO: display dialog box or so
48 Carp::confess $_[1];#d#TODO: remove when stable 49 Carp::confess $_[1];#d#TODO: remove when stable
49 CFClient::error $_[1]; 50 CFClient::error $_[1];
85our $CONSOLE; 86our $CONSOLE;
86our $METASERVER; 87our $METASERVER;
87our $LOGIN_BUTTON; 88our $LOGIN_BUTTON;
88our $QUIT_DIALOG; 89our $QUIT_DIALOG;
89our $HOST_ENTRY; 90our $HOST_ENTRY;
91our $FULLSCREEN_ENABLE;
92our $PICKUP_ENABLE;
90our $SERVER_INFO; 93our $SERVER_INFO;
91 94
92our $SETUP_DIALOG; 95our $SETUP_DIALOG;
93our $SETUP_NOTEBOOK; 96our $SETUP_NOTEBOOK;
94our $SETUP_SERVER; 97our $SETUP_SERVER;
95our $SETUP_KEYBOARD; 98our $SETUP_KEYBOARD;
96our $SETUP_SPELLS;
97 99
100our $PL_NOTEBOOK;
98our $STATS_WINDOW; 101our $PL_WINDOW;
102
103our $INVENTORY_PAGE;
104our $STATS_PAGE;
105our $SPELL_PAGE;
106
107our $HELP_WINDOW;
99our $MESSAGE_WINDOW; 108our $MESSAGE_WINDOW;
100our $FLOORBOX; 109our $FLOORBOX;
101our $GAUGES; 110our $GAUGES;
102our $STATWIDS; 111our $STATWIDS;
103 112
110 119
111our $ALT_ENTER_MESSAGE; 120our $ALT_ENTER_MESSAGE;
112our $STATUSBOX; 121our $STATUSBOX;
113our $DEBUG_STATUS; 122our $DEBUG_STATUS;
114 123
115our $INV_WINDOW;
116our $INV; 124our $INV;
117our $INVR; 125our $INVR;
118our $INV_RIGHT_HB; 126our $INV_RIGHT_HB;
119 127
120our $BIND_EDITOR; 128our $BIND_EDITOR;
221 $conn->send ("reply $stat"); 229 $conn->send ("reply $stat");
222 destroy_query_dialog $conn; 230 destroy_query_dialog $conn;
223 return; 231 return;
224 } 232 }
225 233
226 $STATS_WINDOW->show; 234 $STATS_PAGE->show;
227 $MESSAGE_WINDOW->hide; 235 $MESSAGE_WINDOW->hide;
228 236
229 unshift @dialog, new CFClient::UI::Label 237 unshift @dialog, new CFClient::UI::Label
230 max_w => $::WIDTH * 0.4, 238 max_w => $::WIDTH * 0.4,
231 ellipsise => 0, 239 ellipsise => 0,
271 # right: accept 279 # right: accept
272 $table->add (4, 0, new CFClient::UI::Button 280 $table->add (4, 0, new CFClient::UI::Button
273 text => "Accept", 281 text => "Accept",
274 on_activate => sub { 282 on_activate => sub {
275 $conn->send ("reply n"); 283 $conn->send ("reply n");
276 $STATS_WINDOW->hide; 284 $STATS_PAGE->hide;
277 destroy_query_dialog $conn; 285 destroy_query_dialog $conn;
278 0 286 0
279 }, 287 },
280 ); 288 );
281 289
373 381
374sub stop_game { 382sub stop_game {
375 $LOGIN_BUTTON->set_text ("Login"); 383 $LOGIN_BUTTON->set_text ("Login");
376 $SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER); 384 $SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER);
377 $SETUP_DIALOG->show; 385 $SETUP_DIALOG->show;
378 $INV_WINDOW->hide; 386 $PL_WINDOW->hide;
379 $SETUP_SPELLS->clear_spells; 387 $SPELL_PAGE->clear_spells;
380 388
381 return unless $CONN; 389 return unless $CONN;
382 390
383 status "connection closed"; 391 status "connection closed";
384 392
409 $mode_slider->emit (changed => $mode_slider->{range}[0]); 417 $mode_slider->emit (changed => $mode_slider->{range}[0]);
410 418
411 my $row = 1; 419 my $row = 1;
412 420
413 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fullscreen"); 421 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Fullscreen");
414 $table->add (1, $row++, new CFClient::UI::CheckBox 422 $table->add (1, $row++, $FULLSCREEN_ENABLE = new CFClient::UI::CheckBox
415 state => $CFG->{fullscreen}, 423 state => $CFG->{fullscreen},
416 tooltip => "Bring the client into fullscreen mode.", 424 tooltip => "Bring the client into fullscreen mode.",
417 on_changed => sub { my ($self, $value) = @_; $CFG->{fullscreen} = $value; 0 } 425 on_changed => sub { my ($self, $value) = @_; $CFG->{fullscreen} = $value; 0 }
418 ); 426 );
419 427
469 range => [$CFG->{log_fontsize}, 0.5, 2, 0, 0.1], 477 range => [$CFG->{log_fontsize}, 0.5, 2, 0, 0.1],
470 tooltip => "The font size used by the <b>message/server log</b> window only. Changes are instant.", 478 tooltip => "The font size used by the <b>message/server log</b> window only. Changes are instant.",
471 on_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]); 0 }, 479 on_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]); 0 },
472 ); 480 );
473 481
474 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Stats Fontsize");
475
476 $table->add (1, $row++, new CFClient::UI::Slider
477 range => [$CFG->{stat_fontsize}, 0.5, 2, 0, 0.1],
478 tooltip => "The font size used by the <b>statistics window</b> only. Changes are instant.",
479 on_changed => sub {
480 $CFG->{stat_fontsize} = $_[1];
481 &set_stats_window_fontsize;
482 0
483 }
484 );
485
486 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize"); 482 $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize");
487 $table->add (1, $row++, new CFClient::UI::Slider 483 $table->add (1, $row++, new CFClient::UI::Slider
488 range => [$CFG->{gauge_fontsize}, 0.5, 2, 0, 0.1], 484 range => [$CFG->{gauge_fontsize}, 0.5, 2, 0, 0.1],
489 tooltip => "Adjusts the fontsize of the gauges at the bottom right. Changes are instant.", 485 tooltip => "Adjusts the fontsize of the gauges at the bottom right. Changes are instant.",
490 on_changed => sub { 486 on_changed => sub {
559 ); 555 );
560 556
561 $vbox 557 $vbox
562} 558}
563 559
564sub set_stats_window_fontsize {
565 for (values %{$STATWIDS}) {
566 $_->set_fontsize ($::CFG->{stat_fontsize});
567 }
568}
569
570sub set_gauge_window_fontsize { 560sub set_gauge_window_fontsize {
571 for (map { $GAUGES->{$_} } grep { $_ ne 'win' } keys %{$GAUGES}) { 561 for (map { $GAUGES->{$_} } grep { $_ ne 'win' } keys %{$GAUGES}) {
572 $_->set_fontsize ($::CFG->{gauge_fontsize}); 562 $_->set_fontsize ($::CFG->{gauge_fontsize});
573 } 563 }
574} 564}
653 643
654 $table 644 $table
655} 645}
656 646
657sub stats_window { 647sub stats_window {
658 my $tgw = new CFClient::UI::FancyFrame 648 my $vb = new CFClient::UI::VBox;
659 y => $HEIGHT * (2/8),
660 x => "max",
661 title => "Stats",
662 name => "stats_window",
663 has_close_button => 1;
664 649
665 $tgw->add (new CFClient::UI::Window child => my $vb = new CFClient::UI::VBox);
666 $vb->add ($STATWIDS->{title} = new CFClient::UI::Label valign => 0, align => -1, text => "Title:", expand => 1, 650 $vb->add ($STATWIDS->{title} = new CFClient::UI::Label valign => 0, align => -1, text => "Title:", expand => 1,
667 can_hover => 1, can_events => 1, 651 can_hover => 1, can_events => 1,
668 tooltip => "Your name and title. You can change your title by using the <b>title</b> command, if supported by the server."); 652 tooltip => "Your name and title. You can change your title by using the <b>title</b> command, if supported by the server.");
669 $vb->add ($STATWIDS->{map} = new CFClient::UI::Label valign => 0, align => -1, text => "Map:", expand => 1, 653 $vb->add ($STATWIDS->{map} = new CFClient::UI::Label valign => 0, align => -1, text => "Map:", expand => 1,
670 can_hover => 1, can_events => 1, 654 can_hover => 1, can_events => 1,
706 font => $FONT_FIXED, can_hover => 1, can_events => 1, valign => 0, align => +1, template => $template, tooltip => $tooltip); 690 font => $FONT_FIXED, can_hover => 1, can_events => 1, valign => 0, align => +1, template => $template, tooltip => $tooltip);
707 $tbl->add ($col + 1, $row, $STATWIDS->{"$id\_lbl"} = new CFClient::UI::Label 691 $tbl->add ($col + 1, $row, $STATWIDS->{"$id\_lbl"} = new CFClient::UI::Label
708 font => $FONT_FIXED, can_hover => 1, can_events => 1, fg => $color2, valign => 0, align => -1, text => $label, tooltip => $tooltip); 692 font => $FONT_FIXED, can_hover => 1, can_events => 1, fg => $color2, valign => 0, align => -1, text => $label, tooltip => $tooltip);
709 } 693 }
710 694
711 $hb->add (my $tbl2 = new CFClient::UI::Table expand => 1); 695 $vb->add (my $tbl2 = new CFClient::UI::Table expand => 1);
712 696
713 my $row = 0; 697 my $row = 0;
714 my $col = 0; 698 my $col = 0;
715 699
716 my %resist_names = ( 700 my %resist_names = (
701 slow => ["Slow",
717 slow => "<b>Slow</b> (slows you down when you are hit by the spell. Monsters will have an opportunity to come near you faster and hit you more often.)", 702 "<b>Slow</b> (slows you down when you are hit by the spell. Monsters will have an opportunity to come near you faster and hit you more often.)"],
703 holyw => ["Holy Word",
718 holyw => "<b>Holy Word</b> (resistance you against getting the fear when someone whose god doesn't like you spells the holy word on you.)", 704 "<b>Holy Word</b> (resistance you against getting the fear when someone whose god doesn't like you spells the holy word on you.)"],
705 conf => ["Confusion",
719 conf => "<b>Confusion</b> (If you are hit by confusion you will move into random directions, and likely into monsters.)", 706 "<b>Confusion</b> (If you are hit by confusion you will move into random directions, and likely into monsters.)"],
707 fire => ["Fire",
720 fire => "<b>Fire</b> (just your resistance to fire spells like burning hands, dragonbreath, meteor swarm fire, ...)", 708 "<b>Fire</b> (just your resistance to fire spells like burning hands, dragonbreath, meteor swarm fire, ...)"],
709 depl => ["Depletion",
721 depl => "<b>Depletion</b> (some monsters and other effects can cause stats depletion)", 710 "<b>Depletion</b> (some monsters and other effects can cause stats depletion)"],
711 magic => ["Magic",
722 magic => "<b>Magic</b> (resistance to magic spells like magic missile or similar)", 712 "<b>Magic</b> (resistance to magic spells like magic missile or similar)"],
713 drain => ["Draining",
723 drain => "<b>Draining</b> (some monsters (e.g. vampires) and other effects can steal experience)", 714 "<b>Draining</b> (some monsters (e.g. vampires) and other effects can steal experience)"],
715 acid => ["Acid",
724 acid => "<b>Acid</b> (resistance to acid, acid hurts pretty much and also corrodes your weapons)", 716 "<b>Acid</b> (resistance to acid, acid hurts pretty much and also corrodes your weapons)"],
717 pois => ["Poison",
725 pois => "<b>Poison</b> (resistance to getting poisoned)", 718 "<b>Poison</b> (resistance to getting poisoned)"],
719 para => ["Paralysation",
726 para => "<b>Paralysation</b> (this resistance affects the chance you get paralysed)", 720 "<b>Paralysation</b> (this resistance affects the chance you get paralysed)"],
721 deat => ["Death",
727 deat => "<b>Death</b> (resistance against death spells)", 722 "<b>Death</b> (resistance against death spells)"],
723 phys => ["Physical",
728 phys => "<b>Physical</b> (this is the resistance against physical attacks, like when a monster hit you in melee combat. The value displayed here is also displayed in the 'Arm' field on the left.)", 724 "<b>Physical</b> (this is the resistance against physical attacks, like when a monster hit you in melee combat. The value displayed here is also displayed in the 'Arm' field on the left.)"],
725 blind => ["Blind",
729 blind => "<b>Blind</b> (blind resistance affects the chance of a successful blinding attack)", 726 "<b>Blind</b> (blind resistance affects the chance of a successful blinding attack)"],
727 fear => ["Fear",
730 fear => "<b>Fear</b> (this attack will drive you away from monsters who cast this and hit you successfully, being resistant to this helps a lot when fighting those monsters)", 728 "<b>Fear</b> (this attack will drive you away from monsters who cast this and hit you successfully, being resistant to this helps a lot when fighting those monsters)"],
729 tund => ["Turn undead",
731 tund => "<b>Turn undead</b> (affects your resistancy to various forms of 'turn undead' spells. Only relevant when you are, in fact, undead...", 730 "<b>Turn undead</b> (affects your resistancy to various forms of 'turn undead' spells. Only relevant when you are, in fact, undead..."],
731 elec => ["Electricity",
732 elec => "<b>Electricity</b> (resistance against electricity, spells like large lightning, small lightning, ...)", 732 "<b>Electricity</b> (resistance against electricity, spells like large lightning, small lightning, ...)"],
733 cold => ["Cold",
733 cold => "<b>Cold</b> (this is your resistance against cold spells like icestorm, snowstorm, ...)", 734 "<b>Cold</b> (this is your resistance against cold spells like icestorm, snowstorm, ...)"],
735 ghit => ["Ghost hit",
734 ghit => "<b>Ghost hit</b> (special attack used by ghosts and ghost-like beings)", 736 "<b>Ghost hit</b> (special attack used by ghosts and ghost-like beings)"],
735 ); 737 );
736 for (qw/slow holyw conf fire depl magic 738 for (qw/slow holyw conf fire depl magic
737 drain acid pois para deat phys 739 drain acid pois para deat phys
738 blind fear tund elec cold ghit/) 740 blind fear tund elec cold ghit/)
739 { 741 {
744 template => "-100%", 746 template => "-100%",
745 align => +1, 747 align => +1,
746 valign => 0, 748 valign => 0,
747 can_events => 1, 749 can_events => 1,
748 can_hover => 1, 750 can_hover => 1,
749 tooltip => $resist_names{$_}, 751 tooltip => $resist_names{$_}->[1],
750 ); 752 );
751 $tbl2->add ($col + 1, $row, new CFClient::UI::Image 753 $tbl2->add ($col + 1, $row, new CFClient::UI::Image
752 font => $FONT_FIXED, 754 font => $FONT_FIXED,
753 can_hover => 1, 755 can_hover => 1,
754 can_events => 1, 756 can_events => 1,
755 path => "ui/resist/resist_$_.png", 757 path => "ui/resist/resist_$_.png",
756 tooltip => $resist_names{$_}, 758 tooltip => $resist_names{$_}->[1],
759 );
760 $tbl2->add ($col + 2, $row, new CFClient::UI::Label
761 text => $resist_names{$_}->[0],
762 font => $FONT_FIXED,
763 can_hover => 1,
764 can_events => 1,
765 tooltip => $resist_names{$_}->[1],
757 ); 766 );
758 767
759 $row++; 768 $row++;
760 if ($row % 6 == 0) { 769 if ($row % 6 == 0) {
761 $col += 2; 770 $col += 3;
762 $row = 0; 771 $row = 0;
763 } 772 }
764 } 773 }
765 774
766 &set_stats_window_fontsize;
767 update_stats_window ({}); 775 update_stats_window ({});
768 776
769 $tgw 777 $vb
778}
779
780sub skill_window {
781 my ($self) = @_;
782 $STATWIDS->{"_skill_tbl"} = new CFClient::UI::Table expand => 1;
770} 783}
771 784
772sub formsep($) { 785sub formsep($) {
773 scalar reverse join ",", unpack "(A3)*", reverse $_[0] * 1 786 scalar reverse join ",", unpack "(A3)*", reverse $_[0] * 1
774} 787}
834 depl => CS_STAT_RES_DEPLETE, 847 depl => CS_STAT_RES_DEPLETE,
835 deat => CS_STAT_RES_DEATH, 848 deat => CS_STAT_RES_DEATH,
836 holyw => CS_STAT_RES_HOLYWORD, 849 holyw => CS_STAT_RES_HOLYWORD,
837 blind => CS_STAT_RES_BLIND, 850 blind => CS_STAT_RES_BLIND,
838 ); 851 );
852
853 if ($::CONN && !$STATWIDS->{_skill_tbl_init}) {
854 my $sktbl = $STATWIDS->{_skill_tbl};
855 $sktbl->clear;
856
857 $sktbl->add (0, 0, new CFClient::UI::Label text => "Exp.", align => 1);
858 $sktbl->add (1, 0, new CFClient::UI::Label text => "Level", align => 1);
859 $sktbl->add (2, 0, new CFClient::UI::Label text => "Skillname");
860
861 my @skills;
862
863 for (my $i = CS_STAT_SKILLINFO; $i < CS_STAT_SKILLINFO+CS_NUM_SKILLS; $i++) {
864 push @skills, [$i, $::CONN->{skill_info}{$i}];
865 }
866
867 my $y = 1;
868 for (sort { $a->[1] cmp $b->[1] } @skills) {
869 my ($idx, $name) = @$_;
870
871 unless (defined $STATWIDS->{"sk_xp_$idx"} || !$::CONN->{skill_info}{$idx}) {
872 $sktbl->add (0, $y, $STATWIDS->{"sk_xp_$idx"} = new CFClient::UI::Label text => "0", align => 1);
873 $sktbl->add (1, $y, $STATWIDS->{"sk_lvl_$idx"} = new CFClient::UI::Label text => "0", align => 1);
874 $sktbl->add (2, $y++, new CFClient::UI::Label text => $name);
875 }
876 }
877
878 $STATWIDS->{_skill_tbl_init} = 1;
879 }
880
881 for (my $i = CS_STAT_SKILLINFO; $i < CS_STAT_SKILLINFO+CS_NUM_SKILLS; $i++) {
882 if (exists $stats->{$i}) {
883 $STATWIDS->{"sk_xp_$i"}->set_text (formsep $stats->{$i}->[1])
884 if $STATWIDS->{"sk_xp_$i"};
885 $STATWIDS->{"sk_lvl_$i"}->set_text (sprintf "%d", $stats->{$i}->[0])
886 if $STATWIDS->{"sk_lvl_$i"};
887 }
888 }
839 889
840 $STATWIDS->{"res_$_"}->set_text (sprintf "%d%", $stats->{$tbl{$_}}) 890 $STATWIDS->{"res_$_"}->set_text (sprintf "%d%", $stats->{$tbl{$_}})
841 for keys %tbl; 891 for keys %tbl;
842} 892}
843 893
1092sub message_window { 1142sub message_window {
1093 my $window = new CFClient::UI::FancyFrame 1143 my $window = new CFClient::UI::FancyFrame
1094 name => "message_window", 1144 name => "message_window",
1095 title => "Messages", 1145 title => "Messages",
1096 border_bg => [1, 1, 1, 1], 1146 border_bg => [1, 1, 1, 1],
1097 bg => [0, 0, 0, 0.75],
1098 x => "max", 1147 x => "max",
1099 y => 0, 1148 y => 0,
1100 force_w => $::WIDTH * 0.4, 1149 force_w => $::WIDTH * 0.4,
1101 force_h => $::HEIGHT * 0.5, 1150 force_h => $::HEIGHT * 0.5,
1102 child => (my $vbox = new CFClient::UI::VBox), 1151 child => (my $vbox = new CFClient::UI::VBox),
1188sub autopickup_setup { 1237sub autopickup_setup {
1189 my $table = new CFClient::UI::Table; 1238 my $table = new CFClient::UI::Table;
1190 1239
1191 for ( 1240 for (
1192 ["General", 0, 0, 1241 ["General", 0, 0,
1193 ["Enable autopickup" => PICKUP_NEWMODE], 1242 ["Enable autopickup" => PICKUP_NEWMODE, \$PICKUP_ENABLE],
1194 ["Inhibit autopickup" => PICKUP_INHIBIT], 1243 ["Inhibit autopickup" => PICKUP_INHIBIT],
1195 ["Stop before pickup" => PICKUP_STOP], 1244 ["Stop before pickup" => PICKUP_STOP],
1196 ["Debug autopickup" => PICKUP_DEBUG], 1245 ["Debug autopickup" => PICKUP_DEBUG],
1197 ], 1246 ],
1198 ["Weapons", 0, 6, 1247 ["Weapons", 0, 6,
1235 for (@bits) { 1284 for (@bits) {
1236 ++$y; 1285 ++$y;
1237 1286
1238 my $mask = $_->[1]; 1287 my $mask = $_->[1];
1239 $table->add ($x , $y, new CFClient::UI::Label text => $_->[0], align => 1, expand => 1); 1288 $table->add ($x , $y, new CFClient::UI::Label text => $_->[0], align => 1, expand => 1);
1240 $table->add ($x+1, $y, new CFClient::UI::CheckBox 1289 $table->add ($x+1, $y, my $checkbox = new CFClient::UI::CheckBox
1241 state => $CFG->{pickup} & $mask, 1290 state => $::CFG->{pickup} & $mask,
1242 on_changed => sub { 1291 on_changed => sub {
1243 my ($box, $value) = @_; 1292 my ($box, $value) = @_;
1244 1293
1245 if ($value) { 1294 if ($value) {
1246 $::CFG->{pickup} |= $mask; 1295 $::CFG->{pickup} |= $mask;
1251 $::CONN->send_command ("pickup $::CFG->{pickup}") 1300 $::CONN->send_command ("pickup $::CFG->{pickup}")
1252 if defined $::CONN; 1301 if defined $::CONN;
1253 1302
1254 0 1303 0
1255 }); 1304 });
1305
1306 ${$_->[2]} = $checkbox if $_->[2];
1256 } 1307 }
1257 } 1308 }
1258 1309
1259 $table->add (2, 18, new CFClient::UI::ValSlider 1310 $table->add (2, 18, new CFClient::UI::ValSlider
1260 range => [0, 0, 16, 1, 1], 1311 range => [$::CFG->{pickup} & 0xF, 0, 16, 1, 1],
1312 template => ">= 99",
1261 to_value => sub { ">= " . 5 * $_[0] }, 1313 to_value => sub { ">= " . 5 * $_[0] },
1262 on_changed => sub { 1314 on_changed => sub {
1263 my ($slider, $value) = @_; 1315 my ($slider, $value) = @_;
1264 1316
1265 $::CFG->{pickup} &= ~0x7; 1317 $::CFG->{pickup} &= ~0xF;
1266 $::CFG->{pickup} |= int $value 1318 $::CFG->{pickup} |= int $value
1267 if $value; 1319 if $value;
1268 1; 1320 1;
1269 }); 1321 });
1322
1270 $table->add (3, 18, new CFClient::UI::Button 1323 $table->add (3, 18, new CFClient::UI::Button
1271 text => "set", 1324 text => "set",
1272 on_activate => sub { 1325 on_activate => sub {
1273 $::CONN->send_command ("pickup $::CFG->{pickup}") 1326 $::CONN->send_command ("pickup $::CFG->{pickup}")
1274 if defined $::CONN; 1327 if defined $::CONN;
1276 }); 1329 });
1277 1330
1278 $table 1331 $table
1279} 1332}
1280 1333
1281sub inventory_window { 1334sub inventory_widget {
1335 my $hb = new CFClient::UI::HBox homogeneous => 1;
1336
1337 $hb->add (my $vb1 = new CFClient::UI::VBox);
1338 $vb1->add (new CFClient::UI::Label align => 0, text => "Player");
1339 $vb1->add ($INV = new CFClient::UI::Inventory);
1340
1341 $hb->add (my $vb2 = new CFClient::UI::VBox);
1342
1343 $vb2->add ($INV_RIGHT_HB = new CFClient::UI::HBox);
1344
1345 $vb2->add ($INVR = new CFClient::UI::Inventory);
1346
1347 # XXX: Call after $INVR = ... because set_opencont sets the items
1348 CFClient::Protocol::set_opencont ($::CONN, 0, "Floor");
1349
1350 $hb
1351}
1352
1353sub toggle_player_page {
1354 my ($widget) = @_;
1355
1356 if ($PL_WINDOW->{visible} && $PL_NOTEBOOK->get_current_page == $widget) {
1357 $PL_WINDOW->hide;
1358 } else {
1359 $PL_NOTEBOOK->set_current_page ($widget);
1360 $PL_WINDOW->show;
1361 }
1362}
1363
1364sub player_window {
1282 my $invwin = $INV_WINDOW = new CFClient::UI::FancyFrame 1365 my $plwin = $PL_WINDOW = new CFClient::UI::FancyFrame
1283 x => "center", 1366 x => "center",
1284 y => "center", 1367 y => "center",
1285 force_w => $WIDTH * 9/10, 1368 force_w => $WIDTH * 9/10,
1286 force_h => $HEIGHT * 9/10, 1369 force_h => $HEIGHT * 9/10,
1287 title => "Inventory", 1370 title => "Player",
1288 name => "inventory_window", 1371 name => "playerbook",
1289 has_close_button => 1, 1372 has_close_button => 1
1290 ; 1373 ;
1291 1374
1292 $invwin->add (my $hb = new CFClient::UI::HBox homogeneous => 1); 1375 my $ntb =
1376 $PL_NOTEBOOK =
1377 new CFClient::UI::Notebook
1378 expand => 1,
1379 debug => 1,
1380 filter => (new CFClient::UI::ScrolledWindow expand => 1, scroll_y => 1),
1381 ;
1293 1382
1294 $hb->add (my $vb1 = new CFClient::UI::VBox); 1383 $ntb->add (
1295 $vb1->add (new CFClient::UI::Label align => 0, text => "Player"); 1384 "Stats" => $STATS_PAGE = stats_window,
1296 $vb1->add ($INV = new CFClient::UI::Inventory expand => 1); 1385 "Shows statistics, where all your Stats and Resistances are shown."
1386 );
1387 $ntb->add (
1388 "Skills" => $STATS_PAGE = skill_window,
1389 "Shows all your Skills."
1390 );
1391 $ntb->add (
1392 Spellbook => $SPELL_PAGE = new CFClient::UI::SpellList,
1393 "Displays all spells you have and lets you edit keyboard shortcuts for them."
1394 );
1395 $ntb->add (
1396 Inventory => $INVENTORY_PAGE = inventory_widget,
1397 "Toggles the inventory window, where you can manage your loot (or treasures :). "
1398 . "You can also hit the <b>Tab</b>-key to show/hide the Inventory."
1399 );
1297 1400
1298 $hb->add (my $vb2 = new CFClient::UI::VBox); 1401 $ntb->set_current_page ($INVENTORY_PAGE);
1299 1402
1300 $vb2->add ($INV_RIGHT_HB = new CFClient::UI::HBox); 1403 $plwin->add ($ntb);
1301 1404 $plwin
1302 $vb2->add ($INVR = new CFClient::UI::Inventory expand => 1);
1303
1304 # XXX: Call after $INVR = ... because set_opencont sets the items
1305 CFClient::Protocol::set_opencont ($::CONN, 0, "Floor");
1306
1307 $invwin
1308}
1309
1310sub spell_setup {
1311 new CFClient::UI::SpellList
1312} 1405}
1313 1406
1314sub update_bindings { 1407sub update_bindings {
1315 $BIND_UPD_CB->() if $BIND_UPD_CB; 1408 $BIND_UPD_CB->() if $BIND_UPD_CB;
1316} 1409}
1326 for my $sym (keys %{$::CFG->{profile}{default}{bindings}{$mod}}) { 1419 for my $sym (keys %{$::CFG->{profile}{default}{bindings}{$mod}}) {
1327 my $cmds = $::CFG->{profile}{default}{bindings}{$mod}{$sym}; 1420 my $cmds = $::CFG->{profile}{default}{bindings}{$mod}{$sym};
1328 next unless ref $cmds eq 'ARRAY' and @$cmds > 0; 1421 next unless ref $cmds eq 'ARRAY' and @$cmds > 0;
1329 1422
1330 my $lbl = join "; ", @$cmds; 1423 my $lbl = join "; ", @$cmds;
1331 my $nam = CFClient::Binder::keycombo_to_name ($mod, $sym); 1424 my $nam = CFClient::BindingEditor::keycombo_to_name ($mod, $sym);
1332 $binding_list->add (my $hb = new CFClient::UI::HBox); 1425 $binding_list->add (my $hb = new CFClient::UI::HBox);
1333 $hb->add (new CFClient::UI::Button 1426 $hb->add (new CFClient::UI::Button
1334 text => "delete", 1427 text => "delete",
1335 tooltip => "Deletes the binding", 1428 tooltip => "Deletes the binding",
1336 on_activate => sub { 1429 on_activate => sub {
1429 y => 'center', 1522 y => 'center',
1430 z => 2, 1523 z => 2,
1431 name => 'doc_browser', 1524 name => 'doc_browser',
1432 force_w => int $WIDTH * 7/8, 1525 force_w => int $WIDTH * 7/8,
1433 force_h => int $HEIGHT * 7/8, 1526 force_h => int $HEIGHT * 7/8,
1434 title => "Documentation"; 1527 title => "Help Browser",
1528 has_close_button => 1;
1435 1529
1436 $win->add (my $vbox = new CFClient::UI::VBox); 1530 $win->add (my $vbox = new CFClient::UI::VBox);
1437 1531
1438 $vbox->add (my $buttons = new CFClient::UI::HBox); 1532 $vbox->add (my $buttons = new CFClient::UI::HBox);
1439 $vbox->add (my $viewer = new CFClient::UI::TextScroller 1533 $vbox->add (my $viewer = new CFClient::UI::TextScroller
1603 . "There is a shortcut for making bindings: <b>Control-Insert</b> opens the binding editor " 1697 . "There is a shortcut for making bindings: <b>Control-Insert</b> opens the binding editor "
1604 . "with nothing set and the recording started. After doing the actions you " 1698 . "with nothing set and the recording started. After doing the actions you "
1605 . "want to record press <b>Insert</b> and you will be asked to press a key-combo. " 1699 . "want to record press <b>Insert</b> and you will be asked to press a key-combo. "
1606 . "After pressing the combo the binding will be saved automatically and the " 1700 . "After pressing the combo the binding will be saved automatically and the "
1607 . "binding editor closes"); 1701 . "binding editor closes");
1608 $SETUP_NOTEBOOK->add (Spells => $SETUP_SPELLS = spell_setup,
1609 "Displays all spells you have and lets you edit keyboard shortcuts for them.");
1610 $SETUP_NOTEBOOK->add (Debug => debug_setup, 1702 $SETUP_NOTEBOOK->add (Debug => debug_setup,
1611 "Some debuggin' options. Do not ask."); 1703 "Some debuggin' options. Do not ask.");
1612 1704
1613 $BUTTONBAR = new CFClient::UI::Buttonbar x => 0, y => 0, z => 200; # put on top 1705 $BUTTONBAR = new CFClient::UI::Buttonbar x => 0, y => 0, z => 200; # put on top
1614 1706
1618 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Message Window", other => $MESSAGE_WINDOW = message_window, 1710 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Message Window", other => $MESSAGE_WINDOW = message_window,
1619 tooltip => "Toggles the server message log, where the client collects <i>all</i> messages from the server."); 1711 tooltip => "Toggles the server message log, where the client collects <i>all</i> messages from the server.");
1620 1712
1621 make_gauge_window->show; # XXX: this has to be set before make_stats_window as make_stats_window calls update_stats_window which updated the gauges also X-D 1713 make_gauge_window->show; # XXX: this has to be set before make_stats_window as make_stats_window calls update_stats_window which updated the gauges also X-D
1622 1714
1623 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Stats Window", other => $STATS_WINDOW = stats_window,
1624 tooltip => "Toggles the statistics window, where all your Stats and Resistances are being displayed at all times.");
1625 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Inventory", other => inventory_window, 1715 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Playerbook", other => player_window,
1626 tooltip => "Toggles the inventory window, where you can manage your loot (or treasures :). " 1716 tooltip => "Toggles the player view, where you can manage Inventory, Spells, Skills and see your Stats.");
1627 . "You can also hit the <b>Tab</b>-key to show/hide the Inventory.");
1628 1717
1629 $BUTTONBAR->add (new CFClient::UI::Button 1718 $BUTTONBAR->add (new CFClient::UI::Button
1630 text => "Save Config", 1719 text => "Save Config",
1631 tooltip => "Saves the options chosen in the client setting, server settings and the window layout to be restored on later runs.", 1720 tooltip => "Saves the options chosen in the client setting, server settings and the window layout to be restored on later runs.",
1632 on_activate => sub { 1721 on_activate => sub {
1635 status "Configuration Saved"; 1724 status "Configuration Saved";
1636 0 1725 0
1637 }, 1726 },
1638 ); 1727 );
1639 1728
1640 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => help_window, 1729 $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => $HELP_WINDOW = help_window,
1641 tooltip => "View Documentation"); 1730 tooltip => "View Documentation");
1642 1731
1643 $BUTTONBAR->add (new CFClient::UI::Button 1732 $BUTTONBAR->add (new CFClient::UI::Button
1644 text => "Quit", 1733 text => "Quit",
1645 tooltip => "Terminates the program", 1734 tooltip => "Terminates the program",
1851# printf "active %x %x\n", $SDL_EV->active_gain, $SDL_EV->active_state;#d# 1940# printf "active %x %x\n", $SDL_EV->active_gain, $SDL_EV->active_state;#d#
1852 }, 1941 },
1853 CFClient::SDL_KEYDOWN => sub { 1942 CFClient::SDL_KEYDOWN => sub {
1854 if ($_[0]{mod} & CFClient::KMOD_ALT && $_[0]{sym} == 13) { 1943 if ($_[0]{mod} & CFClient::KMOD_ALT && $_[0]{sym} == 13) {
1855 # alt-enter 1944 # alt-enter
1945 $FULLSCREEN_ENABLE->toggle;
1856 video_shutdown; 1946 video_shutdown;
1857 $CFG->{fullscreen} = !$CFG->{fullscreen};
1858 video_init; 1947 video_init;
1859 } else { 1948 } else {
1860 CFClient::UI::feed_sdl_key_down_event ($_[0]); 1949 CFClient::UI::feed_sdl_key_down_event ($_[0]);
1861 } 1950 }
1862 }, 1951 },

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines