--- deliantra/Deliantra-Client/bin/pclient 2006/04/24 02:41:48 1.169 +++ deliantra/Deliantra-Client/bin/pclient 2006/04/24 03:19:42 1.170 @@ -1124,11 +1124,71 @@ # warn "sound $x,$y,$soundnum,$type\n";#d# } +my $LAST_QUERY; # server is stupid, stupid, stupid + sub conn::query { my ($self, $flags, $prompt) = @_; - #TODO, display dialog with relevant information - warn "<<<>>\n";#d# + $prompt = $LAST_QUERY unless length $prompt; + $LAST_QUERY = $prompt; + + my $dialog = new CFClient::UI::FancyFrame + title => "Query", + child => my $vbox = new CFClient::UI::VBox; + + $vbox->add (new CFClient::UI::Label + max_w => $::WIDTH * 0.4, + text => $prompt); + + if ($flags & Crossfire::Protocol::CS_QUERY_YESNO) { + $vbox->add (my $hbox = new CFClient::HBox); + $hbox->add (new CFClient::Button + text => "No", + connect_activate => sub { + $self->send ("reply n"); + $dialog->destroy; + $MAPWIDGET->focus_in; + } + ); + $hbox->add (new CFClient::Button + text => "Yes", + connect_activate => sub { + $self->send ("reply y"); + $dialog->destroy; + $MAPWIDGET->focus_in; + }, + ); + + $dialog->focus_in; + + } elsif ($flags & Crossfire::Protocol::CS_QUERY_SINGLECHAR) { + $dialog->{tooltip} = "Press a key (click on the entry to make sure it has keyboard focus)"; + $vbox->add (my $entry = new CFClient::UI::Entry + connect_changed => sub { + $self->send ("reply $_[1]"); + $dialog->destroy; + $MAPWIDGET->focus_in; + }, + ); + + $entry->focus_in; + + } else { + $dialog->{tooltip} = "Enter the reply and press return (click on the entry to make sure it has keyboard focus)"; + + $vbox->add (my $entry = new CFClient::UI::Entry + $flags & Crossfire::Protocol::CS_QUERY_HIDEINPUT ? (hiddenchar => "*") : (), + connect_activate => sub { + $self->send ("reply $_[1]"); + $dialog->destroy; + $MAPWIDGET->focus_in; + }, + ); + + $entry->focus_in; + } + + $dialog->show; } sub conn::drawinfo {