void Form1_KeyPress(object sender, KeyPressEventArgs e) { Point charCoordinates; string ID; Label lbl; if (char.IsLower(e.KeyChar)) { e.KeyChar = char.ToUpper(e.KeyChar); } switch (settingsManager.stateOfProgram) { case SettingsManager.ProgramState.DefaultMode: return; case SettingsManager.ProgramState.KeyboardLockMode: if (e.KeyChar == (char)Keys.Escape) { lblProgramMode.Visible = false; settingsManager.stateOfProgram = SettingsManager.ProgramState.DefaultMode; return; } charCoordinates = Utilities.FindInDimensions(shownKeyboard, e.KeyChar); if (charCoordinates.X < 0) { return; } int lockedIndex = Utilities.Convert2DToIndex(charCoordinates, shownKeyboard); keyboardManager.lockedChars[lockedIndex] = !keyboardManager.lockedChars[lockedIndex]; ID = "lbl_key_" + charCoordinates.X.ToString() + "_" + charCoordinates.Y.ToString(); lbl = this.Controls.Find(ID, true).FirstOrDefault() as Label; if (lbl.BorderStyle == BorderStyle.None) { lbl.BorderStyle = BorderStyle.Fixed3D; } else { lbl.BorderStyle = BorderStyle.None; } return; case SettingsManager.ProgramState.FingerChooseMode: if (e.KeyChar == (char)Keys.Escape) { lblProgramMode.Visible = false; settingsManager.stateOfProgram = SettingsManager.ProgramState.DefaultMode; return; } else if (e.KeyChar >= 49 && e.KeyChar <= 56) //1-8 on keyboard { settingsManager.assignedFinger = (int)e.KeyChar - 49; lblProgramMode.Text = "Assign to Finger " + (settingsManager.assignedFinger + 1).ToString() + ". Press # to Assign new Finger. Press ESC to exit mode."; } else { charCoordinates = Utilities.FindInDimensions(shownKeyboard, e.KeyChar); //Set specific key to finger array in keyboard keyboardManager.fingersOnEachKey[Utilities.Convert2DToIndex(charCoordinates, shownKeyboard)] = settingsManager.assignedFinger; if (charCoordinates.X < 0) { return; } ID = "lbl_key_" + charCoordinates.X.ToString() + "_" + charCoordinates.Y.ToString(); lbl = this.Controls.Find(ID, true).FirstOrDefault() as Label; lbl.BackColor = settingsManager.GetColor(); } return; } }
public float CalculateString(string stringToCalculate, char[][] keyboard, FingerKeySet fingerKeys) { List <Finger> fingerList = fingerKeys.GetFingerList(); Finger[] fingerArray = new Finger[8]; float fitnessValue = 0; int characterCount = 0; //Change fingerlist into an array to keep consistent arrays foreach (Finger f in fingerList) { fingerArray[(int)f.fingerID] = f; } int? oldFingerIndex = null; bool?lastHandIsRight = null; foreach (char c in stringToCalculate) { float fitnessValueModifier = 1; firstCharacter = char.ToUpper(c); firstCharacter = CheckShiftKey(firstCharacter); //Find character on keyboard Point characterOnKeyboard = Utilities.FindInDimensions(keyboard, (char)firstCharacter); if (characterOnKeyboard == new Point(-1, -1)) { continue; } characterCount++; //Convert keyboard to 2D int characterIndex = Utilities.Convert2DToIndex(characterOnKeyboard, keyboard); //Find out which finger goes to this key int fingerIndex = fingerKeys.keysPerFinger[characterIndex]; fitnessValueModifier *= fingerArray[fingerIndex].fingerBonus(); if (lastHandIsRight != null && lastHandIsRight != isRightHand(fingerIndex)) { fitnessValueModifier *= Values.ALTERNATING_HAND; } else if (oldFingerIndex != null && oldFingerIndex != fingerIndex) { fitnessValueModifier *= Values.ALTERNATING_FINGER; } lastHandIsRight = isRightHand(fingerIndex); fitnessValue += (CalcDistance(fingerArray[fingerIndex].CurrentPosition, characterOnKeyboard, 0) * fitnessValueModifier); fingerArray[fingerIndex].CurrentPosition = characterOnKeyboard; for (int i = 0; i < fingerArray.Length; i++) { if (fingerArray[i] != null) { fingerArray[i].Idle(); } } } return(1 / (fitnessValue / characterCount)); }