--- deliantra/Deliantra-Client/bin/cfplus 2006/08/13 02:43:22 1.106 +++ deliantra/Deliantra-Client/bin/cfplus 2006/08/14 03:41:29 1.115 @@ -157,7 +157,7 @@ sub server_query { my ($conn, $flags, $prompt) = @_; - $conn->{query_dialog} = my $dialog = new CFPlus::UI::FancyFrame + $conn->{query_dialog} = my $dialog = new CFPlus::UI::Toplevel x => "center", y => "center", title => "Server Query", @@ -192,7 +192,7 @@ $dialog->grab_focus; } elsif ($flags & CS_QUERY_SINGLECHAR) { - $dialog->{tooltip} = "Press a key (click on the entry to make sure it has keyboard focus)"; + $dialog->{tooltip} = "#charcreation_focus"; if ($prompt =~ /Now choose a character|Press any key for the next race/i) { $MESSAGE_WINDOW->show; @@ -224,14 +224,7 @@ unshift @dialog, new CFPlus::UI::Label max_w => $::WIDTH * 0.4, ellipsise => 0, - markup => - "Character Creation: Race\n\n" - . "Look at the Messages window to see a description of this race " - . "and the center of the screen to see how this race looks like " - . "(below this dialog window: you may need to move the dialog away and " - . "click into the display area to make it visible).\n\n" - . "You can look at another race, or accept this race (you will cycle back to " - . "this race eventually, so you can take your time making this important choice." + markup => (CFPlus::Pod::section_label ui => "chargen_race"), ; } elsif ($prompt =~ /roll new stats/) { @@ -315,19 +308,14 @@ expand => 1, can_events => 1, can_hover => 1, - tooltip => $CFPlus::STAT_TOOLTIP{$name}, + tooltip => "#stat_$name", ); } unshift @dialog, new CFPlus::UI::Label max_w => $::WIDTH * 0.4, ellipsise => 0, - markup => - "Character Creation: Stats\n\n" - . "Stats are a very important aspect of your character. You can use the tooltips to learn what each Stat governs.\n\n" - . "The stats generated by the server are always sorted from Str (highest) to Cha (lowest). " - . "They will be modified later by both the race and the class you choose.\n\n" - . "You can create another set of stats, swap two stat values with each other or accept the stats as shown below and continue.\n" + markup => (CFPlus::Pod::section_label ui => "chargen_stats"), ; } @@ -624,19 +612,13 @@ ], ); - $hb->add (my $hg = new CFPlus::UI::Gauge type => 'hp', - tooltip => "Health points. Measures of how much damage you can take before dying. Hit points are determined from your level and are influenced by the value of your Con. Hp value may range between 1 to beyond 500 and higher values indicate a greater ability to withstand punishment."); - $hb->add (my $mg = new CFPlus::UI::Gauge type => 'mana', - tooltip => "Spell points. Measures of how much \"fuel\" you have for casting spells and incantations. Mana is calculated from your level and your Pow. Mana values can range between 1 to beyond 500 (glowing crystals can increase the current spell points beyond your normal maximum). Higher values indicate greater amounts of mana."); - $hb->add (my $gg = new CFPlus::UI::Gauge type => 'grace', - tooltip => "Grace points - how favored you are by your god. In game terms, how much divine magic you can cast. Your level, Wis and Pow effect what the value of grace is. Prayong on an altar of your god can increase this value beyond your normal maximum. Grace can take on large positive and negative values. Positive values indicate favor by the gods."); - $hb->add (my $fg = new CFPlus::UI::Gauge type => 'food', - tooltip => "Food. Ranges between 0 (starving) and 999 (satiated). At a value of 0 the character begins to die. Some magic can speed up or slow down the character digestion. Healing wounds will speed up digestion too."); - - $vbox->add (my $exp = new CFPlus::UI::Label valign => 0, align => 1, can_hover => 1, can_events => 1, - tooltip => "Experience points and overall level - experience is increased as a reward for appropriate action (such as killing monsters) and may decrease as a result of a magical attack or dying. Level is directly derived from the experience value. As the level of the character increases, the character becomes able to succeed at more difficult tasks. A character's level starts at a value of 0 and may range up beyond 100."); - $vbox->add (my $rng = new CFPlus::UI::Label valign => 0, align => 1, can_hover => 1, can_events => 1, - tooltip => "Ranged attack - how you attack when you press shift-cursor (spell, skill, weapon etc.)"); + $hb->add (my $hg = new CFPlus::UI::Gauge type => 'hp', tooltip => "#stat_health"); + $hb->add (my $mg = new CFPlus::UI::Gauge type => 'mana', tooltip => "#stat_mana"); + $hb->add (my $gg = new CFPlus::UI::Gauge type => 'grace', tooltip => "#stat_grace"); + $hb->add (my $fg = new CFPlus::UI::Gauge type => 'food', tooltip => "#stat_food"); + + $vbox->add (my $exp = new CFPlus::UI::Label valign => 0, align => 1, can_hover => 1, can_events => 1, tooltip => "#stat_exp"); + $vbox->add (my $rng = new CFPlus::UI::Label valign => 0, align => 1, can_hover => 1, can_events => 1, tooltip => "#stat_ranged"); $GAUGES = { exp => $exp, win => $win, range => $rng, @@ -683,14 +665,19 @@ ); $r->add (my $vb = new CFPlus::UI::VBox); - $vb->add ($STATWIDS->{title} = new CFPlus::UI::Label valign => 0, align => -1, text => "Title:", expand => 1, + $vb->add (new CFPlus::UI::FancyFrame + label => "Player", + child => (my $pi = new CFPlus::UI::VBox), + ); + + $pi->add ($STATWIDS->{title} = new CFPlus::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."); - $vb->add ($STATWIDS->{map} = new CFPlus::UI::Label valign => 0, align => -1, text => "Map:", expand => 1, + $pi->add ($STATWIDS->{map} = new CFPlus::UI::Label valign => 0, align => -1, text => "Map:", expand => 1, can_hover => 1, can_events => 1, tooltip => "The map you are currently on (if supported by the server)."); - $vb->add (my $hb0 = new CFPlus::UI::HBox); + $pi->add (my $hb0 = new CFPlus::UI::HBox); $hb0->add ($STATWIDS->{weight} = new CFPlus::UI::Label valign => 0, align => -1, text => "Weight:", expand => 1, can_hover => 1, can_events => 1, tooltip => "The weight of the player including all inventory items."); @@ -698,7 +685,10 @@ can_hover => 1, can_events => 1, tooltip => "The weight limit: you cannot carry more than this."); - $vb->add (my $hb = new CFPlus::UI::HBox expand => 1); + $vb->add (new CFPlus::UI::FancyFrame + label => "Primary/Secondary Statistics", + child => (my $hb = new CFPlus::UI::HBox expand => 1), + ); $hb->add (my $tbl = new CFPlus::UI::Table expand => 1); my $color2 = [1, 1, 0]; @@ -723,13 +713,16 @@ $tbl->add ($col , $row, $STATWIDS->{$id} = new CFPlus::UI::Label font => $FONT_FIXED, can_hover => 1, can_events => 1, valign => 0, - align => +1, template => $template, tooltip => $CFPlus::STAT_TOOLTIP{$label}); + align => +1, template => $template, tooltip => "#stat_$label"); $tbl->add ($col + 1, $row, $STATWIDS->{"$id\_lbl"} = new CFPlus::UI::Label font => $FONT_FIXED, can_hover => 1, can_events => 1, fg => $color2, valign => 0, - align => -1, text => $label, tooltip => $CFPlus::STAT_TOOLTIP{$label}); + align => -1, text => $label, tooltip => "#stat_$label"); } - $vb->add (my $tbl2 = new CFPlus::UI::Table expand => 1); + $vb->add (new CFPlus::UI::FancyFrame + label => "Resistancies", + child => (my $tbl2 = new CFPlus::UI::Table expand => 1), + ); my $row = 0; my $col = 0; @@ -933,7 +926,7 @@ my $table = new CFPlus::UI::Table; $vbox->add (new CFPlus::UI::ScrolledWindow expand => 1, child => $table); - my $dialog = new CFPlus::UI::FancyFrame + my $dialog = new CFPlus::UI::Toplevel title => "Server List", name => 'metaserver_dialog', x => 'center', @@ -955,7 +948,10 @@ sub server_setup { my $vbox = new CFPlus::UI::VBox; - $vbox->add (my $table = new CFPlus::UI::Table expand => 1, col_expand => [0, 1]); + $vbox->add (new CFPlus::UI::FancyFrame + label => "Connection Settings", + child => (my $table = new CFPlus::UI::Table expand => 1, col_expand => [0, 1]), + ); $table->add (0, 2, new CFPlus::UI::Label valign => 0, align => 1, text => "Host:Port"); { @@ -1060,20 +1056,16 @@ } ); - $vbox->add (new CFPlus::UI::Label - text => "Server Info", - fontsize => 1.2, - padding_y => 8, - fg => [1, 1, 0, 1], + $vbox->add (new CFPlus::UI::FancyFrame + label => "Server Info", + child => ($SERVER_INFO = new CFPlus::UI::Label ellipsise => 0), ); - $vbox->add ($SERVER_INFO = new CFPlus::UI::Label ellipsise => 0); - $vbox } sub message_window { - my $window = new CFPlus::UI::FancyFrame + my $window = new CFPlus::UI::Toplevel name => "message_window", title => "Messages", border_bg => [1, 1, 1, 1], @@ -1137,7 +1129,7 @@ sub open_string_query { my $cb = $_[1]; - my $dialog = new CFPlus::UI::FancyFrame + my $dialog = new CFPlus::UI::Toplevel x => "center", y => "center", z => 50, @@ -1156,7 +1148,7 @@ sub open_quit_dialog { unless ($QUIT_DIALOG) { - $QUIT_DIALOG = new CFPlus::UI::FancyFrame + $QUIT_DIALOG = new CFPlus::UI::Toplevel x => "center", y => "center", z => 50, @@ -1355,7 +1347,7 @@ } sub player_window { - my $plwin = $PL_WINDOW = new CFPlus::UI::FancyFrame + my $plwin = $PL_WINDOW = new CFPlus::UI::Toplevel x => "center", y => "center", force_w => $WIDTH * 9/10, @@ -1454,7 +1446,10 @@ }; my $vb = new CFPlus::UI::VBox; - $vb->add (my $hb = new CFPlus::UI::HBox); + $vb->add (new CFPlus::UI::FancyFrame + label => "Options", + child => (my $hb = new CFPlus::UI::HBox), + ); $hb->add (new CFPlus::UI::Label text => "only shift-up stops fire"); $hb->add (new CFPlus::UI::CheckBox expand => 1, @@ -1466,7 +1461,9 @@ 0 }); - $vb->add ($binding_list); + $vb->add (new CFPlus::UI::FancyFrame + label => "Bindings", + child => $binding_list); $vb->add (my $hb = new CFPlus::UI::HBox); $hb->add (new CFPlus::UI::Button @@ -1509,7 +1506,7 @@ } sub help_window { - my $win = new CFPlus::UI::FancyFrame + my $win = new CFPlus::UI::Toplevel x => 'center', y => 'center', z => 2, @@ -1521,38 +1518,80 @@ $win->add (my $vbox = new CFPlus::UI::VBox); - $vbox->add (my $buttons = new CFPlus::UI::HBox); + $vbox->add (new CFPlus::UI::FancyFrame + label => "Navigation", + child => (my $buttons = new CFPlus::UI::HBox), + ); $vbox->add (my $viewer = new CFPlus::UI::TextScroller - expand => 1, fontsize => 0.8, padding_x => 4); + expand => 1, fontsize => 0.8, padding_x => 4, padding_y => 4); - $buttons->add (new CFPlus::UI::Label text => "Choose a document to display: "); - $buttons->add (my $combo = new CFPlus::UI::Selector - value => undef, - options => [ - [intro => "Introduction"], - [manual => "Main Manual"], - [skill_help => "Skill Reference"], - [command_help => "Command Reference"], - [dmcommand_help => "DM Commands"], - [COPYING => "License Terms"], - ], - on_changed => sub { - my ($self, $pod) = @_; + my @history; + my @future; + my $curnode; - $viewer->clear; - $viewer->add_paragraph (CFPlus::Pod::section pod => $pod); - $viewer->set_offset (0); + my $load_node; $load_node = sub { + my ($node, $para) = @_; - 0 - }, - on_visibility_change => sub { - my ($self, $visible) = @_; - return unless $visible; - return if $self->{value}; - $self->set_value ("intro"); - 0 - }, - ); + $buttons->clear; + + if (@history) { + $buttons->add (new CFPlus::UI::Button + text => "⋘", + tooltip => "back to " . (CFPlus::asxml CFPlus::Pod::full_path $history[-1]) . "", + on_activate => sub { + unshift @future, [$curnode, $viewer->current_paragraph] if $curnode; + $load_node->(@{pop @history}); + }, + ); + } + + if (@future) { + $buttons->add (new CFPlus::UI::Button + text => "⋙", + tooltip => "forward to " . (CFPlus::asxml CFPlus::Pod::full_path $future[0]) . "", + on_activate => sub { + push @history, [$curnode, $viewer->current_paragraph]; + $load_node->(@{shift @future}); + }, + ); + } + + $buttons->add (new CFPlus::UI::Label text => " "); + + my @path = CFPlus::Pod::full_path_of $node; + pop @path; # drop current node + + for my $node (@path) { + $buttons->add (new CFPlus::UI::Button + text => $node->{kw}[0], + tooltip => "go to " . (CFPlus::asxml CFPlus::Pod::full_path $node) . "", + on_activate => sub { + push @history, [$curnode, $viewer->current_paragraph] if $curnode; @future = (); + $load_node->($node); + }, + ); + $buttons->add (new CFPlus::UI::Label text => "/"); + } + + $buttons->add (new CFPlus::UI::Label text => $node->{kw}[0], padding_x => 4, padding_y => 4); + + $curnode = $node; + + $viewer->clear; + $viewer->add_paragraph (CFPlus::Pod::as_paragraphs CFPlus::Pod::section_of $curnode); + $viewer->scroll_to ($para); + }; + + $load_node->(CFPlus::Pod::find pod => "mainpage"); + + $CFPlus::Pod::goto_document = sub { + my (@path) = @_; + + push @history, [$curnode, $viewer->current_paragraph] if $curnode; @future = (); + + $load_node->(CFPlus::Pod::find @path); + $win->show; + }; $win } @@ -1611,7 +1650,7 @@ child => $STATUSBOX, )->show; - CFPlus::UI::FancyFrame->new ( + CFPlus::UI::Toplevel->new ( title => "Map", name => "mapmap", x => 0, @@ -1649,7 +1688,7 @@ tooltip => "Server Log. This text viewer contains all the messages sent by the server.", ; - $SETUP_DIALOG = new CFPlus::UI::FancyFrame + $SETUP_DIALOG = new CFPlus::UI::Toplevel title => "Setup", name => "setup_dialog", x => 'center',