From 973a90a34d2a0a30cc8d7752038fe7bcda1b6af3 Mon Sep 17 00:00:00 2001 From: Inusaito Sayori Date: Wed, 11 Jun 2014 20:02:34 -0400 Subject: [PATCH] Address Issue 1063: Compatibility azerty It's dynamic, no need to relog! Look under input preferences for "Use azerty layout instead of qwerty layout" --- indra/newview/app_settings/keysZQSD.ini | 362 ++++++++++++++++++ indra/newview/app_settings/settings.xml | 11 + indra/newview/llappviewer.cpp | 19 +- indra/newview/llviewercontrol.cpp | 3 + indra/newview/llviewerkeyboard.cpp | 8 + indra/newview/llviewerkeyboard.h | 1 + .../xui/en-us/panel_preferences_input.xml | 1 + 7 files changed, 399 insertions(+), 6 deletions(-) create mode 100644 indra/newview/app_settings/keysZQSD.ini diff --git a/indra/newview/app_settings/keysZQSD.ini b/indra/newview/app_settings/keysZQSD.ini new file mode 100644 index 000000000..3510587c3 --- /dev/null +++ b/indra/newview/app_settings/keysZQSD.ini @@ -0,0 +1,362 @@ +# keys.ini +# +# keyboard binding initialization +# +# comments must have # in the first column +# blank lines OK +# +# Format: +# mode key mask function +# +# mode must be one of FIRST_PERSON, THIRD_PERSON, EDIT, EDIT_AVATAR, or CONVERSATION +# key must be upper case, or SPACE, HOME, END, PGUP, PGDN, LEFT, RIGHT, UP, DOWN, +# or one of ,.;'[] +# mask must be NONE, SHIFT, ALT, ALT_SHIFT. +# Control is reserved for user commands. +# function must be a function named in llkeyboard.cpp + +FIRST_PERSON Q NONE slide_left +FIRST_PERSON D NONE slide_right +FIRST_PERSON Z NONE push_forward +FIRST_PERSON S NONE push_backward +FIRST_PERSON E NONE jump +FIRST_PERSON C NONE push_down +FIRST_PERSON F NONE toggle_fly + +FIRST_PERSON LEFT NONE slide_left +FIRST_PERSON RIGHT NONE slide_right +FIRST_PERSON UP NONE push_forward +FIRST_PERSON DOWN NONE push_backward +FIRST_PERSON PGUP NONE jump +FIRST_PERSON PGDN NONE push_down +FIRST_PERSON HOME NONE toggle_fly + +FIRST_PERSON PAD_LEFT NONE slide_left +FIRST_PERSON PAD_RIGHT NONE slide_right +FIRST_PERSON PAD_UP NONE push_forward +FIRST_PERSON PAD_DOWN NONE push_backward +FIRST_PERSON PAD_PGUP NONE jump +FIRST_PERSON PAD_PGDN NONE push_down +FIRST_PERSON PAD_HOME NONE toggle_fly +FIRST_PERSON PAD_CENTER NONE stop_moving +FIRST_PERSON PAD_ENTER NONE start_chat +FIRST_PERSON PAD_DIVIDE NONE start_gesture + +FIRST_PERSON Q SHIFT slide_left +FIRST_PERSON D SHIFT slide_right +FIRST_PERSON Z SHIFT push_forward +FIRST_PERSON S SHIFT push_backward +FIRST_PERSON E SHIFT jump +FIRST_PERSON C SHIFT toggle_down +FIRST_PERSON F SHIFT toggle_fly + +FIRST_PERSON SPACE NONE stop_moving +FIRST_PERSON ENTER NONE start_chat +FIRST_PERSON DIVIDE NONE start_gesture +FIRST_PERSON / NONE start_gesture + +FIRST_PERSON LEFT SHIFT slide_left +FIRST_PERSON RIGHT SHIFT slide_right +FIRST_PERSON UP SHIFT push_forward +FIRST_PERSON DOWN SHIFT push_backward +FIRST_PERSON PGUP SHIFT jump +FIRST_PERSON PGDN SHIFT toggle_down + +FIRST_PERSON PAD_LEFT SHIFT slide_left +FIRST_PERSON PAD_RIGHT SHIFT slide_right +FIRST_PERSON PAD_UP SHIFT push_forward +FIRST_PERSON PAD_DOWN SHIFT push_backward +FIRST_PERSON PAD_PGUP SHIFT jump +FIRST_PERSON PAD_PGDN SHIFT toggle_down +FIRST_PERSON PAD_HOME SHIFT toggle_fly +FIRST_PERSON PAD_ENTER SHIFT start_chat +FIRST_PERSON PAD_DIVIDE SHIFT start_gesture + +THIRD_PERSON Q NONE turn_left +THIRD_PERSON D NONE turn_right +THIRD_PERSON Q SHIFT slide_left +THIRD_PERSON D SHIFT slide_right +THIRD_PERSON Z NONE push_forward +THIRD_PERSON S NONE push_backward +THIRD_PERSON Z SHIFT push_forward +THIRD_PERSON S SHIFT push_backward +THIRD_PERSON E NONE jump +THIRD_PERSON C NONE push_down +THIRD_PERSON E SHIFT jump +THIRD_PERSON C SHIFT toggle_down + +THIRD_PERSON F NONE toggle_fly +THIRD_PERSON F SHIFT toggle_fly + +THIRD_PERSON SPACE NONE stop_moving +THIRD_PERSON ENTER NONE start_chat +THIRD_PERSON DIVIDE NONE start_gesture +THIRD_PERSON / NONE start_gesture + +THIRD_PERSON LEFT NONE turn_left +THIRD_PERSON LEFT SHIFT slide_left +THIRD_PERSON RIGHT NONE turn_right +THIRD_PERSON RIGHT SHIFT slide_right +THIRD_PERSON UP NONE push_forward +THIRD_PERSON DOWN NONE push_backward +THIRD_PERSON UP SHIFT push_forward +THIRD_PERSON DOWN SHIFT push_backward +THIRD_PERSON PGUP NONE jump +THIRD_PERSON PGDN NONE push_down +THIRD_PERSON PGUP SHIFT jump +THIRD_PERSON PGDN SHIFT toggle_down +THIRD_PERSON HOME SHIFT toggle_fly +THIRD_PERSON HOME NONE toggle_fly + +THIRD_PERSON PAD_LEFT NONE turn_left +THIRD_PERSON PAD_LEFT SHIFT slide_left +THIRD_PERSON PAD_RIGHT NONE turn_right +THIRD_PERSON PAD_RIGHT SHIFT slide_right +THIRD_PERSON PAD_UP NONE push_forward +THIRD_PERSON PAD_DOWN NONE push_backward +THIRD_PERSON PAD_UP SHIFT push_forward +THIRD_PERSON PAD_DOWN SHIFT push_backward +THIRD_PERSON PAD_PGUP NONE jump +THIRD_PERSON PAD_PGDN NONE push_down +THIRD_PERSON PAD_PGUP SHIFT jump +THIRD_PERSON PAD_PGDN SHIFT toggle_down +THIRD_PERSON PAD_HOME NONE toggle_fly +THIRD_PERSON PAD_HOME SHIFT toggle_fly +THIRD_PERSON PAD_CENTER NONE stop_moving +THIRD_PERSON PAD_CENTER SHIFT stop_moving +THIRD_PERSON PAD_ENTER NONE start_chat +THIRD_PERSON PAD_ENTER SHIFT start_chat +THIRD_PERSON PAD_DIVIDE NONE start_gesture +THIRD_PERSON PAD_DIVIDE SHIFT start_gesture + +# Camera controls in third person on Alt +THIRD_PERSON LEFT ALT spin_around_cw +THIRD_PERSON RIGHT ALT spin_around_ccw +THIRD_PERSON UP ALT move_forward +THIRD_PERSON DOWN ALT move_backward +THIRD_PERSON PGUP ALT spin_over +THIRD_PERSON PGDN ALT spin_under + +THIRD_PERSON Q ALT spin_around_cw +THIRD_PERSON D ALT spin_around_ccw +THIRD_PERSON Z ALT move_forward +THIRD_PERSON S ALT move_backward +THIRD_PERSON E ALT spin_over +THIRD_PERSON C ALT spin_under + +THIRD_PERSON PAD_LEFT ALT spin_around_cw +THIRD_PERSON PAD_RIGHT ALT spin_around_ccw +THIRD_PERSON PAD_UP ALT move_forward +THIRD_PERSON PAD_DOWN ALT move_backward +THIRD_PERSON PAD_PGUP ALT spin_over +THIRD_PERSON PAD_PGDN ALT spin_under +THIRD_PERSON PAD_ENTER ALT start_chat +THIRD_PERSON PAD_DIVIDE ALT start_gesture + +# mimic alt zoom behavior with keyboard only +THIRD_PERSON Q CTL_ALT spin_around_cw +THIRD_PERSON D CTL_ALT spin_around_ccw +THIRD_PERSON Z CTL_ALT spin_over +THIRD_PERSON S CTL_ALT spin_under +THIRD_PERSON E CTL_ALT spin_over +THIRD_PERSON C CTL_ALT spin_under + +THIRD_PERSON LEFT CTL_ALT spin_around_cw +THIRD_PERSON RIGHT CTL_ALT spin_around_ccw +THIRD_PERSON UP CTL_ALT spin_over +THIRD_PERSON DOWN CTL_ALT spin_under +THIRD_PERSON PGUP CTL_ALT spin_over +THIRD_PERSON PGDN CTL_ALT spin_under + +THIRD_PERSON PAD_LEFT CTL_ALT spin_around_cw +THIRD_PERSON PAD_RIGHT CTL_ALT spin_around_ccw +THIRD_PERSON PAD_UP CTL_ALT spin_over +THIRD_PERSON PAD_DOWN CTL_ALT spin_under +THIRD_PERSON PAD_PGUP CTL_ALT spin_over +THIRD_PERSON PAD_PGDN CTL_ALT spin_under +THIRD_PERSON PAD_ENTER CTL_ALT start_chat +THIRD_PERSON PAD_DIVIDE CTL_ALT start_gesture + +# Therefore pan on Alt-Shift +THIRD_PERSON Q CTL_ALT_SHIFT pan_left +THIRD_PERSON D CTL_ALT_SHIFT pan_right +THIRD_PERSON Z CTL_ALT_SHIFT pan_up +THIRD_PERSON S CTL_ALT_SHIFT pan_down + +THIRD_PERSON LEFT CTL_ALT_SHIFT pan_left +THIRD_PERSON RIGHT CTL_ALT_SHIFT pan_right +THIRD_PERSON UP CTL_ALT_SHIFT pan_up +THIRD_PERSON DOWN CTL_ALT_SHIFT pan_down + +THIRD_PERSON PAD_LEFT CTL_ALT_SHIFT pan_left +THIRD_PERSON PAD_RIGHT CTL_ALT_SHIFT pan_right +THIRD_PERSON PAD_UP CTL_ALT_SHIFT pan_up +THIRD_PERSON PAD_DOWN CTL_ALT_SHIFT pan_down +THIRD_PERSON PAD_ENTER CTL_ALT_SHIFT start_chat +THIRD_PERSON PAD_DIVIDE CTL_ALT_SHIFT start_gesture + +# Basic editing camera control +EDIT Q NONE spin_around_cw +EDIT D NONE spin_around_ccw +EDIT Z NONE move_forward +EDIT S NONE move_backward +EDIT E NONE spin_over +EDIT C NONE spin_under +EDIT ENTER NONE start_chat +EDIT DIVIDE NONE start_gesture +EDIT / NONE start_gesture +EDIT PAD_ENTER NONE start_chat +EDIT PAD_DIVIDE NONE start_gesture + +EDIT LEFT NONE spin_around_cw +EDIT RIGHT NONE spin_around_ccw +EDIT UP NONE move_forward +EDIT DOWN NONE move_backward +EDIT PGUP NONE spin_over +EDIT PGDN NONE spin_under + +EDIT Q SHIFT pan_left +EDIT D SHIFT pan_right +EDIT Z SHIFT pan_up +EDIT S SHIFT pan_down + +EDIT LEFT SHIFT pan_left +EDIT RIGHT SHIFT pan_right +EDIT UP SHIFT pan_up +EDIT DOWN SHIFT pan_down + +# Walking works with ALT held down. +EDIT Q ALT slide_left +EDIT D ALT slide_right +EDIT Z ALT push_forward +EDIT S ALT push_backward +EDIT E ALT jump +EDIT C ALT push_down + +EDIT LEFT ALT slide_left +EDIT RIGHT ALT slide_right +EDIT UP ALT push_forward +EDIT DOWN ALT push_backward +EDIT PGUP ALT jump +EDIT PGDN ALT push_down +EDIT HOME ALT toggle_fly + +EDIT PAD_LEFT ALT slide_left +EDIT PAD_RIGHT ALT slide_right +EDIT PAD_UP ALT push_forward +EDIT PAD_DOWN ALT push_backward +EDIT PAD_PGUP ALT jump +EDIT PAD_PGDN ALT push_down +EDIT PAD_ENTER ALT start_chat +EDIT PAD_DIVIDE ALT start_gesture + +SITTING Q ALT spin_around_cw +SITTING D ALT spin_around_ccw +SITTING Z ALT move_forward +SITTING S ALT move_backward +SITTING E ALT spin_over_sitting +SITTING C ALT spin_under_sitting + +SITTING LEFT ALT spin_around_cw +SITTING RIGHT ALT spin_around_ccw +SITTING UP ALT move_forward +SITTING DOWN ALT move_backward +SITTING PGUP ALT spin_over +SITTING PGDN ALT spin_under + +SITTING Q CTL_ALT spin_around_cw +SITTING D CTL_ALT spin_around_ccw +SITTING Z CTL_ALT spin_over +SITTING S CTL_ALT spin_under +SITTING E CTL_ALT spin_over +SITTING C CTL_ALT spin_under + +SITTING LEFT CTL_ALT spin_around_cw +SITTING RIGHT CTL_ALT spin_around_ccw +SITTING UP CTL_ALT spin_over +SITTING DOWN CTL_ALT spin_under +SITTING PGUP CTL_ALT spin_over +SITTING PGDN CTL_ALT spin_under + + +SITTING Q NONE spin_around_cw_sitting +SITTING D NONE spin_around_ccw_sitting +SITTING Z NONE move_forward_sitting +SITTING S NONE move_backward_sitting +SITTING E NONE spin_over_sitting +SITTING C NONE spin_under_sitting + +SITTING LEFT NONE spin_around_cw_sitting +SITTING RIGHT NONE spin_around_ccw_sitting +SITTING UP NONE move_forward_sitting +SITTING DOWN NONE move_backward_sitting +SITTING PGUP NONE spin_over_sitting +SITTING PGDN NONE spin_under_sitting + +SITTING PAD_LEFT NONE spin_around_cw_sitting +SITTING PAD_RIGHT NONE spin_around_ccw_sitting +SITTING PAD_UP NONE move_forward_sitting +SITTING PAD_DOWN NONE move_backward_sitting +SITTING PAD_PGUP NONE spin_over_sitting +SITTING PAD_PGDN NONE spin_under_sitting +SITTING PAD_CENTER NONE stop_moving +SITTING PAD_ENTER NONE start_chat +SITTING PAD_DIVIDE NONE start_gesture + +# these are for passing controls when sitting on vehicles +SITTING Q SHIFT slide_left +SITTING D SHIFT slide_right +SITTING LEFT SHIFT slide_left +SITTING RIGHT SHIFT slide_right + +SITTING PAD_LEFT SHIFT slide_left +SITTING PAD_RIGHT SHIFT slide_right +SITTING PAD_ENTER SHIFT start_chat +SITTING PAD_DIVIDE SHIFT start_gesture + +# pan on Alt-Shift +SITTING Q CTL_ALT_SHIFT pan_left +SITTING D CTL_ALT_SHIFT pan_right +SITTING Z CTL_ALT_SHIFT pan_up +SITTING S CTL_ALT_SHIFT pan_down + +SITTING LEFT CTL_ALT_SHIFT pan_left +SITTING RIGHT CTL_ALT_SHIFT pan_right +SITTING UP CTL_ALT_SHIFT pan_up +SITTING DOWN CTL_ALT_SHIFT pan_down + +SITTING PAD_LEFT CTL_ALT_SHIFT pan_left +SITTING PAD_RIGHT CTL_ALT_SHIFT pan_right +SITTING PAD_UP CTL_ALT_SHIFT pan_up +SITTING PAD_DOWN CTL_ALT_SHIFT pan_down +SITTING PAD_ENTER CTL_ALT_SHIFT start_chat +SITTING PAD_DIVIDE CTL_ALT_SHIFT start_gesture + +SITTING ENTER NONE start_chat +SITTING DIVIDE NONE start_gesture +SITTING / NONE start_gesture + +# Avatar editing camera controls +EDIT_AVATAR Q NONE edit_avatar_spin_cw +EDIT_AVATAR D NONE edit_avatar_spin_ccw +EDIT_AVATAR Z NONE edit_avatar_move_forward +EDIT_AVATAR S NONE edit_avatar_move_backward +EDIT_AVATAR E NONE edit_avatar_spin_over +EDIT_AVATAR C NONE edit_avatar_spin_under +EDIT_AVATAR LEFT NONE edit_avatar_spin_cw +EDIT_AVATAR RIGHT NONE edit_avatar_spin_ccw +EDIT_AVATAR UP NONE edit_avatar_move_forward +EDIT_AVATAR DOWN NONE edit_avatar_move_backward +EDIT_AVATAR PGUP NONE edit_avatar_spin_over +EDIT_AVATAR PGDN NONE edit_avatar_spin_under +EDIT_AVATAR ENTER NONE start_chat +EDIT_AVATAR DIVIDE NONE start_gesture +EDIT_AVATAR / NONE start_gesture +EDIT_AVATAR PAD_LEFT NONE edit_avatar_spin_cw +EDIT_AVATAR PAD_RIGHT NONE edit_avatar_spin_ccw +EDIT_AVATAR PAD_UP NONE edit_avatar_move_forward +EDIT_AVATAR PAD_DOWN NONE edit_avatar_move_backward +EDIT_AVATAR PAD_PGUP NONE edit_avatar_spin_over +EDIT_AVATAR PAD_PGDN NONE edit_avatar_spin_under +EDIT_AVATAR PAD_ENTER NONE start_chat +EDIT_AVATAR PAD_DIVIDE NONE start_gesture diff --git a/indra/newview/app_settings/settings.xml b/indra/newview/app_settings/settings.xml index adf07f656..a16ad388a 100644 --- a/indra/newview/app_settings/settings.xml +++ b/indra/newview/app_settings/settings.xml @@ -1032,6 +1032,17 @@ Found in Advanced->Rendering->Info Displays Value 0 + LiruUseZQSDKeys + + Comment + Use ZQSD layout instead of WASD. + Persist + 1 + Type + Boolean + Value + 0 + SLBShowFPS Comment diff --git a/indra/newview/llappviewer.cpp b/indra/newview/llappviewer.cpp index 754eb4501..e24ee8327 100644 --- a/indra/newview/llappviewer.cpp +++ b/indra/newview/llappviewer.cpp @@ -588,6 +588,18 @@ public: } }; +void load_default_bindings(bool zqsd) +{ + gViewerKeyboard.unloadBindings(); + const std::string keys(zqsd ? "keysZQSD.ini" : "keys.ini"); + if (!gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS, keys))) + { + LL_ERRS("InitInfo") << "Unable to open " << keys << LL_ENDL; + } + // Load Custom bindings (override defaults) + gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"custom_keys.ini")); +} + bool LLAppViewer::init() { setupErrorHandling(); @@ -872,12 +884,7 @@ bool LLAppViewer::init() bind_keyboard_functions(); // Load Default bindings - if (!gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"keys.ini"))) - { - LL_ERRS("InitInfo") << "Unable to open keys.ini" << LL_ENDL; - } - // Load Custom bindings (override defaults) - gViewerKeyboard.loadBindings(gDirUtilp->getExpandedFilename(LL_PATH_APP_SETTINGS,"custom_keys.ini")); + load_default_bindings(gSavedSettings.getBOOL("LiruUseZQSDKeys")); // If we don't have the right GL requirements, exit. if (!gGLManager.mHasRequirements && !gNoRender) diff --git a/indra/newview/llviewercontrol.cpp b/indra/newview/llviewercontrol.cpp index d87d82ad5..7e07a2b80 100644 --- a/indra/newview/llviewercontrol.cpp +++ b/indra/newview/llviewercontrol.cpp @@ -84,6 +84,8 @@ #include "aicurl.h" #include "aihttptimeoutpolicy.h" +void load_default_bindings(bool zqsd); + #ifdef TOGGLE_HACKED_GODLIKE_VIEWER BOOL gHackGodmode = FALSE; #endif @@ -826,6 +828,7 @@ void settings_setup_listeners() // [/Ansariel: Display name support] gSavedSettings.getControl("AllowLargeSounds")->getSignal()->connect(boost::bind(&handleAllowLargeSounds, _2)); + gSavedSettings.getControl("LiruUseZQSDKeys")->getSignal()->connect(boost::bind(load_default_bindings, _2)); } void onCommitControlSetting_gSavedSettings(LLUICtrl* ctrl, void* name) diff --git a/indra/newview/llviewerkeyboard.cpp b/indra/newview/llviewerkeyboard.cpp index 8c899a4ae..5104f7972 100644 --- a/indra/newview/llviewerkeyboard.cpp +++ b/indra/newview/llviewerkeyboard.cpp @@ -851,6 +851,14 @@ S32 LLViewerKeyboard::loadBindings(const std::string& filename) return binding_count; } +void LLViewerKeyboard::unloadBindings() +{ + for (S32 mode = 0; mode < MODE_COUNT; ++mode) + { + mRemapKeys[mode].clear(); + mBindingCount[mode] = 0; + } +} EKeyboardMode LLViewerKeyboard::getMode() { diff --git a/indra/newview/llviewerkeyboard.h b/indra/newview/llviewerkeyboard.h index 2be702fee..56a31b18d 100644 --- a/indra/newview/llviewerkeyboard.h +++ b/indra/newview/llviewerkeyboard.h @@ -72,6 +72,7 @@ public: void bindNamedFunction(const std::string& name, LLKeyFunc func); S32 loadBindings(const std::string& filename); // returns number bound, 0 on error + void unloadBindings(); EKeyboardMode getMode(); BOOL modeFromString(const std::string& string, S32 *mode); // False on failure diff --git a/indra/newview/skins/default/xui/en-us/panel_preferences_input.xml b/indra/newview/skins/default/xui/en-us/panel_preferences_input.xml index 464f60645..877b8f254 100644 --- a/indra/newview/skins/default/xui/en-us/panel_preferences_input.xml +++ b/indra/newview/skins/default/xui/en-us/panel_preferences_input.xml @@ -15,6 +15,7 @@ Movement Options: + Camera Options: Camera View Angle: