예제 #1
0
        private void RemakeAllowedChars(Container p)
        {
            p.Suspended = true;
            foreach (Control key in p.Childs)
            {
                if (!(key is TextButton) || key.Tag == null) continue;

                TextButton but = (TextButton)key;
                KeyFlags flags = (KeyFlags)((int)but.Tag & (int)KeyFlags.TypeMask);
                if (flags != KeyFlags.NormalKey) continue;

                char keyChar = (char)((int)but.Tag & (int)KeyFlags.KeyMask);

                but.Enabled = _allowedChars.IndexOf(keyChar) >= 0;
            }
            p.Suspended = false;
        }
예제 #2
0
        private void CreateQwertyLayout(Container p)
        {
            string keyLine = Keys[0][_charSetUsed];

            int keyWidth = (p._width - (keyLine.Length + 1) * _uiMargin) / keyLine.Length;
            int keyHeight = (p._height - 5 * _uiMargin) / 4;

            int widthRemaining = p._width - ((keyLine.Length + 1) * _uiMargin + keyLine.Length * keyWidth);

            int x, y;

            #region 1st row keys
            x = _uiMargin + widthRemaining / 2;
            y = 0;
            for (int i = 0; i < keyLine.Length; i++)
            {
                TextButton keyBut = new TextButton(keyLine[i].ToString(), x, y, keyWidth, keyHeight) { Tag = (int)KeyFlags.NormalKey | ((int)keyLine[i] & (int)KeyFlags.KeyMask) };
                keyBut.ButtonPressed += _key_ButtonPressed;
                p.AddChild(keyBut);
                x += _uiMargin + keyWidth;
            }
            #endregion

            #region 2nd row keys
            x = _uiMargin + keyWidth / 2 + widthRemaining / 2;
            y += _uiMargin + keyHeight;
            keyLine = Keys[1][_charSetUsed];
            for (int i = 0; i < keyLine.Length; i++)
            {
                TextButton keyBut = new TextButton(keyLine[i].ToString(), x, y, keyWidth, keyHeight) { Tag = (int)KeyFlags.NormalKey | ((int)keyLine[i] & (int)KeyFlags.KeyMask) };
                keyBut.ButtonPressed += _key_ButtonPressed;
                p.AddChild(keyBut);
                x += _uiMargin + keyWidth;
            }
            #endregion

            #region 3rd row keys
            x = _uiMargin + widthRemaining / 2;
            y += _uiMargin + keyHeight;

            _capsButton = new TextButton("abc", x, y, keyWidth + keyWidth / 2, keyHeight) { Tag = (int)KeyFlags.CapsLock };
            _capsButton.ButtonPressed += _key_ButtonPressed;
            p.AddChild(_capsButton);
            x += _uiMargin + _capsButton._width;

            keyLine = Keys[2][_charSetUsed];
            for (int i = 0; i < keyLine.Length; i++)
            {
                TextButton keyBut = new TextButton(keyLine[i].ToString(), x, y, keyWidth, keyHeight) { Tag = (int)KeyFlags.NormalKey | ((int)keyLine[i] & (int)KeyFlags.KeyMask) };
                keyBut.ButtonPressed += _key_ButtonPressed;
                p.AddChild(keyBut);
                x += _uiMargin + keyWidth;
            }

            ImageButton backBut = new ImageButton(_bmpBackspace, x, y, keyWidth + keyWidth / 2, keyHeight) { Tag = (int)KeyFlags.BackSpace };
            backBut.RepeatKeyPress = true;
            backBut.ButtonPressed += _key_ButtonPressed;
            p.AddChild(backBut);
            #endregion

            #region 4th row keys
            x = _uiMargin + widthRemaining / 2;
            y += _uiMargin + keyHeight;

            TextButton modeSwitch = new TextButton("123?", x, y, keyWidth + keyWidth / 2, keyHeight) { Tag = (int)KeyFlags.ModeSwitch };
            modeSwitch.ButtonPressed += _key_ButtonPressed;
            modeSwitch.ButtonLongPressed += _keyModeSwitch_ButtonPressed;

            p.AddChild(modeSwitch);
            x += modeSwitch._width + _uiMargin;

            TextButton slashButton = new TextButton(",", x, y, keyWidth, keyHeight) { Tag = (int)KeyFlags.NormalKey | ((int)',' & (int)KeyFlags.KeyMask) };
            slashButton.ButtonPressed += _key_ButtonPressed;
            p.AddChild(slashButton);
            x += slashButton._width + _uiMargin;

            TextButton spaceButton = new TextButton("________", x, y, keyWidth * 4 + _uiMargin * 4 + keyWidth / 2, keyHeight) { Tag = (int)KeyFlags.NormalKey | ((int)' ' & (int)KeyFlags.KeyMask) };
            spaceButton.ButtonPressed += _key_ButtonPressed;
            p.AddChild(spaceButton);
            x += spaceButton._width + _uiMargin;

            TextButton pointButton = new TextButton(".", x, y, keyWidth, keyHeight) { Tag = (int)KeyFlags.NormalKey | ((int)'.' & (int)KeyFlags.KeyMask) };
            pointButton.ButtonPressed += _key_ButtonPressed;
            p.AddChild(pointButton);
            x += pointButton._width + _uiMargin;

            _enterButton = new ImageButton(_bmpEnter, x, y, keyWidth * 2, keyHeight) { Tag = (int)KeyFlags.Enter };
            _enterButton.ButtonPressed += _key_ButtonPressed;
            p.AddChild(_enterButton);
            #endregion
        }
예제 #3
0
        private void CreateNumericLayout(Container p)
        {
            string keyLine = NumericKeys[0];

            int keyWidth = (p._width - 20 - (keyLine.Length + 2) * _uiMargin) / (keyLine.Length + 1);
            int keyHeight = (p._height - (NumericKeys.Length + 1) * _uiMargin) / NumericKeys.Length;

            int widthRemaining = p._width - ((keyLine.Length + 2) * _uiMargin + (keyLine.Length + 1) * keyWidth);

            int x, y;

            x = _uiMargin;
            y = 0;
            for (int i = 0; i < NumericKeys.Length; i++)
            {
                x = _uiMargin + widthRemaining / 2;
                string line = NumericKeys[i];
                for (int j = 0; j < line.Length; j++)
                {
                    TextButton numBut = new TextButton(line[j].ToString(), x, y, keyWidth, keyHeight) { Tag = (int)KeyFlags.NormalKey | ((int)line[j] & (int)KeyFlags.KeyMask) }; ;
                    numBut.ButtonPressed += _key_ButtonPressed;
                    p.AddChild(numBut);
                    x += _uiMargin + keyWidth;
                }
                y += keyHeight + _uiMargin;
            }

            y = 0;
            ImageButton backBut = new ImageButton(_bmpBackspace, x, y, keyWidth, keyHeight) { Tag = (int)KeyFlags.BackSpace };
            backBut.RepeatKeyPress = true;
            backBut.ButtonPressed += _key_ButtonPressed;
            p.AddChild(backBut);
            y += backBut._height + _uiMargin;

            TextButton modeSwitch = new TextButton("Mode", x, y, keyWidth, keyHeight) { Tag = (int)KeyFlags.ModeSwitch };
            modeSwitch.ButtonPressed += _keyModeSwitch_ButtonPressed;
            p.AddChild(modeSwitch);
            y += modeSwitch._height + _uiMargin;
        }
예제 #4
0
        private void ChangeQwertyLayout(Container p, int newMode)
        {
            p.Suspended = true;
            foreach (Control key in p.Childs)
            {
                if (!(key is TextButton) || key.Tag == null) continue;

                TextButton but = (TextButton)key;
                KeyFlags flags = (KeyFlags)((int)but.Tag & (int)KeyFlags.TypeMask);
                if (flags != KeyFlags.NormalKey) continue;

                char keyChar = (char)((int)but.Tag & (int)KeyFlags.KeyMask);

                int index = 0, row = 0;
                for (int i = 0; i < 3; i++)
                {
                    if ((index = Keys[i][_charSetUsed].IndexOf(keyChar)) != -1)
                    {
                        row = i;
                        break;
                    }
                }
                if (index == -1) continue;

                char newChar = Keys[row][newMode][index];
                but.Text = newChar.ToString();
                but.Tag = (int)KeyFlags.NormalKey | ((int)newChar & (int)KeyFlags.KeyMask);
                but.Enabled = _allowedChars.IndexOf(newChar) >= 0;
            }
            _capsButton.Enabled = newMode < 2;
            _charSetUsed = newMode;
            p.Suspended = false;
        }