From: <che...@us...> - 2010-02-01 18:13:05
|
Revision: 3401 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=3401&view=rev Author: chemelli_sf Date: 2010-02-01 18:12:59 +0000 (Mon, 01 Feb 2010) Log Message: ----------- Using standard MP virtual keyboard Modified Paths: -------------- trunk/plugins/WorldMap/WorldmapSearch.cs Removed Paths: ------------- trunk/plugins/WorldMap/NewVirtualKeyboard.cs Deleted: trunk/plugins/WorldMap/NewVirtualKeyboard.cs =================================================================== --- trunk/plugins/WorldMap/NewVirtualKeyboard.cs 2010-02-01 18:00:56 UTC (rev 3400) +++ trunk/plugins/WorldMap/NewVirtualKeyboard.cs 2010-02-01 18:12:59 UTC (rev 3401) @@ -1,1876 +0,0 @@ -#region Copyright (C) 2005-2008 Team MediaPortal - -/* - * Copyright (C) 2005-2007 Team MediaPortal - * http://www.team-mediaportal.com - * - * This Program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2, or (at your option) - * any later version. - * - * This Program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with GNU Make; see the file COPYING. If not, write to - * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. - * http://www.gnu.org/copyleft/gpl.html - * - */ - -#endregion - -using System; -using System.Drawing; -using System.Windows.Forms; -using System.Collections; -using MediaPortal.GUI.Library; -using Microsoft.DirectX; -using Microsoft.DirectX.Direct3D; -using Direct3D = Microsoft.DirectX.Direct3D; - -namespace MediaPortal.Dialogs -{ - /// <summary> - /// - /// </summary> - public class NewVirtualKeyboard : GUIWindow, IRenderLayer - { - #region constants - const int GAP_WIDTH = 0; - const int GAP2_WIDTH = 4; - int MODEKEY_WIDTH = 110; - const int KEY_INSET = 1; - - const int MAX_KEYS_PER_ROW = 14; - - // Must be this far from center on 0.0 - 1.0 scale - const float JOY_THRESHOLD = 0.25f; - - // How often (per second) the caret blinks - const float fCARET_BLINK_RATE = 1.0f; - - // During the blink period, the amount the caret is visible. 0.5 equals - // half the time, 0.75 equals 3/4ths of the time, etc. - const float fCARET_ON_RATIO = 0.75f; - - // Text colors for keys - const long COLOR_SEARCHTEXT = 0xff000000; // black (0xff10e010) - const long COLOR_HIGHLIGHT = 0xff00ff00; // green - const long COLOR_PRESSED = 0xff808080; // gray - const long COLOR_NORMAL = 0xff000000; // black - const long COLOR_DISABLED = 0xffffffff; // white - const long COLOR_HELPTEXT = 0xffffffff; // white - const long COLOR_FONT_DISABLED = 0xff808080; // gray - const long COLOR_INVISIBLE = 0xff0000ff; // blue - const long COLOR_RED = 0xffff0000; // red - // Font sizes - const int FONTSIZE_BUTTONCHARS = 24; - const int FONTSIZE_BUTTONSTRINGS = 18; - const int FONTSIZE_SEARCHTEXT = 20; - - // Controller repeat values - const float fINITIAL_REPEAT = 0.333f; // 333 mS recommended for first repeat - const float fSTD_REPEAT = 0.085f; // 85 mS recommended for repeat rate - - // Maximum number of characters in string - const int MAX_CHARS = 64; - - // Width of text box - float fTEXTBOX_WIDTH = 576.0f - 64.0f - 4.0f - 4.0f - 10.0f - 80.0f; - float BUTTON_Y_POS = 411.0f; // button text line - float BUTTON_X_OFFSET = 40.0f; // space between button and text - - const long BUTTONTEXT_COLOR = 0xffffffff; - const float FIXED_JSL_SIZE = 3.0f; - - const int KEY_WIDTH = 34; // width of std key in pixels - - //Default Skin Ratio, recalculated by VirtualKeyboard() - float SkinRatio = 1.0f; - - #endregion - - bool UseSmsStyleTextIsertion = true; - - string[] smsKeyMap = - { - " 0", - ".!?-*_\\/1", - "abc\xE4\xE1\xE02", - "def\xE9\xE83", - "ghi4", - "jkl5", - "mno\xF66", - "pqrs\xDF7", - "tuv\xFC8", - "wxyz9" - }; - - int smsLastKeyPressTime = 0; - int smsLastKeyPressed = -1; - int smsLastKeyInternalPos = 0; - bool smsLastShiftState = false; - - #region enums - public enum SearchKinds - { - SEARCH_STARTS_WITH = 0, - SEARCH_CONTAINS, - SEARCH_ENDS_WITH, - SEARCH_IS - } - - enum KeyboardTypes - { - TYPE_ALPHABET = 0, - TYPE_SYMBOLS, - TYPE_ACCENTS, - - TYPE_HIRAGANA, - TYPE_KATAKANA, - TYPE_ANS, - - TYPE_MAX - }; - - enum State - { - STATE_BACK, // Main menu - STATE_KEYBOARD, // Keyboard display - STATE_MAX - }; - - - - enum Event - { - EV_NULL, // No events - EV_A_BUTTON, // A button - EV_START_BUTTON, // Start button - EV_B_BUTTON, // B button - EV_BACK_BUTTON, // Back button - EV_X_BUTTON, // X button - EV_Y_BUTTON, // Y button - EV_WHITE_BUTTON, // White button - EV_BLACK_BUTTON, // Black button - EV_LEFT_BUTTON, // Left trigger - EV_RIGHT_BUTTON, // Right trigger - EV_UP, // Up Dpad or left joy - EV_DOWN, // Down Dpad or left joy - EV_LEFT, // Left Dpad or left joy - EV_RIGHT, // Right Dpad or left joy - - EVENT_MAX - }; - - enum Xkey - { - XK_NULL = 0, - - XK_SPACE = ' ', - XK_LBRACK = '[', - XK_RBRACK = ']', - XK_LBRACE = '{', - XK_RBRACE = '}', - XK_LPAREN = '(', - XK_RPAREN = ')', - XK_FSLASH = '/', - XK_BSLASH = '\\', - XK_LT = '<', - XK_GT = '>', - XK_AT = '@', - XK_SEMI = ';', - XK_COLON = ':', - XK_QUOTE = '\'', - XK_DQUOTE = '\"', - XK_AMPER = '&', - XK_STAR = '*', - XK_QMARK = '?', - XK_COMMA = ',', - XK_PERIOD = '.', - XK_DASH = '-', - XK_UNDERS = '_', - XK_PLUS = '+', - XK_EQUAL = '=', - XK_DOLLAR = '$', - XK_PERCENT = '%', - XK_CARET = '^', - XK_TILDE = '~', - XK_APOS = '`', - XK_EXCL = '!', - XK_VERT = '|', - XK_NSIGN = '#', - - // Numbers - XK_0 = '0', - XK_1, - XK_2, - XK_3, - XK_4, - XK_5, - XK_6, - XK_7, - XK_8, - XK_9, - - // Letters - XK_A = 'A', - XK_B, - XK_C, - XK_D, - XK_E, - XK_F, - XK_G, - XK_H, - XK_I, - XK_J, - XK_K, - XK_L, - XK_M, - XK_N, - XK_O, - XK_P, - XK_Q, - XK_R, - XK_S, - XK_T, - XK_U, - XK_V, - XK_W, - XK_X, - XK_Y, - XK_Z, - - // Accented characters and other special characters - - XK_INVERTED_EXCL = 0xA1, // \xA1 - XK_CENT_SIGN = 0xA2, // \xA2 - XK_POUND_SIGN = 0xA3, // \xA3 - XK_YEN_SIGN = 0xA5, // \xA5 - XK_COPYRIGHT_SIGN = 0xA9, // \xA9 - XK_LT_DBL_ANGLE_QUOTE = 0xAB, // << - XK_REGISTERED_SIGN = 0xAE, // \xAE - XK_SUPERSCRIPT_TWO = 0xB2, // \xB2 - XK_SUPERSCRIPT_THREE = 0xB3, // \xB3 - XK_ACUTE_ACCENT = 0xB4, // \xB4 - XK_MICRO_SIGN = 0xB5, // \xB5 - XK_SUPERSCRIPT_ONE = 0xB9, // \xB9 - XK_RT_DBL_ANGLE_QUOTE = 0xBB, // >> - XK_INVERTED_QMARK = 0xBF, // \xBF - XK_CAP_A_GRAVE = 0xC0, // \xC0 - XK_CAP_A_ACUTE = 0xC1, // \xC1 - XK_CAP_A_CIRCUMFLEX = 0xC2, // \xC2 - XK_CAP_A_TILDE = 0xC3, // \xC3 - XK_CAP_A_DIAERESIS = 0xC4, // \xC4 - XK_CAP_A_RING = 0xC5, // \xC5 - XK_CAP_AE = 0xC6, // \xC6 - XK_CAP_C_CEDILLA = 0xC7, // \xC7 - XK_CAP_E_GRAVE = 0xC8, // \xC8 - XK_CAP_E_ACUTE = 0xC9, // \xC9 - XK_CAP_E_CIRCUMFLEX = 0xCA, // \xCA - XK_CAP_E_DIAERESIS = 0xCB, // \xCB - XK_CAP_I_GRAVE = 0xCC, // \xCC - XK_CAP_I_ACUTE = 0xCD, // \xCD - XK_CAP_I_CIRCUMFLEX = 0xCE, // \xCE - XK_CAP_I_DIAERESIS = 0xCF, // \xCF - XK_CAP_N_TILDE = 0xD1, // \xD1 - XK_CAP_O_GRAVE = 0xD2, // \xD2 - XK_CAP_O_ACUTE = 0xD3, // \xD3 - XK_CAP_O_CIRCUMFLEX = 0xD4, // \xD4 - XK_CAP_O_TILDE = 0xD5, // \xD5 - XK_CAP_O_DIAERESIS = 0xD6, // \xD6 - XK_CAP_O_STROKE = 0xD8, // \xD8 - XK_CAP_U_GRAVE = 0xD9, // \xD9 - XK_CAP_U_ACUTE = 0xDA, // \xDA - XK_CAP_U_CIRCUMFLEX = 0xDB, // \xDB - XK_CAP_U_DIAERESIS = 0xDC, // \xDC - XK_CAP_Y_ACUTE = 0xDD, // \xDD - XK_SM_SHARP_S = 0xDF, // \xDF - XK_SM_A_GRAVE = 0xE0, // \xE0 - XK_SM_A_ACUTE = 0xE1, // \xE1 - XK_SM_A_CIRCUMFLEX = 0xE2, // \xE2 - XK_SM_A_TILDE = 0xE3, // \xE3 - XK_SM_A_DIAERESIS = 0xE4, // \xE4 - XK_SM_A_RING = 0xE5, // \xE5 - XK_SM_AE = 0xE6, // \xE6 - XK_SM_C_CEDILLA = 0xE7, // \xE7 - XK_SM_E_GRAVE = 0xE8, // \xE8 - XK_SM_E_ACUTE = 0xE9, // \xE9 - XK_SM_E_CIRCUMFLEX = 0xEA, // \xEA - XK_SM_E_DIAERESIS = 0xEB, // \xEB - XK_SM_I_GRAVE = 0xEC, // \xEC - XK_SM_I_ACUTE = 0xED, // \xED - XK_SM_I_CIRCUMFLEX = 0xEE, // \xEE - XK_SM_I_DIAERESIS = 0xEF, // \xEF - XK_SM_N_TILDE = 0xF1, // \xF1 - XK_SM_O_GRAVE = 0xF2, // \xF2 - XK_SM_O_ACUTE = 0xF3, // \xF3 - XK_SM_O_CIRCUMFLEX = 0xF4, // \xF4 - XK_SM_O_TILDE = 0xF5, // \xF5 - XK_SM_O_DIAERESIS = 0xF6, // \xF6 - XK_SM_O_STROKE = 0xF8, // \xF8 - XK_SM_U_GRAVE = 0xF9, // \xF9 - XK_SM_U_ACUTE = 0xFA, // \xFA - XK_SM_U_CIRCUMFLEX = 0xFB, // \xFB - XK_SM_U_DIAERESIS = 0xFC, // \xFC - XK_SM_Y_ACUTE = 0xFD, // \xFD - XK_SM_Y_DIAERESIS = 0xFF, // \xFF - - // Unicode - XK_CAP_Y_DIAERESIS = 0x0178, // Y umlaut - XK_EURO_SIGN = 0x20AC, // Euro symbol - XK_ARROWLEFT = '<', // left arrow - XK_ARROWRIGHT = '>', // right arrow - - // Special - XK_BACKSPACE = 0x10000, // backspace - XK_DELETE, // delete // !!! - XK_SHIFT, // shift - XK_CAPSLOCK, // caps lock - XK_ALPHABET, // alphabet - XK_SYMBOLS, // symbols - XK_ACCENTS, // accents - XK_OK, // "done" - XK_HIRAGANA, // Hiragana - XK_KATAKANA, // Katakana - XK_ANS, // Alphabet/numeral/symbol - - // Special Search-Keys - XK_SEARCH_START_WITH = 0x11000, // to search music that starts with string - XK_SEARCH_CONTAINS, // ...contains string - XK_SEARCH_ENDS_WITH, // ...ends with string - XK_SEARCH_IS, // is the search text - XK_SEARCH_ALBUM, // search for album - XK_SEARCH_TITLE, // search for title - XK_SEARCH_ARTIST, // search for artist - XK_SEARCH_GENERE // search for genere - }; - - enum StringID - { - STR_MENU_KEYBOARD_NAME, - STR_MENU_CHOOSE_KEYBOARD, - STR_MENU_ILLUSTRATIVE_GRAPHICS, - STR_MENU_A_SELECT, - STR_MENU_B_BACK, - STR_MENU_Y_HELP, - STR_KEY_SPACE, - STR_KEY_BACKSPACE, - STR_KEY_SHIFT, - STR_KEY_CAPSLOCK, - STR_KEY_ALPHABET, - STR_KEY_SYMBOLS, - STR_KEY_ACCENTS, - STR_KEY_DONE, - STR_HELP_SELECT, - STR_HELP_CANCEL, - STR_HELP_TOGGLE, - STR_HELP_HELP, - STR_HELP_BACKSPACE, - STR_HELP_SPACE, - STR_HELP_TRIGGER, - - STR_MAX, - }; - #endregion - - - class Key - { - public Xkey xKey; // virtual key code - public int dwWidth = KEY_WIDTH; // width of the key - public string name = ""; // name of key when vKey >= 0x10000 - public Key(Xkey key) - { - xKey = key; - } - public Key(Xkey key, int iwidth) - { - xKey = key; - dwWidth = iwidth; - - // Special keys get their own names - switch (xKey) - { - case Xkey.XK_SPACE: - name = "SPACE"; - break; - case Xkey.XK_BACKSPACE: - name = "BKSP"; - break; - case Xkey.XK_SHIFT: - name = "SHIFT"; - break; - case Xkey.XK_CAPSLOCK: - name = "CAPS"; - break; - case Xkey.XK_ALPHABET: - name = "ALPHABET"; - break; - case Xkey.XK_SYMBOLS: - name = "SYMB"; - break; - case Xkey.XK_ACCENTS: - name = "ACCENTS"; - break; - case Xkey.XK_OK: - name = GUILocalizeStrings.Get(804); - break; - case Xkey.XK_SEARCH_CONTAINS: - name = GUILocalizeStrings.Get(801); - break; - case Xkey.XK_SEARCH_ENDS_WITH: - name = GUILocalizeStrings.Get(802); - break; - case Xkey.XK_SEARCH_START_WITH: - name = GUILocalizeStrings.Get(800); - break; - case Xkey.XK_SEARCH_IS: - name = GUILocalizeStrings.Get(803); - break; - } - } - }; - - #region variables - string _textEntered = ""; - bool _capsLockTurnedOn = false; - bool _shiftTurnedOn = false; - State _state; - int _position; - KeyboardTypes _currentKeyboard; - int _currentRow; - int _currentKey; - int _lastColumn; - //float m_fRepeatDelay; - CachedTexture.Frame _keyTexture = null; - float _keyHeight; - int _maxRows; - bool _pressedEnter; - GUIFont _font18 = null; - GUIFont _font12 = null; - GUIFont _fontButtons = null; - GUIFont _fontSearchText = null; - DateTime _caretTimer = DateTime.Now; - bool _previousOverlayVisible = true; - bool _password = false; - GUIImage image; - bool _useSearchLayout = false; - bool _locationChangedManually = false; - - // added by Agree - int _searchKind; // 0=Starts with, 1=Contains, 2=Ends with - // - - ArrayList _keyboardList = new ArrayList(); // list of rows = keyboard - - #endregion - - - #region Base Dialog Variables - bool _isVisible = false; - int _parentWindowId = 0; - GUIWindow _parentWindow = null; - #endregion - - // lets do some event stuff - public delegate void TextChangedEventHandler(int kindOfSearch, string evtData); - public event TextChangedEventHandler TextChanged; - // - - public NewVirtualKeyboard() - { - GetID = (int)GUIWindow.Window.WINDOW_VIRTUAL_KEYBOARD; - _capsLockTurnedOn = false; - _shiftTurnedOn = false; - _state = State.STATE_KEYBOARD; - _position = 0; - _currentKeyboard = KeyboardTypes.TYPE_ALPHABET; - _currentRow = 0; - _currentKey = 0; - _lastColumn = 0; - //m_fRepeatDelay = fINITIAL_REPEAT; - _keyTexture = null; - - int tempwidth = (int)(576.0f - 64.0f - 4.0f - 4.0f - 10.0f - 80.0f); - GUIGraphicsContext.ScaleHorizontal(ref tempwidth); - fTEXTBOX_WIDTH = tempwidth; - - SkinRatio = (float)GUIGraphicsContext.SkinSize.Width / 720.0f; - _keyHeight = 42.0f * SkinRatio; - _maxRows = 5; - _pressedEnter = false; - _caretTimer = DateTime.Now; - // construct search def. - _searchKind = (int)SearchKinds.SEARCH_CONTAINS; // default search Contains - - Location = new MediaPortal.Drawing.Point((int)(64 * SkinRatio), 250); - _locationChangedManually = false; - - if (GUIGraphicsContext.DX9Device != null) - InitBoard(); - } - - public override bool Init() - { - return true; - } - - public bool IsConfirmed - { - get { return _pressedEnter; } - } - - public bool IsSearchKeyboard - { - set { _useSearchLayout = value; } - } - - void Initialize() - { - _font12 = GUIFontManager.GetFont("font12"); - _font18 = GUIFontManager.GetFont("font18"); - _fontButtons = GUIFontManager.GetFont("dingbats"); - _fontSearchText = GUIFontManager.GetFont("font14"); - - int iTextureWidth, iTextureHeight; - int iImages = GUITextureManager.Load("keyNF.bmp", 0, 0, 0); - if (iImages == 1) - { - _keyTexture = GUITextureManager.GetTexture("keyNF.bmp", 0, out iTextureWidth, out iTextureHeight); - } - image = new GUIImage(this.GetID, 1, 0, 0, 10, 10, "white.bmp", 1); - image.AllocResources(); - } - - void DeInitialize() - { - if (image != null) image.FreeResources(); - image = null; - } - - public void Reset() - { - _password = false; - _pressedEnter = false; - _capsLockTurnedOn = false; - _shiftTurnedOn = false; - _state = State.STATE_KEYBOARD; - _position = 0; - _currentKeyboard = KeyboardTypes.TYPE_ALPHABET; - _currentRow = 0; - _currentKey = 0; - _lastColumn = 0; - //m_fRepeatDelay = fINITIAL_REPEAT; - _keyHeight = 42.0f * SkinRatio; - _maxRows = 5; - _position = 0; - _textEntered = ""; - _caretTimer = DateTime.Now; - - _searchKind = (int)SearchKinds.SEARCH_CONTAINS; // default search Contains - - int y = 411; - int x = 40; - - GUIGraphicsContext.ScalePosToScreenResolution(ref x, ref y); - BUTTON_Y_POS = x; // button text line - BUTTON_X_OFFSET = y; // space between button and text - - int width = (int)(42 * SkinRatio); - GUIGraphicsContext.ScaleVertical(ref width); - _keyHeight = width; - - width = (int)(576.0f - 64.0f - 4.0f - 4.0f - 10.0f - 80.0f); - GUIGraphicsContext.ScaleHorizontal(ref width); - fTEXTBOX_WIDTH = width; - - Location = new MediaPortal.Drawing.Point((int)(64 * SkinRatio), 250); - _locationChangedManually = false; - - InitBoard(); - } - - public void SetLocation(MediaPortal.Drawing.Point location) - { - Location = location; - _locationChangedManually = true; - } - - public bool Password - { - get { return _password; } - set { _password = value; } - } - - protected void PageLoad() - { - _previousOverlayVisible = GUIGraphicsContext.Overlay; - _pressedEnter = false; - GUIGraphicsContext.Overlay = false; - GUIPropertyManager.SetProperty("#currentmodule", GUILocalizeStrings.Get(100000 + (int)GUIWindow.Window.WINDOW_VIRTUAL_KEYBOARD)); - Log.Debug("Window: {0} init", this.ToString()); - Initialize(); - } - - protected void PageDestroy() - { - GUIGraphicsContext.Overlay = _previousOverlayVisible; - DeInitialize(); - - Log.Debug("Window: {0} deinit", this.ToString()); - FreeResources(); - } - - public string Text - { - get { return _textEntered; } - set { _textEntered = value; } - } - - public int KindOfSearch - { - get { return _searchKind; } - set - { - _searchKind = value; - SetSearchKind(); - } - } - - public void SelectActiveButton(float x, float y) - { - // Draw each row - int x1 = (int)(Location.X); - int y1 = (int)Location.Y + 42; - //int y1 = 250, x1 = 64; - GUIGraphicsContext.ScalePosToScreenResolution(ref x1, ref y1); - float fY = y1; - ArrayList keyBoard = (ArrayList)_keyboardList[(int)_currentKeyboard]; - for (int row = 0; row < _maxRows; ++row, fY += _keyHeight) - { - float fX = x1; - float fWidthSum = 0.0f; - ArrayList keyRow = (ArrayList)keyBoard[row]; - int dwIndex = 0; - for (int i = 0; i < keyRow.Count; i++) - { - Key key = (Key)keyRow[i]; - int width = (int)(key.dwWidth * SkinRatio); - GUIGraphicsContext.ScaleHorizontal(ref width); - if (x >= fX + fWidthSum && x <= fX + fWidthSum + width) - { - if (y >= fY && y < fY + _keyHeight) - { - _currentRow = row; - _currentKey = dwIndex; - return; - } - } - fWidthSum += width; - // There's a slightly larger gap between the leftmost keys (mode - // keys) and the main keyboard - if (dwIndex == 0) - { - width = (int)(GAP2_WIDTH * SkinRatio); - GUIGraphicsContext.ScaleHorizontal(ref width); - fWidthSum += width; - } - else - { - width = GAP_WIDTH; - GUIGraphicsContext.ScaleHorizontal(ref width); - fWidthSum += width; - } - ++dwIndex; - - } - } - - // Default no key found no key highlighted - if (_currentKey != -1) _lastColumn = _currentKey; - _currentKey = -1; - } - - void ProcessSmsInsertion(int keyPressed) - { - if (smsLastKeyPressTime + 1500 < System.Environment.TickCount || smsLastKeyPressed != keyPressed) - { - smsLastKeyInternalPos = 0; - - string tmpKeys = smsKeyMap[keyPressed]; - if (_shiftTurnedOn) tmpKeys = tmpKeys.ToUpper(); - smsLastShiftState = _shiftTurnedOn; - char tmpChar = tmpKeys[smsLastKeyInternalPos]; - - Action tmpAction = new Action(new MediaPortal.GUI.Library.Key(tmpChar, (int)tmpChar), Action.ActionType.ACTION_KEY_PRESSED, 0, 0); - OnAction(tmpAction); - } - else - { - smsLastKeyInternalPos++; - if (smsLastKeyInternalPos >= smsKeyMap[keyPressed].Length) smsLastKeyInternalPos = 0; - - Press(Xkey.XK_BACKSPACE); - - string tmpKeys = smsKeyMap[keyPressed]; - if (smsLastShiftState) tmpKeys = tmpKeys.ToUpper(); - char tmpChar = tmpKeys[smsLastKeyInternalPos]; - - Action tmpAction = new Action(new MediaPortal.GUI.Library.Key(tmpChar, (int)tmpChar), Action.ActionType.ACTION_KEY_PRESSED, 0, 0); - - OnAction(tmpAction); - } - smsLastKeyPressed = keyPressed; - smsLastKeyPressTime = System.Environment.TickCount; - } - - public override void OnAction(Action action) - { - if (action.wID == Action.ActionType.ACTION_CLOSE_DIALOG || action.wID == Action.ActionType.ACTION_PREVIOUS_MENU || action.wID == Action.ActionType.ACTION_CONTEXT_MENU) - { - Close(); - return; - } - - if (UseSmsStyleTextIsertion) - { - # region if you have no remote at but want to test the function uncomment this (don't wonder about the backspace thingy it not there with a real remote) - //switch (action.wID) - //{ - // case Action.ActionType.ACTION_KEY_PRESSED: - // Action tmpAction = null; - // if (action.m_key.KeyChar == '0') tmpAction = new Action(Action.ActionType.REMOTE_0, 0, 0); - // if (action.m_key.KeyChar == '1') tmpAction = new Action(Action.ActionType.REMOTE_1, 0, 0); - // if (action.m_key.KeyChar == '2') tmpAction = new Action(Action.ActionType.REMOTE_2, 0, 0); - // if (action.m_key.KeyChar == '3') tmpAction = new Action(Action.ActionType.REMOTE_3, 0, 0); - // if (action.m_key.KeyChar == '4') tmpAction = new Action(Action.ActionType.REMOTE_4, 0, 0); - // if (action.m_key.KeyChar == '5') tmpAction = new Action(Action.ActionType.REMOTE_5, 0, 0); - // if (action.m_key.KeyChar == '6') tmpAction = new Action(Action.ActionType.REMOTE_6, 0, 0); - // if (action.m_key.KeyChar == '7') tmpAction = new Action(Action.ActionType.REMOTE_7, 0, 0); - // if (action.m_key.KeyChar == '8') tmpAction = new Action(Action.ActionType.REMOTE_8, 0, 0); - // if (action.m_key.KeyChar == '9') tmpAction = new Action(Action.ActionType.REMOTE_9, 0, 0); - // if (tmpAction != null) - // { - // OnAction(tmpAction); - // return; - // } - // break; - //} - #endregion - - switch (action.wID) - { - case Action.ActionType.REMOTE_0: - ProcessSmsInsertion(0); - break; - case Action.ActionType.REMOTE_1: - ProcessSmsInsertion(1); - break; - case Action.ActionType.REMOTE_2: - ProcessSmsInsertion(2); - break; - case Action.ActionType.REMOTE_3: - ProcessSmsInsertion(3); - break; - case Action.ActionType.REMOTE_4: - ProcessSmsInsertion(4); - break; - case Action.ActionType.REMOTE_5: - ProcessSmsInsertion(5); - break; - case Action.ActionType.REMOTE_6: - ProcessSmsInsertion(6); - break; - case Action.ActionType.REMOTE_7: - ProcessSmsInsertion(7); - break; - case Action.ActionType.REMOTE_8: - ProcessSmsInsertion(8); - break; - case Action.ActionType.REMOTE_9: - ProcessSmsInsertion(9); - break; - case Action.ActionType.ACTION_MOVE_LEFT: - if (_currentKey == 0) - { - Press(Xkey.XK_BACKSPACE); - return; - } - break; - case Action.ActionType.ACTION_MOVE_UP: - if (_currentRow == 0) - { - _shiftTurnedOn = !_shiftTurnedOn; - return; - } - break; - } - - } - - Event ev; - switch (action.wID) - { - case Action.ActionType.ACTION_MOUSE_MOVE: - SelectActiveButton(action.fAmount1, action.fAmount2); - break; - case Action.ActionType.ACTION_MOUSE_CLICK: - ev = Event.EV_A_BUTTON; - UpdateState(ev); - break; - - case Action.ActionType.ACTION_SELECT_ITEM: - if (_currentKey == -1) - { - Close(); - _pressedEnter = true; - } - ev = Event.EV_A_BUTTON; - UpdateState(ev); - break; - - case Action.ActionType.ACTION_MOVE_DOWN: - ev = Event.EV_DOWN; - UpdateState(ev); - break; - - case Action.ActionType.ACTION_MOVE_UP: - ev = Event.EV_UP; - UpdateState(ev); - break; - - case Action.ActionType.ACTION_MOVE_LEFT: - ev = Event.EV_LEFT; - UpdateState(ev); - break; - - case Action.ActionType.ACTION_MOVE_RIGHT: - ev = Event.EV_RIGHT; - UpdateState(ev); - break; - - case Action.ActionType.ACTION_PREVIOUS_MENU: - ev = Event.EV_BACK_BUTTON; - UpdateState(ev); - break; - - case Action.ActionType.ACTION_KEY_PRESSED: - if (action.m_key != null) - { - if (action.m_key.KeyChar >= 32) - Press((char)action.m_key.KeyChar); - if (action.m_key.KeyChar == 8) - { - Press(Xkey.XK_BACKSPACE); - } - } - break; - } - } - void Close() - { - _isVisible = false; - } - - public void DoModal(int dwParentId) - { - - _parentWindowId = dwParentId; - _parentWindow = GUIWindowManager.GetWindow(_parentWindowId); - if (null == _parentWindow) - { - _parentWindowId = 0; - return; - } - GUIWindowManager.IsSwitchingToNewWindow = true; - - GUIWindowManager.RouteToWindow(GetID); - - GUILayerManager.RegisterLayer(this, GUILayerManager.LayerType.Dialog); - - // active this window... (with its own OnPageLoad) - PageLoad(); - - GUIWindowManager.IsSwitchingToNewWindow = false; - _isVisible = true; - _position = _textEntered.Length; - while (_isVisible && GUIGraphicsContext.CurrentState == GUIGraphicsContext.State.RUNNING) - { - GUIWindowManager.Process(); - } - - GUIWindowManager.IsSwitchingToNewWindow = true; - lock (this) - { - // deactive this window... (with its own OnPageDestroy) - PageDestroy(); - - GUIWindowManager.UnRoute(); - _parentWindow = null; - } - GUIWindowManager.IsSwitchingToNewWindow = false; - GUILayerManager.UnRegisterLayer(this); - } - - public override void Render(float timePassed) - { - - lock (this) - { - - // render the parent window - RenderKeyboardLatin(timePassed); - } - } - - void InitBoard() - { - if (_useSearchLayout) - MODEKEY_WIDTH = 130; // Searchkeyboard - - // Restore keyboard to default state - _currentRow = 0; - _currentKey = 0; - _lastColumn = 1; - _currentKeyboard = KeyboardTypes.TYPE_ALPHABET; - _capsLockTurnedOn = false; - _shiftTurnedOn = false; - _textEntered = ""; - _position = 0; - int height = (int)(42 * SkinRatio); - GUIGraphicsContext.ScaleVertical(ref height); - _keyHeight = height; - _maxRows = 5; - - // Destroy old keyboard - _keyboardList.Clear(); - - - //------------------------------------------------------------------------- - // Alpha keyboard - //------------------------------------------------------------------------- - - ArrayList keyBoard = new ArrayList(); - - // First row is Done, 1-0 - ArrayList keyRow = new ArrayList(); - keyRow.Add(new Key(Xkey.XK_OK, MODEKEY_WIDTH)); - keyRow.Add(new Key(Xkey.XK_1)); - keyRow.Add(new Key(Xkey.XK_2)); - keyRow.Add(new Key(Xkey.XK_3)); - keyRow.Add(new Key(Xkey.XK_4)); - keyRow.Add(new Key(Xkey.XK_5)); - keyRow.Add(new Key(Xkey.XK_6)); - keyRow.Add(new Key(Xkey.XK_7)); - keyRow.Add(new Key(Xkey.XK_8)); - keyRow.Add(new Key(Xkey.XK_9)); - keyRow.Add(new Key(Xkey.XK_0)); - - keyBoard.Add(keyRow); - - // Second row is Shift, A-J - keyRow = new ArrayList(); - - if (_useSearchLayout) - keyRow.Add(new Key(Xkey.XK_SEARCH_CONTAINS, MODEKEY_WIDTH)); // Searchkeyboard - else - keyRow.Add(new Key(Xkey.XK_SHIFT, MODEKEY_WIDTH)); - - keyRow.Add(new Key(Xkey.XK_A)); - keyRow.Add(new Key(Xkey.XK_B)); - keyRow.Add(new Key(Xkey.XK_C)); - keyRow.Add(new Key(Xkey.XK_D)); - keyRow.Add(new Key(Xkey.XK_E)); - keyRow.Add(new Key(Xkey.XK_F)); - keyRow.Add(new Key(Xkey.XK_G)); - keyRow.Add(new Key(Xkey.XK_H)); - keyRow.Add(new Key(Xkey.XK_I)); - keyRow.Add(new Key(Xkey.XK_J)); - keyBoard.Add(keyRow); - - // Third row is Caps Lock, K-T - keyRow = new ArrayList(); - - if (_useSearchLayout) - keyRow.Add(new Key(Xkey.XK_SHIFT, MODEKEY_WIDTH)); // Searchkeyboard - else - keyRow.Add(new Key(Xkey.XK_CAPSLOCK, MODEKEY_WIDTH)); - - keyRow.Add(new Key(Xkey.XK_K)); - keyRow.Add(new Key(Xkey.XK_L)); - keyRow.Add(new Key(Xkey.XK_M)); - keyRow.Add(new Key(Xkey.XK_N)); - keyRow.Add(new Key(Xkey.XK_O)); - keyRow.Add(new Key(Xkey.XK_P)); - keyRow.Add(new Key(Xkey.XK_Q)); - keyRow.Add(new Key(Xkey.XK_R)); - keyRow.Add(new Key(Xkey.XK_S)); - keyRow.Add(new Key(Xkey.XK_T)); - keyBoard.Add(keyRow); - - // Fourth row is Symbols, U-Z, Backspace - keyRow = new ArrayList(); - - if (_useSearchLayout) - keyRow.Add(new Key(Xkey.XK_CAPSLOCK, MODEKEY_WIDTH)); // Searchkeyboard - else - keyRow.Add(new Key(Xkey.XK_ACCENTS, MODEKEY_WIDTH)); - - keyRow.Add(new Key(Xkey.XK_U)); - keyRow.Add(new Key(Xkey.XK_V)); - keyRow.Add(new Key(Xkey.XK_W)); - keyRow.Add(new Key(Xkey.XK_X)); - keyRow.Add(new Key(Xkey.XK_Y)); - keyRow.Add(new Key(Xkey.XK_Z)); - keyRow.Add(new Key(Xkey.XK_BACKSPACE, (KEY_WIDTH * 4) + (GAP_WIDTH * 3))); - keyBoard.Add(keyRow); - - // Fifth row is Accents, Space, Left, Right - keyRow = new ArrayList(); - - if (_useSearchLayout) - keyRow.Add(new Key(Xkey.XK_ACCENTS, MODEKEY_WIDTH)); // Searchkeyboard - else - keyRow.Add(new Key(Xkey.XK_NULL, MODEKEY_WIDTH)); - - keyRow.Add(new Key(Xkey.XK_SPACE, (KEY_WIDTH * 6) + (GAP_WIDTH * 5))); - keyRow.Add(new Key(Xkey.XK_ARROWLEFT, (KEY_WIDTH * 2) + (GAP_WIDTH * 1))); - keyRow.Add(new Key(Xkey.XK_ARROWRIGHT, (KEY_WIDTH * 2) + (GAP_WIDTH * 1))); - keyBoard.Add(keyRow); - - // Add the alpha keyboard to the list - _keyboardList.Add(keyBoard); - - //------------------------------------------------------------------------- - // Symbol keyboard - //------------------------------------------------------------------------- - - keyBoard = new ArrayList(); - - // First row - keyRow = new ArrayList(); - keyRow.Add(new Key(Xkey.XK_OK, MODEKEY_WIDTH)); - keyRow.Add(new Key(Xkey.XK_LPAREN)); - keyRow.Add(new Key(Xkey.XK_RPAREN)); - keyRow.Add(new Key(Xkey.XK_AMPER)); - keyRow.Add(new Key(Xkey.XK_UNDERS)); - keyRow.Add(new Key(Xkey.XK_CARET)); - keyRow.Add(new Key(Xkey.XK_PERCENT)); - keyRow.Add(new Key(Xkey.XK_BSLASH)); - keyRow.Add(new Key(Xkey.XK_FSLASH)); - keyRow.Add(new Key(Xkey.XK_AT)); - keyRow.Add(new Key(Xkey.XK_NSIGN)); - - keyBoard.Add(keyRow); - - // Second row - keyRow = new ArrayList(); - - if (_useSearchLayout) - keyRow.Add(new Key(Xkey.XK_SEARCH_CONTAINS, MODEKEY_WIDTH)); // Searchkeyboard - else - keyRow.Add(new Key(Xkey.XK_SHIFT, MODEKEY_WIDTH)); - - keyRow.Add(new Key(Xkey.XK_LBRACK)); - keyRow.Add(new Key(Xkey.XK_RBRACK)); - keyRow.Add(new Key(Xkey.XK_DOLLAR)); - keyRow.Add(new Key(Xkey.XK_POUND_SIGN)); - keyRow.Add(new Key(Xkey.XK_YEN_SIGN)); - keyRow.Add(new Key(Xkey.XK_EURO_SIGN)); - keyRow.Add(new Key(Xkey.XK_SEMI)); - keyRow.Add(new Key(Xkey.XK_COLON)); - keyRow.Add(new Key(Xkey.XK_QUOTE)); - keyRow.Add(new Key(Xkey.XK_DQUOTE)); - keyBoard.Add(keyRow); - - // Third row - keyRow = new ArrayList(); - - if (_useSearchLayout) - keyRow.Add(new Key(Xkey.XK_SHIFT, MODEKEY_WIDTH)); // Searchkeyboard - else - keyRow.Add(new Key(Xkey.XK_CAPSLOCK, MODEKEY_WIDTH)); - - keyRow.Add(new Key(Xkey.XK_LT)); - keyRow.Add(new Key(Xkey.XK_GT)); - keyRow.Add(new Key(Xkey.XK_QMARK)); - keyRow.Add(new Key(Xkey.XK_EXCL)); - keyRow.Add(new Key(Xkey.XK_INVERTED_QMARK)); - keyRow.Add(new Key(Xkey.XK_INVERTED_EXCL)); - keyRow.Add(new Key(Xkey.XK_DASH)); - keyRow.Add(new Key(Xkey.XK_STAR)); - keyRow.Add(new Key(Xkey.XK_PLUS)); - keyRow.Add(new Key(Xkey.XK_EQUAL)); - keyBoard.Add(keyRow); - - // Fourth row - keyRow = new ArrayList(); - - if (_useSearchLayout) - keyRow.Add(new Key(Xkey.XK_CAPSLOCK, MODEKEY_WIDTH)); // Searchkeyboard - else - keyRow.Add(new Key(Xkey.XK_ALPHABET, MODEKEY_WIDTH)); - - keyRow.Add(new Key(Xkey.XK_LBRACE)); - keyRow.Add(new Key(Xkey.XK_RBRACE)); - keyRow.Add(new Key(Xkey.XK_LT_DBL_ANGLE_QUOTE)); - keyRow.Add(new Key(Xkey.XK_RT_DBL_ANGLE_QUOTE)); - keyRow.Add(new Key(Xkey.XK_COMMA)); - keyRow.Add(new Key(Xkey.XK_PERIOD)); - keyRow.Add(new Key(Xkey.XK_BACKSPACE, (KEY_WIDTH * 4) + (GAP_WIDTH * 3))); - keyBoard.Add(keyRow); - - // Fifth row is Accents, Space, Left, Right - keyRow = new ArrayList(); - - if (_useSearchLayout) - keyRow.Add(new Key(Xkey.XK_ALPHABET, MODEKEY_WIDTH)); // Searchkeyboard - else - keyRow.Add(new Key(Xkey.XK_NULL, MODEKEY_WIDTH)); - - keyRow.Add(new Key(Xkey.XK_SPACE, (KEY_WIDTH * 6) + (GAP_WIDTH * 5))); - keyRow.Add(new Key(Xkey.XK_ARROWLEFT, (KEY_WIDTH * 2) + (GAP_WIDTH * 1))); - keyRow.Add(new Key(Xkey.XK_ARROWRIGHT, (KEY_WIDTH * 2) + (GAP_WIDTH * 1))); - keyBoard.Add(keyRow); - - // Add the symbol keyboard to the list - _keyboardList.Add(keyBoard); - - //------------------------------------------------------------------------- - // Accents keyboard - //------------------------------------------------------------------------- - - keyBoard = new ArrayList(); - - // First row - keyRow = new ArrayList(); - // Swedish - Finnish - keyRow.Add(new Key(Xkey.XK_OK, MODEKEY_WIDTH)); - keyRow.Add(new Key(Xkey.XK_CAP_A_RING)); - keyRow.Add(new Key(Xkey.XK_CAP_A_DIAERESIS)); - keyRow.Add(new Key(Xkey.XK_CAP_O_DIAERESIS)); - keyRow.Add(new Key(Xkey.XK_CAP_A_GRAVE)); - keyRow.Add(new Key(Xkey.XK_CAP_A_ACUTE)); - keyRow.Add(new Key(Xkey.XK_CAP_A_CIRCUMFLEX)); - keyRow.Add(new Key(Xkey.XK_CAP_I_GRAVE)); - keyRow.Add(new Key(Xkey.XK_CAP_I_ACUTE)); - keyRow.Add(new Key(Xkey.XK_CAP_I_CIRCUMFLEX)); - keyRow.Add(new Key(Xkey.XK_CAP_I_DIAERESIS)); - keyBoard.Add(keyRow); - - // Second row - keyRow = new ArrayList(); - - if (_useSearchLayout) - keyRow.Add(new Key(Xkey.XK_SEARCH_CONTAINS, MODEKEY_WIDTH)); // Searchkeyboard - else - keyRow.Add(new Key(Xkey.XK_SHIFT, MODEKEY_WIDTH)); - - //Danish - Norwegian - keyRow.Add(new Key(Xkey.XK_CAP_A_RING)); - keyRow.Add(new Key(Xkey.XK_CAP_AE)); - keyRow.Add(new Key(Xkey.XK_CAP_O_STROKE)); - keyRow.Add(new Key(Xkey.XK_CAP_C_CEDILLA)); - keyRow.Add(new Key(Xkey.XK_CAP_E_GRAVE)); - keyRow.Add(new Key(Xkey.XK_CAP_E_ACUTE)); - keyRow.Add(new Key(Xkey.XK_CAP_E_CIRCUMFLEX)); - keyRow.Add(new Key(Xkey.XK_CAP_E_DIAERESIS)); - - keyBoard.Add(keyRow); - - // Third row - keyRow = new ArrayList(); - - if (_useSearchLayout) - keyRow.Add(new Key(Xkey.XK_SHIFT, MODEKEY_WIDTH)); // Searchkeyboard - else - keyRow.Add(new Key(Xkey.XK_CAPSLOCK, MODEKEY_WIDTH)); - - // German - keyRow.Add(new Key(Xkey.XK_CAP_U_DIAERESIS)); - keyRow.Add(new Key(Xkey.XK_CAP_O_DIAERESIS)); - keyRow.Add(new Key(Xkey.XK_CAP_A_DIAERESIS)); - keyRow.Add(new Key(Xkey.XK_SM_SHARP_S)); - keyRow.Add(new Key(Xkey.XK_CAP_O_GRAVE)); - keyRow.Add(new Key(Xkey.XK_CAP_O_ACUTE)); - keyRow.Add(new Key(Xkey.XK_CAP_O_CIRCUMFLEX)); - keyRow.Add(new Key(Xkey.XK_CAP_O_TILDE)); - - keyBoard.Add(keyRow); - - // Fourth row - keyRow = new ArrayList(); - - if (_useSearchLayout) - keyRow.Add(new Key(Xkey.XK_CAPSLOCK, MODEKEY_WIDTH)); // Searchkeyboard - else - keyRow.Add(new Key(Xkey.XK_SYMBOLS, MODEKEY_WIDTH)); - - keyRow.Add(new Key(Xkey.XK_CAP_N_TILDE)); - keyRow.Add(new Key(Xkey.XK_CAP_U_GRAVE)); - keyRow.Add(new Key(Xkey.XK_CAP_U_ACUTE)); - keyRow.Add(new Key(Xkey.XK_CAP_U_CIRCUMFLEX)); - - keyRow.Add(new Key(Xkey.XK_CAP_Y_ACUTE)); - keyRow.Add(new Key(Xkey.XK_CAP_Y_DIAERESIS)); - keyRow.Add(new Key(Xkey.XK_BACKSPACE, (KEY_WIDTH * 4) + (GAP_WIDTH * 3))); - keyBoard.Add(keyRow); - - // Fifth row - keyRow = new ArrayList(); - - if (_useSearchLayout) - keyRow.Add(new Key(Xkey.XK_SYMBOLS, MODEKEY_WIDTH)); // Searchkeyboard - else - keyRow.Add(new Key(Xkey.XK_NULL, MODEKEY_WIDTH)); - - keyRow.Add(new Key(Xkey.XK_SPACE, (KEY_WIDTH * 6) + (GAP_WIDTH * 5))); - keyRow.Add(new Key(Xkey.XK_ARROWLEFT, (KEY_WIDTH * 2) + (GAP_WIDTH * 1))); - keyRow.Add(new Key(Xkey.XK_ARROWRIGHT, (KEY_WIDTH * 2) + (GAP_WIDTH * 1))); - keyBoard.Add(keyRow); - - // Add the accents keyboard to the list - _keyboardList.Add(keyBoard); - - } - - void UpdateState(Event ev) - { - switch (_state) - { - case State.STATE_KEYBOARD: - switch (ev) - { - case Event.EV_A_BUTTON: // Select current key - case Event.EV_START_BUTTON: - PressCurrent(); - break; - - case Event.EV_B_BUTTON: // Shift mode - case Event.EV_BACK_BUTTON: // Back - _state = State.STATE_BACK; - Close(); //Added by JM to close automatically - break; - - case Event.EV_X_BUTTON: // Toggle keyboard - Press(_currentKeyboard == KeyboardTypes.TYPE_SYMBOLS ? Xkey.XK_ALPHABET : Xkey.XK_SYMBOLS); - break; - case Event.EV_WHITE_BUTTON: // Backspace - Press(Xkey.XK_BACKSPACE); - break; - case Event.EV_BLACK_BUTTON: // Space - Press(Xkey.XK_SPACE); - break; - case Event.EV_LEFT_BUTTON: // Left - Press(Xkey.XK_ARROWLEFT); - break; - case Event.EV_RIGHT_BUTTON: // Right - Press(Xkey.XK_ARROWRIGHT); - break; - - // Navigation - case Event.EV_UP: MoveUp(); break; - case Event.EV_DOWN: MoveDown(); break; - case Event.EV_LEFT: MoveLeft(); break; - case Event.EV_RIGHT: MoveRight(); break; - } - break; - default: - Close(); - break; - } - } - - void ChangeKey(int iBoard, int iRow, int iKey, Key newkey) - { - ArrayList board = (ArrayList)_keyboardList[iBoard]; - ArrayList row = (ArrayList)board[iRow]; - row[iKey] = newkey; - } - - void PressCurrent() - { - if (_currentKey == -1) return; - - ArrayList board = (ArrayList)_keyboardList[(int)_currentKeyboard]; - ArrayList row = (ArrayList)board[_currentRow]; - Key key = (Key)row[_currentKey]; - - // Press it - Press(key.xKey); - } - - void Press(char k) - { - // Don't add more than the maximum characters, and don't allow - // text to exceed the width of the text entry field - if (_textEntered.Length < MAX_CHARS) - { - float fWidth = 0, fHeight = 0; - _fontSearchText.GetTextExtent(_textEntered, ref fWidth, ref fHeight); - - if (fWidth < (fTEXTBOX_WIDTH * SkinRatio)) - { - if (_position >= _textEntered.Length) - { - _textEntered += k.ToString(); - if (TextChanged != null) TextChanged(_searchKind, _textEntered); - } - else - { - _textEntered = _textEntered.Insert(_position, k.ToString()); - if (TextChanged != null) TextChanged(_searchKind, _textEntered); - } - ++_position; // move the caret - } - } - - // Unstick the shift key - _shiftTurnedOn = false; - } - - void Press(Xkey xk) - { - - if (xk == Xkey.XK_NULL) // happens in Japanese keyboard (keyboard type) - xk = Xkey.XK_SPACE; - - // If the key represents a character, add it to the word - if (((uint)xk) < 0x10000 && xk != Xkey.XK_ARROWLEFT && xk != Xkey.XK_ARROWRIGHT) - { - // Don't add more than the maximum characters, and don't allow - // text to exceed the width of the text entry field - if (_textEntered.Length < MAX_CHARS) - { - float fWidth = 0, fHeight = 0; - _fontSearchText.GetTextExtent(_textEntered, ref fWidth, ref fHeight); - - if (fWidth < (fTEXTBOX_WIDTH * SkinRatio)) - { - if (_position >= _textEntered.Length) - { - _textEntered += GetChar(xk).ToString(); - if (TextChanged != null) TextChanged(_searchKind, _textEntered); - } - else - { - _textEntered = _textEntered.Insert(_position, GetChar(xk).ToString()); - if (TextChanged != null) TextChanged(_searchKind, _textEntered); - } - ++_position; // move the caret - } - } - - // Unstick the shift key - _shiftTurnedOn = false; - } - - // Special cases - else switch (xk) - { - case Xkey.XK_BACKSPACE: - if (_position > 0) - { - --_position; // move the caret - _textEntered = _textEntered.Remove(_position, 1); - if (TextChanged != null) TextChanged(_searchKind, _textEntered); - } - break; - case Xkey.XK_DELETE: // Used for Japanese only - if (_textEntered.Length > 0) - { - _textEntered = _textEntered.Remove(_position, 1); - if (TextChanged != null) TextChanged(_searchKind, _textEntered); - } - break; - case Xkey.XK_SHIFT: - _shiftTurnedOn = !_shiftTurnedOn; - break; - case Xkey.XK_CAPSLOCK: - _capsLockTurnedOn = !_capsLockTurnedOn; - break; - case Xkey.XK_ALPHABET: - _currentKeyboard = KeyboardTypes.TYPE_ALPHABET; - break; - case Xkey.XK_SYMBOLS: - _currentKeyboard = KeyboardTypes.TYPE_SYMBOLS; - break; - case Xkey.XK_ACCENTS: - _currentKeyboard = KeyboardTypes.TYPE_ACCENTS; - break; - case Xkey.XK_ARROWLEFT: - if (_position > 0) - --_position; - break; - case Xkey.XK_ARROWRIGHT: - if (_position < _textEntered.Length) - ++_position; - break; - case Xkey.XK_OK: - Close(); - _pressedEnter = true; - break; - // added to the original code VirtualKeyboard.cs - // by Agree - // starts here... - - case Xkey.XK_SEARCH_IS: - _searchKind = (int)SearchKinds.SEARCH_STARTS_WITH; - SetSearchKind(); - break; - - case Xkey.XK_SEARCH_CONTAINS: - _searchKind = (int)SearchKinds.SEARCH_ENDS_WITH; - SetSearchKind(); - break; - - case Xkey.XK_SEARCH_ENDS_WITH: - _searchKind = (int)SearchKinds.SEARCH_IS; - SetSearchKind(); - break; - - case Xkey.XK_SEARCH_START_WITH: - _searchKind = (int)SearchKinds.SEARCH_CONTAINS; - SetSearchKind(); - break; - // code by Agree ends here - // - } - } - - void SetSearchKind() - { - switch (_searchKind) - { - case (int)SearchKinds.SEARCH_STARTS_WITH: - ChangeKey((int)_currentKeyboard, 1, 0, new Key(Xkey.XK_SEARCH_START_WITH, MODEKEY_WIDTH)); - break; - - case (int)SearchKinds.SEARCH_ENDS_WITH: - ChangeKey((int)_currentKeyboard, 1, 0, new Key(Xkey.XK_SEARCH_ENDS_WITH, MODEKEY_WIDTH)); - break; - - case (int)SearchKinds.SEARCH_IS: - ChangeKey((int)_currentKeyboard, 1, 0, new Key(Xkey.XK_SEARCH_IS, MODEKEY_WIDTH)); - break; - - case (int)SearchKinds.SEARCH_CONTAINS: - ChangeKey((int)_currentKeyboard, 1, 0, new Key(Xkey.XK_SEARCH_CONTAINS, MODEKEY_WIDTH)); - break; - } - if (TextChanged != null) TextChanged(_searchKind, _textEntered); - } - - void MoveUp() - { - if (_currentKey == -1) _currentKey = _lastColumn; - - do - { - // Update key index for special cases - switch (_currentRow) - { - case 0: - if (1 < _currentKey && _currentKey < 7) // 2 - 6 - { - _lastColumn = _currentKey; // remember column - _currentKey = 1; // move to spacebar - } - else if (6 < _currentKey && _currentKey < 9) // 7 - 8 - { - _lastColumn = _currentKey; // remember column - _currentKey = 2; // move to left arrow - } - else if (_currentKey > 8) // 9 - 0 - { - _lastColumn = _currentKey; // remember column - _currentKey = 3; // move to right arrow - } - break; - case 3: - if (_currentKey == 7) // backspace - _currentKey = Math.Max(7, _lastColumn); // restore column - break; - case 4: - if (_currentKey == 1) // spacebar - _currentKey = Math.Min(6, _lastColumn); // restore column - else if (_currentKey > 1) // left and right - _currentKey = 7; // backspace - break; - } - - // Update row - _currentRow = (_currentRow == 0) ? _maxRows - 1 : _currentRow - 1; - - } while (IsKeyDisabled()); - } - - void MoveDown() - { - if (_currentKey == -1) _currentKey = _lastColumn; - - do - { - // Update key index for special cases - switch (_currentRow) - { - case 2: - if (_currentKey > 7) // q - t - { - _lastColumn = _currentKey; // remember column - _currentKey = 7; // move to backspace - } - break; - case 3: - if (0 < _currentKey && _currentKey < 7) // u - z - { - _lastColumn = _currentKey; // remember column - _currentKey = 1; // move to spacebar - } - else if (_currentKey > 6) // backspace - { - if (_lastColumn > 8) - _currentKey = 3; // move to right arrow - else - _currentKey = 2; // move to left arrow - } - break; - case 4: - switch (_currentKey) - { - case 1: // spacebar - _currentKey = Math.Min(6, _lastColumn); - break; - case 2: // left arrow - _currentKey = Math.Max(Math.Min(8, _lastColumn), 7); - break; - case 3: // right arrow - _currentKey = Math.Max(9, _lastColumn); - break; - } - break; - } - - // Update row - _currentRow = (_currentRow == _maxRows - 1) ? 0 : _currentRow + 1; - - } while (IsKeyDisabled()); - } - - void MoveLeft() - { - if (_currentKey == -1) _currentKey = _lastColumn; - - do - { - if (_currentKey <= 0) - { - ArrayList board = (ArrayList)_keyboardList[(int)_currentKeyboard]; - ArrayList row = (ArrayList)board[_currentRow]; - _currentKey = row.Count - 1; - - } - else - --_currentKey; - - } while (IsKeyDisabled()); - - SetLastColumn(); - } - - void MoveRight() - { - if (_currentKey == -1) _currentKey = _lastColumn; - - do - { - ArrayList board = (ArrayList)_keyboardList[(int)_currentKeyboard]; - ArrayList row = (ArrayList)board[_currentRow]; - - if (_currentKey == row.Count - 1) - _currentKey = 0; - else - ++_currentKey; - - } while (IsKeyDisabled()); - - SetLastColumn(); - } - - void SetLastColumn() - { - if (_currentKey == -1) return; - - // If the new key is a single character, remember it for later - ArrayList board = (ArrayList)_keyboardList[(int)_currentKeyboard]; - ArrayList row = (ArrayList)board[_currentRow]; - Key key = (Key)row[_currentKey]; - if (key.name == "") - { - switch (key.xKey) - { - // Adjust the last column for the arrow keys to confine it - // within the range of the key width - case Xkey.XK_ARROWLEFT: - _lastColumn = (_lastColumn <= 7) ? 7 : 8; break; - case Xkey.XK_ARROWRIGHT: - _lastColumn = (_lastColumn <= 9) ? 9 : 10; break; - - // Single char, non-arrow - default: - _lastColumn = _currentKey; break; - } - } - } - - bool IsKeyDisabled() - { - if (_currentKey == -1) return true; - - ArrayList board = (ArrayList)_keyboardList[(int)_currentKeyboard]; - ArrayList row = (ArrayList)board[_currentRow]; - Key key = (Key)row[_currentKey]; - - // On the symbols keyboard, Shift and Caps Lock are disabled - if (_currentKeyboard == KeyboardTypes.TYPE_SYMBOLS) - { - if (key.xKey == Xkey.XK_SHIFT || key.xKey == Xkey.XK_CAPSLOCK) - return true; - } - return false; - } - - char GetChar(Xkey xk) - { - // Handle case conversion - char wc = (char)(((uint)xk) & 0xffff); - - if ((_capsLockTurnedOn && !_shiftTurnedOn) || (!_capsLockTurnedOn && _shiftTurnedOn)) - wc = Char.ToUpper(wc); - else - wc = Char.ToLower(wc); - - return wc; - } - - void RenderKey(float fX, float fY, Key key, long keyColor, long textColor) - { - if (keyColor == COLOR_INVISIBLE || key.xKey == Xkey.XK_NULL) return; - - - string strKey = GetChar(key.xKey).ToString(); - string name = (key.name.Length == 0) ? strKey : key.name; - - int width = (int)((key.dwWidth - KEY_INSET) * SkinRatio) + 2; - int height = (int)(KEY_INSET * SkinRatio) + 2; - GUIGraphicsContext.ScaleHorizontal(ref width); - GUIGraphicsContext.ScaleVertical(ref height); - - float x = fX + (int)(KEY_INSET * SkinRatio); - float y = fY + (int)(KEY_INSET * SkinRatio); - float z = fX + width;//z - float w = fY + _keyHeight - height;//w - - float nw = width; - float nh = _keyHeight - height; - - float uoffs = 0; - float v = 1.0f; - float u = 1.0f; - - _keyTexture.Draw(x, y, nw, nh, uoffs, 0.0f, u, v, (int)keyColor); - - // Draw the key text. If key name is, use a slightly smaller font. - float textWidth = 0; - float textHeight = 0; - float positionX = (x + z) / 2.0f; - float positionY = (y + w) / 2.0f; - positionX -= GUIGraphicsContext.OffsetX; - positionY -= GUIGraphicsContext.OffsetY; - if (key.name.Length > 1 && Char.IsUpper(key.name[1])) - { - _font12.GetTextExtent(name, ref textWidth, ref textHeight); - positionX -= (textWidth / 2); - positionY -= (textHeight / 2); - _font12.DrawText(positionX, positionY, textColor, name, GUIControl.Alignment.ALIGN_LEFT, -1); - } - else - { - _font18.GetTextExtent(name, ref textWidth, ref textHeight); - positionX -= (textWidth / 2); - positionY -= (textHeight / 2); - _font18.DrawText(positionX, positionY, textColor, name, GUIControl.Alignment.ALIGN_LEFT, -1); - } - } - - void DrawTextBox(float timePassed, int x1, int y1, int x2, int y2) - { - //long lColor=0xaaffffff; - - GUIGraphicsContext.ScalePosToScreenResolution(ref x1, ref y1); - GUIGraphicsContext.ScalePosToScreenResolution(ref x2, ref y2); - - x1 += GUIGraphicsContext.OffsetX; - x2 += GUIGraphicsContext.OffsetX; - y1 += GUIGraphicsContext.OffsetY; - y2 += GUIGraphicsContext.OffsetY; - /* - Rectangle[] rect = new Rectangle[1]; - rect[0].X=x1; - rect[0].Y=y1; - rect[0].Width=x2-x1; - rect[0].Height=y2-y1; - GUIGraphicsContext.DX9Device.Clear( ClearFlags.Target|ClearFlags.Target, (int)lColor, 1.0f, 0, rect ); - */ - //image.ColourDiffuse=lColor; - image.SetPosition(x1, y1); - image.Width = (x2 - x1); - image.Height = (y2 - y1); - image.Render(timePassed); - - - } - - void DrawText(int x, int y) - { - GUIGraphicsContext.ScalePosToScreenResolution(ref x, ref y); - x += GUIGraphicsContext.OffsetX; - y += GUIGraphicsContext.OffsetY; - string textLine = _textEntered; - if (_password) - { - textLine = ""; - for (int i = 0; i < _textEntered.Length; ++i) textLine += "*"; - } - - _fontSearchText.DrawText((float)x, (float)y, COLOR_SEARCHTEXT, textLine, GUIControl.Alignment.ALIGN_LEFT, -1); - - - // Draw blinking caret using line primitives. - TimeSpan ts = DateTime.Now - _caretTimer; - if ((ts.TotalSeconds % fCARET_BLINK_RATE) < fCARET_ON_RATIO) - { - string line = textLine.Substring(0, _position); - - float caretWidth = 0.0f; - float caretHeight = 0.0f; - _fontSearchText.GetTextExtent(line, ref caretWidth, ref caretHeight); - x += (int)caretWidth; - _fontSearchText.DrawText((float)x, (float)y, 0xff202020, "|", GUIControl.Alignment.ALIGN_LEFT, -1); - - } - } - - void RenderKeyboardLatin(float timePassed) - { - // Show text and caret - int tmpX = (int)(Location.X); - int tmpY = (int)Location.Y; - - DrawTextBox(timePassed, (int)(tmpX), tmpY - 5, (int)(((MODEKEY_WIDTH + GAP_WIDTH * 9 + GAP2_WIDTH + KEY_WIDTH * 10) * SkinRatio) + Location.X), tmpY + 35); - DrawText((int)(tmpX + 4), tmpY); - - int x1 = (int)(tmpX); - int y1 = tmpY + 42; - - GUIGraphicsContext.ScalePosToScreenResolution(ref x1, ref y1); - x1 += GUIGraphicsContext.OffsetX; - y1 += GUIGraphicsContext.OffsetY; - // Draw each row - float fY = y1; - ArrayList keyBoard = (ArrayList)_keyboardList[(int)_currentKeyboard]; - for (int row = 0; row < _maxRows; ++row, fY += _keyHeight) - { - float fX = x1; - float fWidthSum = 0.0f; - ArrayList keyRow = (ArrayList)keyBoard[row]; - int dwIndex = 0; - for (int i = 0; i < keyRow.Count; i++) - { - // Determine key name - Key key = (Key)keyRow[i]; - long selKeyColor = 0xffffffff; - long selTextColor = COLOR_NORMAL; - - // Handle special key coloring - switch (key.xKey) - { - case Xkey.XK_SHIFT: - switch (_currentKeyboard) - { - case KeyboardTypes.TYPE_ALPHABET: - case KeyboardTypes.TYPE_ACCENTS: - if (_shiftTurnedOn) - selKeyColor = COLOR_PRESSED; - break; - case KeyboardTypes.TYPE_SYMBOLS: - selKeyColor = COLOR_DISABLED; - selTextColor = COLOR_FONT_DISABLED; - break; - } - break; - case Xkey.XK_CAPSLOCK: - switch (_currentKeyboard) - { - case KeyboardTypes.TYPE_ALPHABET: - case KeyboardTypes.TYPE_ACCENTS: - if (_capsLockTurnedOn) - selKeyColor = COLOR_PRESSED; - break; - case KeyboardTypes.TYPE_SYMBOLS: - selKeyColor = COLOR_DISABLED; - selTextColor = COLOR_FONT_DISABLED; - break; - } - break; - /* case Xkey.XK_ACCENTS: - selKeyColor = COLOR_INVISIBLE; - selTextColor = COLOR_INVISIBLE; - break;*/ - } - - // Highlight the current key - if (row == _currentRow && dwIndex == _currentKey) - selKeyColor = COLOR_HIGHLIGHT; - - RenderKey(fX + fWidthSum, fY, key, selKeyColor, selTextColor); - - int width = (int)(key.dwWidth * SkinRatio); - GUIGraphicsContext.ScaleHorizontal(ref width); - fWidthSum += width; - - // There's a slightly larger gap between the leftmost keys (mode - // keys) and the main keyboard - if (dwIndex == 0) - width = (int)(GAP2_WIDTH * SkinRatio); - else - width = GAP_WIDTH; - GUIGraphicsContext.ScaleHorizontal(ref width); - fWidthSum += width; - - ++dwIndex; - } - } - } - - - #region IRenderLayer - public bool ShouldRenderLayer() - { - return true; - } - - public void RenderLayer(float timePassed) - { - - Render(timePassed); - } - #endregion - - } -} Modified: trunk/plugins/WorldMap/WorldmapSearch.cs =================================================================== --- trunk/plugins/WorldMap/WorldmapSearch.cs 2010-02-01 18:00:56 UTC (rev 3400) +++ trunk/plugins/WorldMap/WorldmapSearch.cs 2010-02-01 18:12:59 UTC (rev 3401) @@ -46,11 +46,11 @@ public string Country = ""; public string Placename = ""; private SearchType searchType = SearchType.none; - public SearchType SearchType - { - get{ return searchType; } + public SearchType SearchType + { + get { return searchType; } set - { + { searchType = value; if (searchType... [truncated message content] |