--- deliantra/Deliantra-Client/bin/cfplus 2006/07/02 19:32:56 1.85 +++ deliantra/Deliantra-Client/bin/cfplus 2006/07/09 21:11:48 1.89 @@ -87,15 +87,22 @@ our $LOGIN_BUTTON; our $QUIT_DIALOG; our $HOST_ENTRY; +our $PICKUP_ENABLE; our $SERVER_INFO; our $SETUP_DIALOG; our $SETUP_NOTEBOOK; our $SETUP_SERVER; our $SETUP_KEYBOARD; -our $SETUP_SPELLS; -our $STATS_WINDOW; +our $PL_NOTEBOOK; +our $PL_WINDOW; + +our $INVENTORY_PAGE; +our $STATS_PAGE; +our $SPELL_PAGE; + +our $HELP_WINDOW; our $MESSAGE_WINDOW; our $FLOORBOX; our $GAUGES; @@ -116,9 +123,6 @@ our $INVR; our $INV_RIGHT_HB; -our $PL_NOTEBOOK; -our $PL_WINDOW; - our $BIND_EDITOR; our $BIND_UPD_CB; @@ -225,7 +229,7 @@ return; } - $STATS_WINDOW->show; + $STATS_PAGE->show; $MESSAGE_WINDOW->hide; unshift @dialog, new CFClient::UI::Label @@ -275,7 +279,7 @@ text => "Accept", on_activate => sub { $conn->send ("reply n"); - $STATS_WINDOW->hide; + $STATS_PAGE->hide; destroy_query_dialog $conn; 0 }, @@ -378,7 +382,7 @@ $SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER); $SETUP_DIALOG->show; $PL_WINDOW->hide; - $SETUP_SPELLS->clear_spells; + $SPELL_PAGE->clear_spells; return unless $CONN; @@ -473,18 +477,6 @@ on_changed => sub { $LOGVIEW->set_fontsize ($CFG->{log_fontsize} = $_[1]); 0 }, ); - $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Stats Fontsize"); - - $table->add (1, $row++, new CFClient::UI::Slider - range => [$CFG->{stat_fontsize}, 0.5, 2, 0, 0.1], - tooltip => "The font size used by the statistics window only. Changes are instant.", - on_changed => sub { - $CFG->{stat_fontsize} = $_[1]; - &set_stats_window_fontsize; - 0 - } - ); - $table->add (0, $row, new CFClient::UI::Label valign => 0, align => 1, text => "Gauge fontsize"); $table->add (1, $row++, new CFClient::UI::Slider range => [$CFG->{gauge_fontsize}, 0.5, 2, 0, 0.1], @@ -563,12 +555,6 @@ $vbox } -sub set_stats_window_fontsize { - for (values %{$STATWIDS}) { - $_->set_fontsize ($::CFG->{stat_fontsize}); - } -} - sub set_gauge_window_fontsize { for (map { $GAUGES->{$_} } grep { $_ ne 'win' } keys %{$GAUGES}) { $_->set_fontsize ($::CFG->{gauge_fontsize}); @@ -657,9 +643,7 @@ } sub stats_window { - my $tgw = - new CFClient::UI::Window - child => my $vb = new CFClient::UI::VBox; + my $vb = new CFClient::UI::VBox; $vb->add ($STATWIDS->{title} = new CFClient::UI::Label valign => 0, align => -1, text => "Title:", expand => 1, can_hover => 1, can_events => 1, @@ -761,10 +745,12 @@ } } - &set_stats_window_fontsize; + $vb->add (my $tbl3 = new CFClient::UI::Table expand => 1); + $STATWIDS->{"_skill_tbl"} = $tbl3; + update_stats_window ({}); - $tgw + $vb } sub formsep($) { @@ -835,6 +821,43 @@ blind => CS_STAT_RES_BLIND, ); + if ($::CONN && !$STATWIDS->{_skill_tbl_init}) { + my $sktbl = $STATWIDS->{_skill_tbl}; + $sktbl->clear; + + $sktbl->add (0, 0, new CFClient::UI::Label text => "Exp.", align => 1); + $sktbl->add (1, 0, new CFClient::UI::Label text => "Level", align => 1); + $sktbl->add (2, 0, new CFClient::UI::Label text => "Skillname"); + + my @skills; + + for (my $i = CS_STAT_SKILLINFO; $i < CS_STAT_SKILLINFO+CS_NUM_SKILLS; $i++) { + push @skills, [$i, $::CONN->{skill_info}{$i}]; + } + + my $y = 1; + for (sort { $a->[1] cmp $b->[1] } @skills) { + my ($idx, $name) = @$_; + + unless (defined $STATWIDS->{"sk_xp_$idx"} || !$::CONN->{skill_info}{$idx}) { + $sktbl->add (0, $y, $STATWIDS->{"sk_xp_$idx"} = new CFClient::UI::Label text => "0", align => 1); + $sktbl->add (1, $y, $STATWIDS->{"sk_lvl_$idx"} = new CFClient::UI::Label text => "0", align => 1); + $sktbl->add (2, $y++, new CFClient::UI::Label text => $name); + } + } + + $STATWIDS->{_skill_tbl_init} = 1; + } + + for (my $i = CS_STAT_SKILLINFO; $i < CS_STAT_SKILLINFO+CS_NUM_SKILLS; $i++) { + if (exists $stats->{$i}) { + $STATWIDS->{"sk_xp_$i"}->set_text (formsep $stats->{$i}->[1]) + if $STATWIDS->{"sk_xp_$i"}; + $STATWIDS->{"sk_lvl_$i"}->set_text (sprintf "%d", $stats->{$i}->[0]) + if $STATWIDS->{"sk_lvl_$i"}; + } + } + $STATWIDS->{"res_$_"}->set_text (sprintf "%d%", $stats->{$tbl{$_}}) for keys %tbl; } @@ -1188,7 +1211,7 @@ for ( ["General", 0, 0, - ["Enable autopickup" => PICKUP_NEWMODE], + ["Enable autopickup" => PICKUP_NEWMODE, \$PICKUP_ENABLE], ["Inhibit autopickup" => PICKUP_INHIBIT], ["Stop before pickup" => PICKUP_STOP], ["Debug autopickup" => PICKUP_DEBUG], @@ -1235,7 +1258,7 @@ my $mask = $_->[1]; $table->add ($x , $y, new CFClient::UI::Label text => $_->[0], align => 1, expand => 1); - $table->add ($x+1, $y, new CFClient::UI::CheckBox + $table->add ($x+1, $y, my $checkbox = new CFClient::UI::CheckBox state => $::CFG->{pickup} & $mask, on_changed => sub { my ($box, $value) = @_; @@ -1251,6 +1274,8 @@ 0 }); + + ${$_->[2]} = $checkbox if $_->[2]; } } @@ -1297,6 +1322,17 @@ $hb } +sub toggle_player_page { + my ($widget) = @_; + + if ($PL_WINDOW->{visible} && $PL_NOTEBOOK->get_current_page == $widget) { + $PL_WINDOW->hide; + } else { + $PL_NOTEBOOK->set_current_page ($widget); + $PL_WINDOW->show; + } +} + sub player_window { my $plwin = $PL_WINDOW = new CFClient::UI::FancyFrame x => "center", @@ -1314,20 +1350,22 @@ debug => 1, filter => (new CFClient::UI::ScrolledWindow expand => 1, scroll_y => 1), ; - $ntb->add ( - Inventory => inventory_widget, - "Toggles the inventory window, where you can manage your loot (or treasures :). " - . "You can also hit the Tab-key to show/hide the Inventory." - ); $ntb->add ( - Stats => $STATS_WINDOW = stats_window, - "Toggles the statistics window, where all your Stats and Resistances are being displayed at all times." + "Stats & Skills" => $STATS_PAGE = stats_window, + "Shows statistics and skill window, where all your Stats, Resistances and Skills are shown." ); $ntb->add ( - Spells => $SETUP_SPELLS = new CFClient::UI::SpellList, + Spellbook => $SPELL_PAGE = new CFClient::UI::SpellList, "Displays all spells you have and lets you edit keyboard shortcuts for them." ); + $ntb->add ( + Inventory => $INVENTORY_PAGE = inventory_widget, + "Toggles the inventory window, where you can manage your loot (or treasures :). " + . "You can also hit the Tab-key to show/hide the Inventory." + ); + + $ntb->set_current_page ($INVENTORY_PAGE); $plwin->add ($ntb); $plwin @@ -1453,7 +1491,8 @@ name => 'doc_browser', force_w => int $WIDTH * 7/8, force_h => int $HEIGHT * 7/8, - title => "Documentation"; + title => "Help Browser", + has_close_button => 1; $win->add (my $vbox = new CFClient::UI::VBox); @@ -1640,7 +1679,7 @@ 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 - $BUTTONBAR->add (new CFClient::UI::Flopper text => "Player", other => player_window, + $BUTTONBAR->add (new CFClient::UI::Flopper text => "Playerbook", other => player_window, tooltip => "Toggles the player view, where you can manage Inventory, Spells, Skills and see your Stats."); $BUTTONBAR->add (new CFClient::UI::Button @@ -1654,7 +1693,7 @@ }, ); - $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => help_window, + $BUTTONBAR->add (new CFClient::UI::Flopper text => "Help!", other => $HELP_WINDOW = help_window, tooltip => "View Documentation"); $BUTTONBAR->add (new CFClient::UI::Button