virtualKeyboard.ts 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. /// <reference path="../../../dist/preview release/babylon.d.ts"/>
  2. module BABYLON.GUI {
  3. export class KeyPropertySet {
  4. width?: string;
  5. height?: string;
  6. paddingLeft?: string;
  7. paddingRight?: string;
  8. paddingTop?: string;
  9. paddingBottom?: string;
  10. color?: string;
  11. background?: string;
  12. }
  13. export class VirtualKeyboard extends StackPanel {
  14. public onKeyPressObservable = new Observable<string>();
  15. public defaultButtonWidth = "40px";
  16. public defaultButtonHeight = "40px";
  17. public defaultButtonPaddingLeft= "2px";
  18. public defaultButtonPaddingRight = "2px";
  19. public defaultButtonPaddingTop = "2px";
  20. public defaultButtonPaddingBottom = "2px";
  21. public defaultButtonColor = "#DDD";
  22. public defaultButtonBackground = "#070707";
  23. protected _getTypeName(): string {
  24. return "VirtualKeyboard";
  25. }
  26. private _createKey(key: string, propertySet?: KeyPropertySet) {
  27. var button = Button.CreateSimpleButton(key, key);
  28. button.width = propertySet && propertySet.width ? propertySet.width : this.defaultButtonWidth;
  29. button.height = propertySet && propertySet.height ? propertySet.height : this.defaultButtonHeight;
  30. button.color = propertySet && propertySet.color ? propertySet.color : this.defaultButtonColor;
  31. button.background = propertySet && propertySet.background ? propertySet.background : this.defaultButtonBackground;
  32. button.paddingLeft = propertySet && propertySet.paddingLeft ? propertySet.paddingLeft : this.defaultButtonPaddingLeft;
  33. button.paddingRight = propertySet && propertySet.paddingRight ? propertySet.paddingRight : this.defaultButtonPaddingRight;
  34. button.paddingTop = propertySet && propertySet.paddingTop ? propertySet.paddingTop : this.defaultButtonPaddingTop;
  35. button.paddingBottom = propertySet && propertySet.paddingBottom ? propertySet.paddingBottom : this.defaultButtonPaddingBottom;
  36. button.thickness = 0;
  37. button.isFocusInvisible = true;
  38. button.onPointerUpObservable.add(() => {
  39. this.onKeyPressObservable.notifyObservers(key);
  40. });
  41. return button;
  42. }
  43. public addKeysRow(keys: Array<string>, propertySets?: Array<KeyPropertySet>): void {
  44. let panel = new StackPanel();
  45. panel.isVertical = false;
  46. panel.isFocusInvisible = true;
  47. for(var i = 0; i < keys.length; i++) {
  48. let properties = null;
  49. if (propertySets && propertySets.length === keys.length) {
  50. properties = propertySets[i];
  51. }
  52. panel.addControl(this._createKey(keys[i], properties));
  53. }
  54. this.addControl(panel);
  55. }
  56. private _connectedInputText: InputText;
  57. private _onFocusObserver: Observer<InputText>;
  58. private _onBlurObserver: Observer<InputText>;
  59. private _onKeyPressObserver: Observer<string>;
  60. public get connectedInputText(): InputText {
  61. return this._connectedInputText;
  62. }
  63. public connect(input: InputText): void {
  64. this.isVisible = false;
  65. this._connectedInputText = input;
  66. // Events hooking
  67. this._onFocusObserver = input.onFocusObservable.add(() => {
  68. this.isVisible = true;
  69. });
  70. this._onBlurObserver = input.onBlurObservable.add(() => {
  71. this.isVisible = false;
  72. });
  73. this._onKeyPressObserver = this.onKeyPressObservable.add((key) => {
  74. switch (key) {
  75. case "\u2190":
  76. this._connectedInputText.processKey(8);
  77. return;
  78. case "\u21B5":
  79. this._connectedInputText.processKey(13);
  80. return;
  81. }
  82. this._connectedInputText.processKey(-1, key);
  83. });
  84. }
  85. public disconnect(): void {
  86. if (!this._connectedInputText) {
  87. return;
  88. }
  89. this._connectedInputText.onFocusObservable.remove(this._onFocusObserver);
  90. this._connectedInputText.onBlurObservable.remove(this._onBlurObserver);
  91. this.onKeyPressObservable.remove(this._onKeyPressObserver);
  92. this._connectedInputText = null;
  93. }
  94. // Statics
  95. public static CreateDefaultLayout(): VirtualKeyboard {
  96. let returnValue = new VirtualKeyboard();
  97. returnValue.addKeysRow(["1", "2", "3", "4", "5", "6", "7", "8", "9", "0","\u2190"]);
  98. returnValue.addKeysRow(["q", "w", "e", "r", "t", "y", "u", "i", "o", "p"]);
  99. returnValue.addKeysRow(["a", "s", "d", "f", "g", "h", "j", "k", "l",";","'","\u21B5"]);
  100. returnValue.addKeysRow(["z", "x", "c", "v", "b", "n", "m", ",", ".", "/"]);
  101. returnValue.addKeysRow([" "], [{ width: "200px"}]);
  102. return returnValue;
  103. }
  104. }
  105. }