private void UpdateStateMachine() { // Stop editing the textBox EditorGUIUtility.editingTextField = false; // Update state machine RexISM.Update(); // Only reenable editing if the state is NOT intelliselect if (RexISM.State != RexInputState.IntelliSelect) { EditorGUIUtility.editingTextField = true; } else { _inputField.MoveLineEnd(); } if (RexISM.ShouldReplaceCode) { RexISM.Code = RexISM.ReplacementCode; //EditorGUI.FocusTextInControl(NameOfInputField); RexISM.ShouldReplaceCode = false; // This doesnt seem to work in with EditorGUI TextField GUI.FocusControl(NAME_OF_INPUT_FIELD); if (_inputField != null) { _inputField.text = RexISM.Code; _inputField.MoveLineEnd(); } } }
public void IntellisenseSelectionTest() { RexISM.Enter_Typing(); RexISM.Code = "Math.P"; RexISM.Update(); Assert.AreEqual(RexInputState.Typing, RexISM.State); Assert.IsTrue(RexISM.DisplayHelp); Assert.IsNotEmpty(RexISM.IntelliSenceHelp); Assert.AreEqual(RexISM.SelectedHelp, -1); PressKey(KeyCode.DownArrow); Assert.AreEqual(RexInputState.IntelliSelect, RexISM.State); Assert.AreEqual(RexISM.SelectedHelp, 0); RexISM.Enter_Typing(); Assert.AreEqual(RexInputState.Typing, RexISM.State); Assert.AreEqual(RexISM.SelectedHelp, -1); RexISM.Code = "x = Math."; RexISM.Update(); PressKey(KeyCode.DownArrow); Assert.AreEqual(RexInputState.IntelliSelect, RexISM.State); Assert.AreEqual(RexISM.SelectedHelp, 0); PressKey(KeyCode.DownArrow); Assert.AreEqual(RexInputState.IntelliSelect, RexISM.State); Assert.AreEqual(RexISM.SelectedHelp, 1); PressKey(KeyCode.Return); Assert.IsTrue(RexISM.Code.Contains("x = Math.")); }
/// <summary> /// Registers a all keypress events and keeps track of keys being held down. /// </summary> static void HandleKeyInput() { if (Event.current.isKey) { var keyCode = Event.current.keyCode; var eventType = Event.current.type; if (RexISM.InputBuffer.ContainsKey(keyCode)) { if (eventType == EventType.KeyUp) { RexISM.InputBuffer.Remove(keyCode); } else if (eventType == EventType.KeyDown && DateTime.Now >= RexISM.InputBuffer[keyCode].LastPressed + RexISM.KeyInput.DelayAmount) { RexISM.InputBuffer[keyCode].LastPressed = DateTime.Now; RexISM.InputBuffer[keyCode].IsHandled = false; } } else if (eventType == EventType.KeyDown) { foreach (var item in RexISM.InputBuffer.ToArray()) { if (!item.Value.IsHandled && item.Value.LastPressed + RexISM.KeyInput.DelayAmount < DateTime.Now) { RexISM.InputBuffer.Remove(item.Key); } } RexISM.PressKey(keyCode); } } }
void OnEnable() { hideFlags = HideFlags.HideAndDontSave; if (_compileEngine == null) { _compileEngine = RexCompileEngine.Instance; } if (_texts == null) { _texts = RexStaticTextCollection.Instance; } if (_macros == null) { _macros = RexMacroHandler.LoadMacros(); } RexISM.Repaint = Repaint; RexISM.DebugLog = Debug.Log; RexISM.ExecuteCode = Execute; RexISM.Enter_NoInput(); updateSkins = true; minSize = new Vector2(450f, 350f); autoRepaintOnSceneChange = true; titleContent.text = "REX"; titleContent.tooltip = "Runtime Expressions"; }
void TestIntelliSelect(string code, IEnumerable <string> selections, bool withMethodOverloads = true) { RexISM.Enter_Typing(); RexISM.Code = code; RexISM.Update(); Assert.AreEqual(RexInputState.Typing, RexISM.State); Assert.IsTrue(RexISM.DisplayHelp); var help = RexISM.IntelliSenceHelp.Where(i => !i.IsMethodOverload); var meth = RexISM.IntelliSenceHelp.Where(i => i.IsMethodOverload); Assert.IsNotEmpty(help); if (withMethodOverloads) { Assert.IsNotEmpty(meth); } else { Assert.IsEmpty(meth); } Assert.AreEqual(-1, RexISM.SelectedHelp); var count = 0; foreach (var select in selections) { PressKey(KeyCode.DownArrow); Assert.AreEqual(select, RexISM.ReplacementString(), "At i = " + count); Assert.AreEqual(count++, RexISM.SelectedHelp); } }
public static void PressKey(KeyCode key, int repeat = 1) { for (int i = 0; i < repeat; i++) { RexISM.PressKey(key); RexISM.Update(); } }
public void IntellisenseTest() { RexISM.Enter_Typing(); RexISM.Code = "Math.P"; RexISM.Update(); Assert.AreEqual(RexInputState.Typing, RexISM.State); Assert.IsTrue(RexISM.DisplayHelp); Assert.IsNotEmpty(RexISM.IntelliSenceHelp); }
private void HandleTabKeyPress() { if (Event.current.keyCode == KeyCode.Tab || Event.current.character == '\t') { if (RexISM.DisplayHelp) { RexISM.PressKey(KeyCode.Tab); } Event.current.Use(); } }
public void ClassSetup() { RexISM.Repaint = () => { }; RexISM.DebugLog = msg => Console.WriteLine(msg); RexISM.ExecuteCode = TestExecute; RexISM.Code = string.Empty; RexISM.Enter_NoInput(); RexISM.IntelliSenceHelp.Clear(); RexISM.IntelliSenceLastCode = string.Empty; RexISM.InputBuffer.Clear(); }
private void HandleInputHistory(bool hasFocus) { if (_inputHistroy.Count == 0 || _inputHistroy.First.Value != RexISM.Code) { if (_inputHistroy.Count > INPUT_HISTORY_LENGTH) { _inputHistroy.RemoveLast(); } _inputHistroy.AddFirst(RexISM.Code); } if (hasFocus && RexISM.AnyKeyDown() && Event.current.type == EventType.Layout) { UpdateStateMachine(); } }
private void DisplayInputField(ref Rect inpLabelRect, ref Rect inpStringRect, ref Rect inpButRect) { GUI.Label(inpLabelRect, _texts["expression_header"]); var oldColor = ColorInput(); GUI.SetNextControlName(NAME_OF_INPUT_FIELD); RexISM.Code = GUI.TextField(inpStringRect, RexISM.Code); //To have the cursor change to the 'I' on hover: GUI.color = Color.clear; EditorGUI.TextField(inpStringRect, ""); GUI.color = oldColor; if (GUI.Button(inpButRect, _texts["evaluate_button"])) { GUI.FocusControl(NAME_OF_INPUT_FIELD); RexISM.PressKey(KeyCode.Return); } }
public void UpdateTest() { Assert.AreEqual(RexInputState.NoInput, RexISM.State); RexISM.Update(); Assert.AreEqual(RexInputState.NoInput, RexISM.State); RexISM.Enter_Typing(); Assert.AreEqual(RexInputState.Typing, RexISM.State); Assert.IsTrue(RexISM.DisplayHelp); RexISM.Update(); Assert.AreEqual(RexInputState.Typing, RexISM.State); Assert.IsTrue(RexISM.DisplayHelp); PressKey(KeyCode.Escape); RexISM.Update(); Assert.AreEqual(RexInputState.Typing, RexISM.State); Assert.IsFalse(RexISM.DisplayHelp); Assert.IsEmpty(RexISM.IntelliSenceHelp); }