mirror of
https://github.com/keymanapp/keyman.git
synced 2026-08-05 16:35:33 +00:00
Extraction of keyboard data management code complete.
This commit is contained in:
parent
7695636758
commit
e74836e178
3 changed files with 119 additions and 103 deletions
|
|
@ -1695,7 +1695,7 @@ if(!window['keyman']['initialized']) {
|
|||
if(keymanweb.isAttached(Pelem)) { // Only operate on attached elements!
|
||||
if(keymanweb._LastActiveElement == Pelem || keymanweb._LastActiveElement == Pelem['kmw_ip']) {
|
||||
keymanweb._LastActiveElement = null;
|
||||
keymanweb.setActiveKeyboard(keymanweb.globalKeyboard, keymanweb.globalLanguageCode);
|
||||
keymanweb.keyboardManager.setActiveKeyboard(keymanweb.globalKeyboard, keymanweb.globalLanguageCode);
|
||||
keymanweb['osk']._Hide();
|
||||
}
|
||||
|
||||
|
|
@ -1786,7 +1786,7 @@ if(!window['keyman']['initialized']) {
|
|||
&& keymanweb._LastActiveElement) {
|
||||
|
||||
if(Pkbd != null && Plc != null) { // Second part necessary for Closure.
|
||||
keymanweb.setActiveKeyboard(Pkbd, Plc);
|
||||
keymanweb.keyboardManager.setActiveKeyboard(Pkbd, Plc);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -2002,10 +2002,10 @@ if(!window['keyman']['initialized']) {
|
|||
*/
|
||||
keymanweb._FocusKeyboardSettings = function(blockGlobalChange) {
|
||||
if(keymanweb._LastActiveElement._kmwAttachment.keyboard != null) {
|
||||
keymanweb.setActiveKeyboard(keymanweb._LastActiveElement._kmwAttachment.keyboard,
|
||||
keymanweb.keyboardManager.setActiveKeyboard(keymanweb._LastActiveElement._kmwAttachment.keyboard,
|
||||
keymanweb._LastActiveElement._kmwAttachment.languageCode);
|
||||
} else if(!blockGlobalChange) {
|
||||
keymanweb.setActiveKeyboard(keymanweb.globalKeyboard, keymanweb.globalLanguageCode);
|
||||
keymanweb.keyboardManager.setActiveKeyboard(keymanweb.globalKeyboard, keymanweb.globalLanguageCode);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2170,85 +2170,6 @@ if(!window['keyman']['initialized']) {
|
|||
var p={}; p['target']=_target; p['activeControl']=_activeControl;
|
||||
return util.callEvent('kmw.controlfocused',p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute external (UI) code needed on registering keyboard, used
|
||||
* to update each UIs language menu
|
||||
*
|
||||
* Note that the argument object is not at present used by any UI,
|
||||
* since the menu is always fully recreated when needed, but the arguments
|
||||
* remain defined to allow for possible use in future (Aug 2014)
|
||||
*
|
||||
* @param {string} _internalName
|
||||
* @param {string} _language
|
||||
* @param {string} _keyboardName
|
||||
* @param {string} _languageCode
|
||||
* @param {string=} _packageID Used by KMEA/KMEI to track .kmp related info.
|
||||
* @return {boolean}
|
||||
*/
|
||||
keymanweb.doKeyboardRegistered = function(_internalName,_language,_keyboardName,_languageCode, _packageID)
|
||||
{
|
||||
var p={'internalName':_internalName,'language':_language,'keyboardName':_keyboardName,'languageCode':_languageCode};
|
||||
|
||||
// Utilized only by our embedded codepaths.
|
||||
if(_packageID) {
|
||||
p['package'] = _packageID;
|
||||
}
|
||||
return util.callEvent('kmw.keyboardregistered',p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute external (UI) code to rebuild menu when deregistering keyboard
|
||||
*
|
||||
* @return {boolean}
|
||||
*/
|
||||
|
||||
keymanweb.doKeyboardUnregistered = function()
|
||||
{
|
||||
var p={};
|
||||
return util.callEvent('kmw.keyboardregistered',p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute external (UI) code needed on loading keyboard
|
||||
*
|
||||
* @param {string} _internalName
|
||||
* @return {boolean}
|
||||
*/
|
||||
keymanweb.doKeyboardLoaded = function(_internalName)
|
||||
{
|
||||
var p={}; p['keyboardName']=_internalName;
|
||||
return util.callEvent('kmw.keyboardloaded',p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function doBeforeKeyboardChange
|
||||
* Scope Private
|
||||
* @param {string} _internalName
|
||||
* @param {string} _languageCode
|
||||
* @return {boolean}
|
||||
* Description Execute external (UI) code needed before changing keyboard
|
||||
*/
|
||||
keymanweb.doBeforeKeyboardChange = function(_internalName,_languageCode)
|
||||
{
|
||||
var p={}; p['internalName']=_internalName; p['languageCode']=_languageCode;
|
||||
return util.callEvent('kmw.beforekeyboardchange',p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute external (UI) code needed *after* changing keyboard
|
||||
*
|
||||
* @param {string} _internalName
|
||||
* @param {string} _languageCode
|
||||
* @param {boolean=} _indirect
|
||||
* @return {boolean}
|
||||
*/
|
||||
keymanweb.doKeyboardChange = function(_internalName,_languageCode,_indirect)
|
||||
{
|
||||
var p={}; p['internalName']=_internalName; p['languageCode']=_languageCode;
|
||||
p['indirect']=(arguments.length > 2 ? _indirect : false);
|
||||
return util.callEvent('kmw.keyboardchange',p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function doUnloadOSK
|
||||
|
|
@ -2933,19 +2854,8 @@ if(!window['keyman']['initialized']) {
|
|||
* @param {string} PInternalName Internal name
|
||||
* @param {string} PLgCode Language code
|
||||
*/
|
||||
keymanweb['setActiveKeyboard'] = keymanweb.setActiveKeyboard = function(PInternalName,PLgCode) {
|
||||
//TODO: This does not make sense: the callbacks should be in _SetActiveKeyboard, not here,
|
||||
// since this is always called FROM the UI, which should not need notification.
|
||||
// If UI callbacks are needed at all, they should be within _SetActiveKeyboard
|
||||
keymanweb.doBeforeKeyboardChange(PInternalName,PLgCode);
|
||||
keymanweb.keyboardManager._SetActiveKeyboard(PInternalName,PLgCode,true);
|
||||
if(keymanweb._LastActiveElement != null) keymanweb._FocusLastActiveElement();
|
||||
// If we ever allow PLgCode to be set by default, we can auto-detect the language code
|
||||
// after the _SetActiveKeyboard call.
|
||||
// if(!PLgCode && (<KeymanBase>keymanweb).keyboardManager.activeStub) {
|
||||
// PLgCode = (<KeymanBase>keymanweb).keyboardManager.activeStub['KLC'];
|
||||
// }
|
||||
keymanweb.doKeyboardChange(PInternalName,PLgCode);
|
||||
keymanweb['setActiveKeyboard'] = function(PInternalName,PLgCode) {
|
||||
keymanweb.keyboardManager.setActiveKeyboard(PInternalName,PLgCode);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -267,7 +267,7 @@ class KeyboardManager {
|
|||
}
|
||||
|
||||
// Update the UI
|
||||
(<any>this.keymanweb).doKeyboardRegistered(sp['KI'],sp['KL'],sp['KN'],sp['KLC'],sp['KP']);
|
||||
this.doKeyboardRegistered(sp['KI'],sp['KL'],sp['KN'],sp['KLC'],sp['KP']);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -299,6 +299,29 @@ class KeyboardManager {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Allow to change active keyboard by (internal) keyboard name
|
||||
*
|
||||
* @param {string} PInternalName Internal name
|
||||
* @param {string} PLgCode Language code
|
||||
*/
|
||||
setActiveKeyboard(PInternalName: string, PLgCode: string) {
|
||||
//TODO: This does not make sense: the callbacks should be in _SetActiveKeyboard, not here,
|
||||
// since this is always called FROM the UI, which should not need notification.
|
||||
// If UI callbacks are needed at all, they should be within _SetActiveKeyboard
|
||||
this.doBeforeKeyboardChange(PInternalName,PLgCode);
|
||||
this._SetActiveKeyboard(PInternalName,PLgCode,true);
|
||||
if(this.keymanweb._LastActiveElement != null) {
|
||||
(<any>this.keymanweb)._FocusLastActiveElement();
|
||||
}
|
||||
// If we ever allow PLgCode to be set by default, we can auto-detect the language code
|
||||
// after the _SetActiveKeyboard call.
|
||||
// if(!PLgCode && (<KeymanBase>keymanweb).keyboardManager.activeStub) {
|
||||
// PLgCode = (<KeymanBase>keymanweb).keyboardManager.activeStub['KLC'];
|
||||
// }
|
||||
this.doKeyboardChange(PInternalName, PLgCode);
|
||||
}
|
||||
|
||||
/**
|
||||
* Change active keyboard to keyboard selected by (internal) name and language code
|
||||
*
|
||||
|
|
@ -532,7 +555,7 @@ class KeyboardManager {
|
|||
|
||||
//Activate keyboard, if it's still the active stub.
|
||||
if(kbdStub == manager.activeStub) {
|
||||
(<any>manager.keymanweb).doBeforeKeyboardChange(kbd['KI'],kbdStub['KLC']);
|
||||
manager.doBeforeKeyboardChange(kbd['KI'],kbdStub['KLC']);
|
||||
manager.activeKeyboard=kbd;
|
||||
|
||||
if((<any>manager.keymanweb)._LastActiveElement != null) {
|
||||
|
|
@ -615,7 +638,7 @@ class KeyboardManager {
|
|||
this.keymanweb.globalKeyboard = t[0];
|
||||
this.keymanweb.globalLanguageCode = t[1];
|
||||
|
||||
(<any>this.keymanweb).doKeyboardChange(t[0],t[1]); // And update the UI if necessary
|
||||
this.doKeyboardChange(t[0],t[1]); // And update the UI if necessary
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -1121,7 +1144,7 @@ class KeyboardManager {
|
|||
|
||||
if(anyRemoved) {
|
||||
// Update the UI keyboard menu
|
||||
(<any>this.keymanweb).doKeyboardUnregistered();
|
||||
this.doKeyboardUnregistered();
|
||||
}
|
||||
|
||||
return success;
|
||||
|
|
@ -1177,7 +1200,7 @@ class KeyboardManager {
|
|||
this.keyboards=(<any>this.keymanweb)._push(this.keyboards, Pk);
|
||||
|
||||
// Execute any external (UI) code needed after loading keyboard
|
||||
(<any>this.keymanweb).doKeyboardLoaded(Pk['KI']);
|
||||
this.doKeyboardLoaded(Pk['KI']);
|
||||
|
||||
// Restore the originally-active stub to its prior state. No need to change it permanently.
|
||||
this.activeStub = savedActiveStub;
|
||||
|
|
@ -1235,9 +1258,92 @@ class KeyboardManager {
|
|||
// Reload this keyboard if it was the last active keyboard and
|
||||
// make any changes needed by UI for new keyboard stub
|
||||
// (Uncommented for Build 360)
|
||||
(<any>this.keymanweb).doKeyboardRegistered(Pstub['KI'],Pstub['KL'],Pstub['KN'],Pstub['KLC'],Pstub['KP']);
|
||||
this.doKeyboardRegistered(Pstub['KI'],Pstub['KL'],Pstub['KN'],Pstub['KLC'],Pstub['KP']);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/*
|
||||
* Last part - the events.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Execute external (UI) code needed on registering keyboard, used
|
||||
* to update each UIs language menu
|
||||
*
|
||||
* Note that the argument object is not at present used by any UI,
|
||||
* since the menu is always fully recreated when needed, but the arguments
|
||||
* remain defined to allow for possible use in future (Aug 2014)
|
||||
*
|
||||
* @param {string} _internalName
|
||||
* @param {string} _language
|
||||
* @param {string} _keyboardName
|
||||
* @param {string} _languageCode
|
||||
* @param {string=} _packageID Used by KMEA/KMEI to track .kmp related info.
|
||||
* @return {boolean}
|
||||
*/
|
||||
doKeyboardRegistered(_internalName: string, _language: string, _keyboardName: string,
|
||||
_languageCode: string, _packageID?: string): boolean {
|
||||
var p={'internalName':_internalName,'language':_language,'keyboardName':_keyboardName,'languageCode':_languageCode};
|
||||
|
||||
// Utilized only by our embedded codepaths.
|
||||
if(_packageID) {
|
||||
p['package'] = _packageID;
|
||||
}
|
||||
return this.keymanweb.util.callEvent('kmw.keyboardregistered',p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute external (UI) code to rebuild menu when deregistering keyboard
|
||||
*
|
||||
* @return {boolean}
|
||||
*/
|
||||
|
||||
doKeyboardUnregistered(): boolean {
|
||||
var p={};
|
||||
return this.keymanweb.util.callEvent('kmw.keyboardregistered',p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute external (UI) code needed on loading keyboard
|
||||
*
|
||||
* @param {string} _internalName
|
||||
* @return {boolean}
|
||||
*/
|
||||
doKeyboardLoaded(_internalName: string): boolean {
|
||||
var p={};
|
||||
p['keyboardName']=_internalName;
|
||||
return this.keymanweb.util.callEvent('kmw.keyboardloaded', p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Function doBeforeKeyboardChange
|
||||
* Scope Private
|
||||
* @param {string} _internalName
|
||||
* @param {string} _languageCode
|
||||
* @return {boolean}
|
||||
* Description Execute external (UI) code needed before changing keyboard
|
||||
*/
|
||||
doBeforeKeyboardChange(_internalName: string, _languageCode: string): boolean {
|
||||
var p={};
|
||||
p['internalName']=_internalName;
|
||||
p['languageCode']=_languageCode;
|
||||
return this.keymanweb.util.callEvent('kmw.beforekeyboardchange',p);
|
||||
}
|
||||
|
||||
/**
|
||||
* Execute external (UI) code needed *after* changing keyboard
|
||||
*
|
||||
* @param {string} _internalName
|
||||
* @param {string} _languageCode
|
||||
* @param {boolean=} _indirect
|
||||
* @return {boolean}
|
||||
*/
|
||||
doKeyboardChange(_internalName: string, _languageCode: string, _indirect?:boolean): boolean {
|
||||
var p={};
|
||||
p['internalName']=_internalName;
|
||||
p['languageCode']=_languageCode;
|
||||
p['indirect']=(arguments.length > 2 ? _indirect : false);
|
||||
return this.keymanweb.util.callEvent('kmw.keyboardchange', p);
|
||||
}
|
||||
}
|
||||
|
|
@ -219,7 +219,7 @@ class Util {
|
|||
* @return {boolean}
|
||||
* Description Invoke an event using any function with up to four arguments
|
||||
*/
|
||||
callEvent(event: string, params: Object[]): boolean {
|
||||
callEvent(event: string, params: Object|Object[]): boolean {
|
||||
if(typeof this.events[event] == 'undefined') {
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue