summaryrefslogtreecommitdiff
path: root/SDL_Core/src/components/HMI/app/model/sdl/AppModel.js
diff options
context:
space:
mode:
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.js578
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);
+
+ }
+ });