/*--------------------------------------------------------------------------------------------*/ private void AddControl(HoverkeyItemLabels pLabels) { switch (pLabels.DefaultKey) { case KeyCode.Backspace: if (CursorIndex > 0) { TextInput = TextInput.Substring(0, CursorIndex - 1) + TextInput.Substring(CursorIndex, TextInput.Length - CursorIndex); CursorIndex--; } break; case KeyCode.Delete: if (CursorIndex < TextInput.Length) { TextInput = TextInput.Substring(0, CursorIndex) + TextInput.Substring(CursorIndex + 1, TextInput.Length - CursorIndex - 1); } break; case KeyCode.Return: case KeyCode.KeypadEnter: AddCharacter("\n"); break; } }
/*--------------------------------------------------------------------------------------------*/ private void AddNavigation(HoverkeyItemLabels pLabels) { switch (pLabels.DefaultKey) { case KeyCode.LeftArrow: CursorIndex = Mathf.Max(0, CursorIndex - 1); break; case KeyCode.RightArrow: CursorIndex = Mathf.Min(TextInput.Length, CursorIndex + 1); break; case KeyCode.Home: CursorIndex = 0; break; case KeyCode.End: CursorIndex = TextInput.Length; break; case KeyCode.Tab: AddCharacter("\t"); break; } }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ private void SendInputFieldEvent(HoverkeyItemLabels pLabels) { if (InputField == null) { return; } InputField.text = TextInput; InputField.caretPosition = CursorIndex; InputField.ForceLabelUpdate(); /* * //TODO: the following seems like the right way to do it, but isn't working as expected * //http://docs.unity3d.com/540/Documentation/ScriptReference/UI.InputField.html * //https://docs.unity3d.com/ScriptReference/Event.KeyboardEvent.html * //https://docs.unity3d.com/Manual/ConventionalGameInput.html * * string keyName = (pLabels.DefaultKey+"").ToLower(); * * switch ( pLabels.DefaultKey ) { * case KeyCode.Keypad0: * case KeyCode.Keypad1: * case KeyCode.Keypad2: * case KeyCode.Keypad3: * case KeyCode.Keypad4: * case KeyCode.Keypad5: * case KeyCode.Keypad6: * case KeyCode.Keypad7: * case KeyCode.Keypad8: * case KeyCode.Numlock: * case KeyCode.KeypadDivide: * case KeyCode.KeypadMultiply: * case KeyCode.KeypadMinus: * case KeyCode.KeypadPlus: * case KeyCode.KeypadPeriod: * case KeyCode.KeypadEnter: * keyName = "["+keyName+"]"; * break; * } * * if ( Hoverkey.IsInShiftMode ) { * keyName = "#"+keyName; * //keyName = keyName.ToUpper(); * } * * Debug.Log("KEY: "+keyName); * InputField.ActivateInputField(); * InputField.ProcessEvent(Event.KeyboardEvent(keyName)); * InputField.ForceLabelUpdate();*/ }
/*--------------------------------------------------------------------------------------------*/ private void UpdateShiftLabels(bool pForceUpdate=false) { bool isShiftMode = IsInShiftMode; if ( isShiftMode == vWasShiftMode && !pForceUpdate ) { return; } vWasShiftMode = isShiftMode; for ( int i = 0 ; i < vAllLabels.Count ; i++ ) { HoverkeyItemLabels label = vAllLabels[i]; label.GetComponent<HoverItemData>().Label = (isShiftMode && label.HasShiftLabel ? label.ShiftLabel : label.DefaultLabel); } }
//////////////////////////////////////////////////////////////////////////////////////////////// /*--------------------------------------------------------------------------------------------*/ private void HandleKeySelected(IItemDataSelectable pItemData, HoverkeyItemLabels pLabels) { switch (pLabels.ActionType) { case HoverkeyItemLabels.KeyActionType.Character: AddCharacter(pLabels); break; case HoverkeyItemLabels.KeyActionType.Control: AddControl(pLabels); break; case HoverkeyItemLabels.KeyActionType.Navigation: AddNavigation(pLabels); break; } SendInputFieldEvent(pLabels); }
/*--------------------------------------------------------------------------------------------*/ private GameObject BuildRowItem(Transform pRowTx, HoverkeyBuilderKeyInfo pKeyInfo) { var itemGo = new GameObject(pKeyInfo.DefaultKey + ""); itemGo.transform.SetParent(pRowTx, false); HoverItemBuilder build = itemGo.AddComponent <HoverItemBuilder>(); build.ItemType = pKeyInfo.ItemType; build.ButtonRendererPrefab = ButtonRendererPrefab; build.SliderRendererPrefab = SliderRendererPrefab; build.OnEditorTriggerButtonSelected(); DestroyImmediate(build, false); //// HoverItemData data = itemGo.GetComponent <HoverItemData>(); data.Id = pKeyInfo.ID; data.Label = pKeyInfo.DefaultLabel; itemGo.AddComponent <HoverShapeRect>(); HoverkeyItemLabels labels = itemGo.AddComponent <HoverkeyItemLabels>(); labels.ActionType = pKeyInfo.ActionType; labels.DefaultKey = pKeyInfo.DefaultKey; labels.DefaultLabel = pKeyInfo.DefaultLabel; labels.HasShiftLabel = pKeyInfo.HasShiftLabel; labels.ShiftLabel = pKeyInfo.ShiftLabel; if (pKeyInfo.RelativeSizeX != 1) { HoverLayoutRectRelativeSizer sizer = itemGo.AddComponent <HoverLayoutRectRelativeSizer>(); sizer.RelativeSizeX = pKeyInfo.RelativeSizeX; } HoverCanvas can = itemGo.GetComponentInChildren <HoverCanvas>(); can.Alignment = HoverCanvas.CanvasAlignmentType.Center; can.PaddingX = 0.001f; //// HoverkeyInterface inter = gameObject.GetComponent <HoverkeyInterface>(); HoverItemDataSelector selData = (data as HoverItemDataSelector); HoverItemDataSticky stickyData = (data as HoverItemDataSticky); HoverItemDataCheckbox checkboxData = (data as HoverItemDataCheckbox); if (selData != null) { #if UNITY_EDITOR UnityEditor.Events.UnityEventTools.AddPersistentListener( selData.OnSelectedEvent, inter.HandleItemSelected); #else selData.OnSelectedEvent.AddListener(inter.HandleItemSelected); #endif } else if (stickyData != null) { #if UNITY_EDITOR UnityEditor.Events.UnityEventTools.AddPersistentListener( stickyData.OnSelectedEvent, inter.HandleItemSelected); UnityEditor.Events.UnityEventTools.AddPersistentListener( stickyData.OnDeselectedEvent, inter.HandleItemDeselected); #else stickyData.OnSelectedEvent.AddListener(inter.HandleItemSelected); stickyData.OnDeselectedEvent.AddListener(inter.HandleItemDeselected); #endif } else if (checkboxData != null) { #if UNITY_EDITOR UnityEditor.Events.UnityEventTools.AddPersistentListener( checkboxData.OnSelectedEvent, inter.HandleItemSelected); UnityEditor.Events.UnityEventTools.AddPersistentListener( checkboxData.OnValueChangedEvent, inter.HandleItemValueChanged); #else checkboxData.OnSelectedEvent.AddListener(inter.HandleItemSelected); checkboxData.OnValueChangedEvent.AddListener(inter.HandleItemValueChanged); #endif } return(itemGo); }
/*--------------------------------------------------------------------------------------------* / * private void HandleKeyToggled(IItemDataSelectable<bool> pArg0, HoverkeyItemLabels pArg1) { * throw new NotImplementedException(); * } * * /*--------------------------------------------------------------------------------------------* / * private void HandleKeyDeselected(IItemDataSelectable pArg0, HoverkeyItemLabels pArg1) { * throw new NotImplementedException(); * } * * * //////////////////////////////////////////////////////////////////////////////////////////////// * /*--------------------------------------------------------------------------------------------*/ private void AddCharacter(HoverkeyItemLabels pLabels) { AddCharacter(Hoverkey.IsInShiftMode && pLabels.HasShiftLabel ? pLabels.ShiftLabel : pLabels.DefaultLabel); }