--- deliantra/Deliantra-Client/bin/cfplus 2006/06/28 10:37:19 1.82
+++ deliantra/Deliantra-Client/bin/cfplus 2006/07/10 06:59:14 1.90
@@ -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;
@@ -112,7 +119,6 @@
our $STATUSBOX;
our $DEBUG_STATUS;
-our $INV_WINDOW;
our $INV;
our $INVR;
our $INV_RIGHT_HB;
@@ -223,7 +229,7 @@
return;
}
- $STATS_WINDOW->show;
+ $STATS_PAGE->show;
$MESSAGE_WINDOW->hide;
unshift @dialog, new CFClient::UI::Label
@@ -273,7 +279,7 @@
text => "Accept",
on_activate => sub {
$conn->send ("reply n");
- $STATS_WINDOW->hide;
+ $STATS_PAGE->hide;
destroy_query_dialog $conn;
0
},
@@ -375,8 +381,8 @@
$LOGIN_BUTTON->set_text ("Login");
$SETUP_NOTEBOOK->set_current_page ($SETUP_SERVER);
$SETUP_DIALOG->show;
- $INV_WINDOW->hide;
- $SETUP_SPELLS->clear_spells;
+ $PL_WINDOW->hide;
+ $SPELL_PAGE->clear_spells;
return unless $CONN;
@@ -471,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],
@@ -561,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});
@@ -655,14 +643,8 @@
}
sub stats_window {
- my $tgw = new CFClient::UI::FancyFrame
- y => $HEIGHT * (2/8),
- x => "max",
- title => "Stats",
- name => "stats_window",
- has_close_button => 1;
+ my $vb = new CFClient::UI::VBox;
- $tgw->add (new CFClient::UI::Window child => 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,
tooltip => "Your name and title. You can change your title by using the title command, if supported by the server.");
@@ -763,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($) {
@@ -837,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;
}
@@ -1190,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],
@@ -1237,8 +1258,8 @@
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
- state => $CFG->{pickup} & $mask,
+ $table->add ($x+1, $y, my $checkbox = new CFClient::UI::CheckBox
+ state => $::CFG->{pickup} & $mask,
on_changed => sub {
my ($box, $value) = @_;
@@ -1253,20 +1274,24 @@
0
});
+
+ ${$_->[2]} = $checkbox if $_->[2];
}
}
$table->add (2, 18, new CFClient::UI::ValSlider
- range => [0, 0, 16, 1, 1],
+ range => [$::CFG->{pickup} & 0xF, 0, 16, 1, 1],
+ template => ">= 99",
to_value => sub { ">= " . 5 * $_[0] },
on_changed => sub {
my ($slider, $value) = @_;
- $::CFG->{pickup} &= ~0x7;
+ $::CFG->{pickup} &= ~0xF;
$::CFG->{pickup} |= int $value
if $value;
1;
});
+
$table->add (3, 18, new CFClient::UI::Button
text => "set",
on_activate => sub {
@@ -1278,37 +1303,73 @@
$table
}
-sub inventory_window {
- my $invwin = $INV_WINDOW = new CFClient::UI::FancyFrame
- x => "center",
- y => "center",
- force_w => $WIDTH * 9/10,
- force_h => $HEIGHT * 9/10,
- title => "Inventory",
- name => "inventory_window",
- has_close_button => 1,
- ;
-
- $invwin->add (my $hb = new CFClient::UI::HBox homogeneous => 1);
+sub inventory_widget {
+ my $hb = new CFClient::UI::HBox homogeneous => 1;
$hb->add (my $vb1 = new CFClient::UI::VBox);
$vb1->add (new CFClient::UI::Label align => 0, text => "Player");
- $vb1->add ($INV = new CFClient::UI::Inventory expand => 1);
+ $vb1->add ($INV = new CFClient::UI::Inventory);
$hb->add (my $vb2 = new CFClient::UI::VBox);
$vb2->add ($INV_RIGHT_HB = new CFClient::UI::HBox);
- $vb2->add ($INVR = new CFClient::UI::Inventory expand => 1);
+ $vb2->add ($INVR = new CFClient::UI::Inventory);
# XXX: Call after $INVR = ... because set_opencont sets the items
CFClient::Protocol::set_opencont ($::CONN, 0, "Floor");
- $invwin
+ $hb
}
-sub spell_setup {
- new CFClient::UI::SpellList
+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",
+ y => "center",
+ force_w => $WIDTH * 9/10,
+ force_h => $HEIGHT * 9/10,
+ title => "Player",
+ name => "playerbook",
+ has_close_button => 1
+ ;
+
+ my $ntb =
+ $PL_NOTEBOOK =
+ new CFClient::UI::Notebook
+ expand => 1,
+ debug => 1,
+ filter => (new CFClient::UI::ScrolledWindow expand => 1, scroll_y => 1),
+ ;
+
+ $ntb->add (
+ "Stats & Skills" => $STATS_PAGE = stats_window,
+ "Shows statistics and skill window, where all your Stats, Resistances and Skills are shown."
+ );
+ $ntb->add (
+ 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
}
sub update_bindings {
@@ -1328,7 +1389,7 @@
next unless ref $cmds eq 'ARRAY' and @$cmds > 0;
my $lbl = join "; ", @$cmds;
- my $nam = CFClient::Binder::keycombo_to_name ($mod, $sym);
+ my $nam = CFClient::BindingEditor::keycombo_to_name ($mod, $sym);
$binding_list->add (my $hb = new CFClient::UI::HBox);
$hb->add (new CFClient::UI::Button
text => "delete",
@@ -1431,7 +1492,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);
@@ -1605,8 +1667,6 @@
. "want to record press Insert and you will be asked to press a key-combo. "
. "After pressing the combo the binding will be saved automatically and the "
. "binding editor closes");
- $SETUP_NOTEBOOK->add (Spells => $SETUP_SPELLS = spell_setup,
- "Displays all spells you have and lets you edit keyboard shortcuts for them.");
$SETUP_NOTEBOOK->add (Debug => debug_setup,
"Some debuggin' options. Do not ask.");
@@ -1620,11 +1680,8 @@
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 => "Stats Window", other => $STATS_WINDOW = stats_window,
- tooltip => "Toggles the statistics window, where all your Stats and Resistances are being displayed at all times.");
- $BUTTONBAR->add (new CFClient::UI::Flopper text => "Inventory", other => inventory_window,
- tooltip => "Toggles the inventory window, where you can manage your loot (or treasures :). "
- . "You can also hit the Tab-key to show/hide the Inventory.");
+ $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
text => "Save Config",
@@ -1637,7 +1694,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