///
module BABYLON.GUI {
export class KeyPropertySet {
width?: string;
height?: string;
paddingLeft?: string;
paddingRight?: string;
paddingTop?: string;
paddingBottom?: string;
color?: string;
background?: string;
}
export class VirtualKeyboard extends StackPanel {
public onKeyPressObservable = new Observable();
public defaultButtonWidth = "40px";
public defaultButtonHeight = "40px";
public defaultButtonPaddingLeft= "2px";
public defaultButtonPaddingRight = "2px";
public defaultButtonPaddingTop = "2px";
public defaultButtonPaddingBottom = "2px";
public defaultButtonColor = "#DDD";
public defaultButtonBackground = "#070707";
protected _getTypeName(): string {
return "VirtualKeyboard";
}
private _createKey(key: string, propertySet?: KeyPropertySet) {
var button = Button.CreateSimpleButton(key, key);
button.width = propertySet && propertySet.width ? propertySet.width : this.defaultButtonWidth;
button.height = propertySet && propertySet.height ? propertySet.height : this.defaultButtonHeight;
button.color = propertySet && propertySet.color ? propertySet.color : this.defaultButtonColor;
button.background = propertySet && propertySet.background ? propertySet.background : this.defaultButtonBackground;
button.paddingLeft = propertySet && propertySet.paddingLeft ? propertySet.paddingLeft : this.defaultButtonPaddingLeft;
button.paddingRight = propertySet && propertySet.paddingRight ? propertySet.paddingRight : this.defaultButtonPaddingRight;
button.paddingTop = propertySet && propertySet.paddingTop ? propertySet.paddingTop : this.defaultButtonPaddingTop;
button.paddingBottom = propertySet && propertySet.paddingBottom ? propertySet.paddingBottom : this.defaultButtonPaddingBottom;
button.thickness = 0;
button.isFocusInvisible = true;
button.onPointerUpObservable.add(() => {
this.onKeyPressObservable.notifyObservers(key);
});
return button;
}
public addKeysRow(keys: Array, propertySets?: Array): void {
let panel = new StackPanel();
panel.isVertical = false;
panel.isFocusInvisible = true;
for(var i = 0; i < keys.length; i++) {
let properties = null;
if (propertySets && propertySets.length === keys.length) {
properties = propertySets[i];
}
panel.addControl(this._createKey(keys[i], properties));
}
this.addControl(panel);
}
private _connectedInputText: InputText;
private _onFocusObserver: Observer;
private _onBlurObserver: Observer;
private _onKeyPressObserver: Observer;
public get connectedInputText(): InputText {
return this._connectedInputText;
}
public connect(input: InputText): void {
this.isVisible = false;
this._connectedInputText = input;
// Events hooking
this._onFocusObserver = input.onFocusObservable.add(() => {
this.isVisible = true;
});
this._onBlurObserver = input.onBlurObservable.add(() => {
this.isVisible = false;
});
this._onKeyPressObserver = this.onKeyPressObservable.add((key) => {
switch (key) {
case "\u2190":
this._connectedInputText.processKey(8);
return;
case "\u21B5":
this._connectedInputText.processKey(13);
return;
}
this._connectedInputText.processKey(-1, key);
});
}
public disconnect(): void {
if (!this._connectedInputText) {
return;
}
this._connectedInputText.onFocusObservable.remove(this._onFocusObserver);
this._connectedInputText.onBlurObservable.remove(this._onBlurObserver);
this.onKeyPressObservable.remove(this._onKeyPressObserver);
this._connectedInputText = null;
}
// Statics
public static CreateDefaultLayout(): VirtualKeyboard {
let returnValue = new VirtualKeyboard();
returnValue.addKeysRow(["1", "2", "3", "4", "5", "6", "7", "8", "9", "0","\u2190"]);
returnValue.addKeysRow(["q", "w", "e", "r", "t", "y", "u", "i", "o", "p"]);
returnValue.addKeysRow(["a", "s", "d", "f", "g", "h", "j", "k", "l",";","'","\u21B5"]);
returnValue.addKeysRow(["z", "x", "c", "v", "b", "n", "m", ",", ".", "/"]);
returnValue.addKeysRow([" "], [{ width: "200px"}]);
return returnValue;
}
}
}