Пример #1
0
        public float InputCharacter(char newCharacter, char[][] keyboard, int[] finger)
        {
            // Find finger to use

            if (firstCharacter != null)
            {
                firstCharacter = char.ToUpper(newCharacter);
                return(CalcDistance(Utilities.FindInDimensions(keyboard, (char)firstCharacter), Utilities.FindInDimensions(keyboard, newCharacter), 0));
            }

            return(0);
        }
Пример #2
0
        public void PrintChar(char letter)
        {
            if (char.IsLower(letter))
            {
                letter = char.ToUpper(letter);
            }
            Point charCoordinates = Utilities.FindInDimensions(shownKeyboard, letter);

            paragraphText.Text += letter;
            paragraphText.Invalidate();
            paragraphText.Update();
            paragraphText.Refresh();

            if (charCoordinates.X < 0)
            {
                return;
            }

            string ID = "lbl_key_" + charCoordinates.X.ToString() + "_" + charCoordinates.Y.ToString();

            Label lbl = this.Controls.Find(ID, true).FirstOrDefault() as Label;

            Color oldColor = lbl.BackColor;

            lbl.BackColor = Color.Yellow;
            lbl.Invalidate();
            lbl.Update();
            lbl.Refresh();



            System.Threading.Thread.Sleep(50);
            lbl.BackColor = oldColor;
            lbl.Invalidate();
            lbl.Update();
            lbl.Refresh();

            System.Threading.Thread.Sleep(50);
        }
Пример #3
0
        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;
            }
        }
Пример #4
0
        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));
        }