--- deliantra/Deliantra-Client/bin/cfplus 2006/05/30 02:22:03 1.31 +++ deliantra/Deliantra-Client/bin/cfplus 2006/05/30 14:45:56 1.35 @@ -106,6 +106,7 @@ our $INV_RIGHT_HB; our $BIND_WINDOW; +our $BIND_EDITOR; sub status { $STATUSBOX->add (CFClient::UI::Label::escape $_[0], pri => -10, group => "status", timeout => 10, fg => [1, 1, 0, 1]); @@ -865,7 +866,10 @@ $input->set_text (''); if ($text =~ /^\/bind\s+(.*)$/) { - CFClient::Recorder::open_binding_dialog ([$1]); + CFClient::Binder::open_binding_dialog (sub { + my ($mod, $sym) = @_; + $::CFG->{bindings}->{$mod}->{$sym} = [$1]; + }); } elsif ($text =~ /^\/(.*)/) { $::CONN->user_send ($1); } else { @@ -923,12 +927,12 @@ sub make_inventory_window { my $invwin = $INV_WINDOW = new CFClient::UI::FancyFrame - x => "center", - y => "center", - def_w => $WIDTH * 9/10, - def_h => $HEIGHT * 9/10, - title => "Inventory", - name => "inventory_window", + x => "center", + y => "center", + force_w => $WIDTH * 9/10, + force_h => $HEIGHT * 9/10, + title => "Inventory", + name => "inventory_window", ; $invwin->add (my $hb = new CFClient::UI::HBox homogeneous => 1); @@ -952,7 +956,8 @@ sub make_binding_window { my $binding_list = new CFClient::UI::VBox; - my $refresh = sub { + my $refresh; + $refresh = sub { $binding_list->clear (); for my $mod (keys %{$::CFG->{bindings}}) { @@ -961,15 +966,37 @@ next unless ref $cmds eq 'ARRAY' and @$cmds > 0; my $lbl = join "; ", @$cmds; - my $nam = CFClient::Recorder::keycombo_to_name ($mod, $sym); + my $nam = CFClient::Binder::keycombo_to_name ($mod, $sym); $binding_list->add (my $hb = new CFClient::UI::HBox); $hb->add (new CFClient::UI::Button text => "delete", + tooltip => "Deletes the binding", on_activate => sub { $binding_list->remove ($hb); delete $::CFG->{bindings}->{$mod}->{$sym}; }); - $hb->add (new CFClient::UI::Label text => "($nam)"); + + $hb->add (new CFClient::UI::Button + text => "edit", + tooltip => "Edits the binding", + on_activate => sub { + $::BIND_EDITOR->set_binding ( + $mod, $sym, $::CFG->{bindings}->{$mod}->{$sym}, + sub { + my ($nmod, $nsym, $ncmds) = @_; + delete $::CFG->{bindings}->{$mod}->{$sym}; + $::CFG->{bindings}->{$nmod}->{$nsym} = $ncmds; + $refresh->(); + $::BIND_WINDOW->show; + }, + sub { + $::BIND_WINDOW->show; + }); + $::BIND_EDITOR->show; + $::BIND_WINDOW->hide; + }); + + $hb->add (new CFClient::UI::Label text => "(Key: $nam)"); $hb->add (new CFClient::UI::Label text => $lbl, expand => 1); } } @@ -986,7 +1013,37 @@ $refresh->() if $visible; }; - $BIND_WINDOW->add ($binding_list); + $BIND_WINDOW->add (my $vb = new CFClient::UI::VBox); + $vb->add ($binding_list); + $vb->add (my $hb = new CFClient::UI::HBox); + $hb->add (new CFClient::UI::Button + text => "record new", + expand => 1, + tooltip => "This button opens the binding editor with an empty binding.", + on_activate => sub { + $::BIND_EDITOR->set_binding (undef, undef, [], + sub { + my ($mod, $sym, $cmds) = @_; + $::CFG->{bindings}->{$mod}->{$sym} = $cmds; + $refresh->(); + $::BIND_WINDOW->show; + }, + sub { + $::BIND_WINDOW->show; + }); + $::BIND_WINDOW->hide; + $::BIND_EDITOR->show; + }, + ); + $hb->add (new CFClient::UI::Button + text => "close", + tooltip => "Closes the binding window", + expand => 1, + on_activate => sub { + $::BIND_WINDOW->hide; + } + ); + $refresh->(); $BIND_WINDOW } @@ -1072,7 +1129,9 @@ force_x => "max", force_y => 0; $DEBUG_STATUS->show; - + + $BIND_EDITOR = new CFClient::UI::BindEditor (x => "max", y => 0); + $STATUSBOX = new CFClient::UI::Statusbox; $STATUSBOX->add ("Use Alt-Enter to toggle fullscreen mode", pri => -100, color => [1, 1, 1, 0.8]); @@ -1150,10 +1209,14 @@ $BUTTONBAR->add (new CFClient::UI::Flopper text => "Bindings", other => make_binding_window, - tooltip => "Lets you delete bindings you have made with the recorder" + tooltip => + "Lets you define, edit and delete bindings." + ."There is a shortcut for making bindings: LCTRL+Insert opens the binding editor " + ."with nothing set and the recording started. After doing the actions you " + ."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" ); - $BUTTONBAR->add (new CFClient::UI::Flopper text => "[Rec]", other => CFClient::Recorder::make_window, - tooltip => "This feature lets you record a series of actions (eg. walking a path or ready a skill) and bind them to keys"); $BUTTONBAR->add (new CFClient::UI::Button text => "Quit", @@ -1248,7 +1311,7 @@ sub force_refresh { $fps = $fps * 0.95 + 1 / (($NOW - $LAST_REFRESH) || 0.1) * 0.05; - debug sprintf "%3.2f", $fps; + debug sprintf "%3.2f", $fps if $ENV{CFPLUS_DEBUG} & 4; $CFClient::UI::ROOT->draw;