diff options
Diffstat (limited to 'SDL_Core/src/components/HMI/app/model/sdl/AppModel.js')
-rw-r--r-- | SDL_Core/src/components/HMI/app/model/sdl/AppModel.js | 578 |
1 files changed, 322 insertions, 256 deletions
diff --git a/SDL_Core/src/components/HMI/app/model/sdl/AppModel.js b/SDL_Core/src/components/HMI/app/model/sdl/AppModel.js index 1eee841c7..bece47231 100644 --- a/SDL_Core/src/components/HMI/app/model/sdl/AppModel.js +++ b/SDL_Core/src/components/HMI/app/model/sdl/AppModel.js @@ -2,15 +2,14 @@ * Copyright (c) 2013, Ford Motor Company All rights reserved. * * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * · Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * · Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * · Neither the name of the Ford Motor Company nor the names of its - * contributors may be used to endorse or promote products derived from this - * software without specific prior written permission. + * modification, are permitted provided that the following conditions are met: · + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. · Redistributions in binary + * form must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials provided + * with the distribution. · Neither the name of the Ford Motor Company nor the + * names of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE @@ -32,259 +31,326 @@ * @version 1.0 */ -SDL.SDLAppModel = Em.Object.extend( { - - /** - * Application Id - * - * @type {Number} - */ - appId: null, - - /** - * Application name - * - * @type {String} - */ - appName: '', - - /** - * Chosen device name - * - * @type {String} - */ - deviceName: '', - - /** - * Statusbar text - * - * @type {String} - */ - statusText: '', - - /** - * Info data - * - * @type: {Em.Object} - */ - appInfo: null, - - /** - * Current language of applications UI component - * - * @type {String} - */ - UILanguage: 'EN-US', - - /** - * Current language of applications TTS and applications VR component - * - * @type {String} - */ - TTSVRLanguage: 'EN-US', - - /** - * Array of Soft Buttons - * - * @type {Array} - */ - softButtons: [], - - /** - * Array of Objects for TBTTurnList - * - * @type {Array} - */ - turnList: [], - - /** - * URL to application Icon - * - * @type {String} - */ - appIcon: 'images/info/info_leftMenu_apps_ico.png', - - /** - * Application commands list - * - * @type {Array} - */ - commandsList: [], - - /** - * Return current menu commands - * - * @return {Array} - */ - currentCommandsList: function() { - return this.get( 'commandsList' ).filterProperty( 'parent', this.get( 'currentSubMenuId' ) ); - }.property( 'this.commandsList.@each', 'this.currentSubMenuId' ), - - /** - * Current command submenu identificator - * - * @type {Number} - */ - currentSubMenuId: 0, - - /** - * Return current submenu name - * - * @return {String} - */ - currentSubMenuLabel: function() { - var submenu = this.get( 'commandsList' ).filterProperty( 'menuId', this.get( 'currentSubMenuId' ) ); - return submenu.length ? submenu[0].name : 'Options'; - }.property( 'this.currentSubMenuId' ), - - /** - * Interaction chooses data - * - * @type {Object} - */ - interactionChoices: {}, - - /** - * Update Soft Buttons will handle on command Show - * - * @param {Array} - */ - updateSoftButtons: function( buttons ) { - // delete existing buttons from array - this.softButtons.splice( 0 ); - - // push new buttons to array - this.get( 'softButtons' ).pushObjects( buttons ); - }, - - /** - * Add command to list - * - * @param {Object} - */ - addCommand: function( params ) { - - this.get( 'commandsList' ).pushObject( { - commandId: params.cmdId, - name: params.menuParams.menuName, - parent: params.menuParams.parentID ? params.menuParams.parentID : 0, - position: params.menuParams.position, - icon: params.cmdIcon ? params.cmdIcon.value : null - } ); - }, - - /** - * Delete command from list - * - * @param {Number} - */ - deleteCommand: function( commandId ) { - - this.get( 'commandsList' ).removeObjects( this.get( 'commandsList' ).filterProperty( 'commandId', commandId ) ); - }, - - /** - * Add submenu to commands list - * - * @param {Object} - */ - addSubMenu: function( params ) { - - this.get( 'commandsList' ).pushObject( { - menuId: params.menuId, - name: params.menuName, - parent: 0, - position: params.position - } ); - }, - - /** - * Delete submenu and related commands from list - * - * @param {Number} - */ - deleteSubMenu: function( menuId ) { - - // don't delete if current submenu active - if( this.get( 'currentSubMenuId' ) == menuId ){ - return 'IN_USE'; - // SDL.SDLAppController.onSubMenu(0); - } +SDL.SDLAppModel = Em.Object.extend({ + + /** + * List of subscribed data on VehicleInfo model + * + * @type {Object} + */ + subscribedData: {}, + + /** + * Application's container for current processed requests on HMI + * + * @type {Object} + */ + activeRequests: {}, + + /** + * Application Id + * + * @type {Number} + */ + appID: null, + + /** + * Application name + * + * @type {String} + */ + appName: '', + + /** + * Navigation streaming url + */ + navigationStream: null, + + /** + * Navigation streaming url + */ + navigationAudioStream: null, + + /** + * Chosen device name + * + * @type {String} + */ + deviceName: '', + + /** + * Global properties for current application + * + * @type {Object} + */ + globalProperties: {}, + + /** + * Statusbar text + * + * @type {String} + */ + statusText: '', + + /** + * Info data + * + * @type: {Em.Object} + */ + appInfo: null, + + /** + * Current language of applications UI component + * + * @type {String} + */ + UILanguage: 'EN-US', + + /** + * Current language of applications TTS and applications VR component + * + * @type {String} + */ + TTSVRLanguage: 'EN-US', + + /** + * Array of Soft Buttons + * + * @type {Array} + */ + softButtons: [], + + /** + * Array of Objects for TBTTurnList + * + * @type {Array} + */ + turnList: [], + + /** + * URL to application Icon + * + * @type {String} + */ + appIcon: 'images/info/info_leftMenu_apps_ico.png', + + /** + * Application commands list + * + * @type {Array} + */ + commandsList: { + 0: [] + }, + + /** + * Flag to open ShowConstantTBTview when entering to current screen + * + * @type {Boolean} + */ + tbtActivate: false, + + /** + * Return current menu commands + * + * @return {Array} + */ + currentCommandsList: function () { + + return this.get('commandsList.' + this.get('currentSubMenuId')); + }.property('this.currentSubMenuId'), + + /** + * Current command submenu identificator + * + * @type {Number} + */ + currentSubMenuId: 'top', + + /** + * Return current submenu name + * + * @return {String} + */ + currentSubMenuLabel: function () { + + //Param "top" is Top level menu index + var submenu, commands = this.commandsList["top"]; + + for (var i = 0; i < commands.length; i++) { + if (commands[i].menuID == this.currentSubMenuId) { + submenu = commands[i].name; + } + } - // remove submenu - this.get( 'commandsList' ).removeObjects( this.get( 'commandsList' ).filterProperty( 'menuId', menuId ) ); + return this.get('currentSubMenuId') != 'top' ? submenu : 'Options'; + }.property('this.currentSubMenuId'), + + /** + * Interaction chooses data + * + * @type {Object} + */ + interactionChoices: {}, + + /** + * Update Soft Buttons will handle on command Show + * + * @param {Array} + */ + updateSoftButtons: function (buttons) { + + // delete existing buttons from array + this.softButtons.splice(0); + + // push new buttons to array + this.get('softButtons').pushObjects(buttons); + }, + + /** + * Add command to list + * + * @param {Object} + */ + addCommand: function (request) { + + var parentID = request.params.menuParams.parentID >= 0 ? request.params.menuParams.parentID : 'top'; + + if (!this.get('commandsList.' + parentID)) { + this.commandsList[parentID] = []; + } - // remove commands from deleted submenu - this.get( 'commandsList' ).removeObjects( this.get( 'commandsList' ).filterProperty( 'parent', menuId ) ); + var commands = this.get('commandsList.' + parentID); - return 'SUCCESS'; - }, + // Magic number is limit of 1000 commands added on one menu + if (commands.length <= 999) { - /** - * SDL UI PreformInteraction response handeler open Perform Interaction - * screen and show choices - * - * @param {Object} message - * @param {Number} performInteractionRequestId - */ - onPreformInteraction: function( message, performInteractionRequestId ) { + commands[commands.length] = { + commandID: request.params.cmdID, + name : request.params.menuParams.menuName, + parent : parentID, + position : request.params.menuParams.position ? request.params.menuParams.position : 0, + icon : request.params.cmdIcon ? request.params.cmdIcon.value : null + }; - var i = 0, length = message.interactionChoiceSetIDList.length; + if (SDL.SDLController.getApplicationModel(request.params.appID) && SDL.OptionsView.active) { + SDL.SDLAppController.buttonsSort(parentID, this.appID); + SDL.OptionsView.commands.refreshItems(); + } - SDL.InteractionChoicesView.clean(); + console.log(commands.length); + FFW.UI.sendUIResult(SDL.SDLModel.resultCode["SUCCESS"], request.id, request.method); + } else { + FFW.UI.sendError(SDL.SDLModel.resultCode["REJECTED"], request.id, request.method, 'Adding more than 1000 item to the top menu or to submenu is not allowed.'); + } - for( i = 0; i < length; i++ ){ - var choiceSetId = message.interactionChoiceSetIDList[i]; - SDL.InteractionChoicesView.preformChoices( this.interactionChoices[choiceSetId], performInteractionRequestId, message.timeout ); + }, + + /** + * Delete command from list + * + * @param {Number} + */ + deleteCommand: function (commandID, requestID) { + + for (var i in this.commandsList) { + if (this.commandsList[i].filterProperty('commandID', commandID).length) { + if (i != this.currentSubMenuId || this.currentSubMenuId == 'top') { + this.get('commandsList.' + i).removeObjects(this.get('commandsList.' + i).filterProperty('commandID', commandID)); + SDL.SDLModel.deleteCommandResponse(SDL.SDLModel.resultCode["SUCCESS"], requestID); + return; + } else { + SDL.SDLModel.deleteCommandResponse(SDL.SDLModel.resultCode["IN_USE"], requestID); + return; + } + } + } + }, + + /** + * Add submenu to commands list + * + * @param {Object} + */ + addSubMenu: function (request) { + + // parentID is equal to 'top' cause Top level menu ID + var parentID = 'top'; + + var commands = this.get('commandsList.' + parentID); + + // Magic number is limit of 1000 commands added on one menu + if (commands.length <= 999) { + + this.commandsList[request.params.menuID] = []; + commands[commands.length] = { + menuID : request.params.menuID, + name : request.params.menuParams.menuName ? request.params.menuParams.menuName : '', + parent : 0, + position: request.params.menuParams.position ? request.params.menuParams.position : 0 + }; + + if (SDL.SDLController.getApplicationModel(request.params.appID) && SDL.OptionsView.active) { + SDL.SDLAppController.buttonsSort(parentID, this.appID); + SDL.OptionsView.commands.refreshItems(); + } + + FFW.UI.sendUIResult(SDL.SDLModel.resultCode["SUCCESS"], request.id, request.method); + } else { + FFW.UI.sendError(SDL.SDLModel.resultCode["REJECTED"], request.id, request.method, 'Adding more than 1000 item to the top menu or to submenu is not allowed.'); + } + }, + + /** + * Delete submenu and related commands from list + * + * @param {Number} + */ + deleteSubMenu: function (menuID) { + + if (this.commandsList['top'].filterProperty('commandID', menuID)) { + this.get('commandsList.top').removeObjects(this.get('commandsList.top').filterProperty('menuID', menuID)); + delete(this.commandsList[menuID]); + } - SDL.VRPopUp.CreateInteractionChoise( this.interactionChoices[choiceSetId], performInteractionRequestId ); - } + return SDL.SDLModel.resultCode['SUCCESS']; + }, - SDL.InteractionChoicesView.activate( message.initialText ); - - // Show Initial prompt - SDL.SDLModel.onPrompt( message.initialPrompt ); - }, - - /** - * SDL UI CreateInteraction response handeler push set of commands to voice - * recognition list - * - * @param {Object} - */ - onCreateInteraction: function( message ) { - - this.interactionChoices[message.interactionChoiceSetID] = message.choiceSet; - - }, - - /** - * SDL UI DeleteInteraction response handeler close current interaction set - * window (if opened) and delete current set commands from voice recognition - * list - * - * @param {Object} - */ - onDeleteInteraction: function( message ) { - delete this.interactionChoices[message.interactionChoiceSetID]; - }, - - /** - * SDL UI Slider response handeler open Slider window with received - * parameters - * - * @param {Object} - */ - onSlider: function( message ) { - - SDL.SliderView.loadData( message ); - - SDL.SliderView.activate( this.appName ); - - setTimeout( function() { - if( SDL.SliderView.active ){ - SDL.SliderView.deactivate(); - } - }, message.params.timeout ); - } -} ); + /** + * SDL UI CreateInteraction response handeler push set of commands to + * voice recognition list + * + * @param {Object} + */ + onCreateInteraction: function (message) { + + this.interactionChoices[message.interactionChoiceSetID] = message.choiceSet; + + }, + + /** + * SDL UI DeleteInteraction response handeler close current interaction + * set window (if opened) and delete current set commands from voice + * recognition list + * + * @param {Object} + */ + onDeleteInteraction: function (message) { + + delete this.interactionChoices[message.interactionChoiceSetID]; + }, + + /** + * SDL UI Slider response handeler open Slider window with received + * parameters + * + * @param {Object} + */ + onSlider: function (message) { + + SDL.SliderView.loadData(message); + + SDL.SliderView.activate(this.appName, message.params.timeout); + + } + }); |