/**
ScenesToolbarView Backbone > View
@class ScenesToolbarView
@constructor
@return {Object} instantiated ScenesToolbarView
**/
define(['jquery', 'backbone'], function ($, Backbone) {
/**
Indicates the scene canvas was selected
@property BB.CONSTS.SCENE_CANVAS_SELECTED
@static
@final
@type String
*/
BB.CONSTS.SCENE_CANVAS_SELECTED = 'SCENE_CANVAS_SELECTED';
var ScenesToolbarView = Backbone.View.extend({
/**
Constructor
@method initialize
**/
initialize: function () {
var self = this;
BB.comBroker.setService(BB.SERVICES['SCENE_TOOLBAR_VIEW'], self);
self.m_selectedSceneID = undefined;
self._listenSceneSelection();
self._listenGoBackSceneSelection();
self._listenResourceRemoved();
self._listenSceneItemSelection();
self._listenSceneDimensionsChanged();
self._listenAddNewItem();
self._listenSceneRemoved();
self._listenRemoves();
self._listenZoom();
self._listenPushToTop();
self._listenScenePlayPreview();
self._listenPushToBottom();
self._listenSceneBlockList();
self._listenMemento();
},
/**
Listen to changes in a new scene selection
@method _listenSceneSelection
**/
_listenSceneSelection: function () {
var self = this;
BB.comBroker.listen(BB.EVENTS.LOAD_SCENE, function (e) {
self.m_selectedSceneID = e.edata;
});
},
/**
Listen to changes in the block list within a scene (canvas) and update the dropdown selection dialog
@method _listenSceneBlockList
**/
_listenSceneBlockList: function () {
BB.comBroker.listen(BB.EVENTS.SCENE_BLOCK_LIST_UPDATED, function (e) {
var blocks = e.edata;
$(Elements.SCENE_BLOCK_LIST).empty();
if (blocks != null) {
var snippet = '<li><a data-block_id="' + BB.CONSTS.SCENE_CANVAS_SELECTED + '" href="#">Canvas</a></li>';
$(Elements.SCENE_BLOCK_LIST).append(snippet);
}
_.forEach(blocks, function (i_block) {
var snippet = '<li><a data-block_id="' + i_block.id + '" href="#">' + i_block.name + '</a></li>';
$(Elements.SCENE_BLOCK_LIST).append(snippet);
});
});
},
/**
Listen to re-order of screen division, putting selected on top
@method _listenPushToTop
**/
_listenPushToTop: function () {
var self = this;
$(Elements.SCENE_EDITOR_PUSH_TOP, self.$el).on('click', function () {
BB.comBroker.fire(BB.EVENTS.SCENE_PUSH_TOP);
});
},
/**
Listen to live preview of scene
@method _listenScenePlayPreview
**/
_listenScenePlayPreview: function () {
var self = this;
$(Elements.SCENE_PLAY_PREVIEW, self.$el).on('click', function () {
var livePreview = BB.comBroker.getService(BB.SERVICES['LIVEPREVIEW']);
if (_.isUndefined(self.m_selectedSceneID))
return;
livePreview.launchScene(self.m_selectedSceneID);
});
},
/**
Listen to re-order of screen division, putting selected at bottom
@method _listenPushToBottom
**/
_listenPushToBottom: function () {
var self = this;
$(Elements.SCENE_EDITOR_PUSH_BOTTOM, self.$el).on('click', function () {
BB.comBroker.fire(BB.EVENTS.SCENE_PUSH_BOTTOM);
});
},
/**
Listen to all zoom events via wiring the UI
@method _listenZoom
**/
_listenZoom: function () {
var self = this;
$(Elements.SCENE_ZOOM_IN).on('click', function (e) {
BB.comBroker.fire(BB.EVENTS.SCENE_ZOOM_IN);
});
$(Elements.SCENE_ZOOM_OUT).on('click', function (e) {
BB.comBroker.fire(BB.EVENTS.SCENE_ZOOM_OUT);
});
$(Elements.SCENE_ZOOM_RESET).on('click', function (e) {
BB.comBroker.fire(BB.EVENTS.SCENE_ZOOM_RESET);
});
},
/**
Listen for undo and redo
@method _listenMemento
**/
_listenMemento: function () {
var self = this;
$(Elements.SCENE_UNDO, self.el).on('click', function (e) {
BB.comBroker.fire(BB.EVENTS.SCENE_UNDO, this, null);
});
$(Elements.SCENE_REDO, self.el).on('click', function (e) {
BB.comBroker.fire(BB.EVENTS.SCENE_REDO, this, null);
});
},
/**
Listen to user selection a scene block / item
@method _listenSceneItemSelection
**/
_listenSceneItemSelection: function () {
var self = this;
$(Elements.CLASS_SELECT_SCENE_ITEM_DROPDOWN, self.el).on('click', function (e) {
var id = $(e.target).data('block_id');
if (_.isUndefined(id))
return;
BB.comBroker.fire(BB.EVENTS.SCENE_ITEM_SELECTED, this, null, id);
});
},
/**
Listen to event of scene dimensions changed
@method _listenSceneDimensionsChanged
@param {event} e
**/
_listenSceneDimensionsChanged: function () {
var self = this;
BB.comBroker.listen(BB.EVENTS['SCENE_BLOCK_DIMENSIONS_CHANGE'], function (e) {
self._loadScene(e.edata)
});
},
/**
Listen to removal of scene blocks
@method _listenRemoves
**/
_listenRemoves: function () {
var self = this;
$(Elements.CLASS_SCENE_REMOVES, self.el).on('click', function (e) {
BB.comBroker.fire(BB.EVENTS.SCENE_ITEM_REMOVE);
});
},
/**
Listen to user selection of existing scene
@method _listenAddNewItem
**/
_listenAddNewItem: function () {
var self = this;
$(Elements.CLASS_SCENE_ADD_NEW, self.el).on('click', function (e) {
var sceneEditorView = BB.comBroker.getService(BB.SERVICES['SCENE_EDIT_VIEW']);
var selectedSceneId = sceneEditorView.getSelectedSceneID()
if (_.isUndefined(selectedSceneId)) {
bootbox.alert({
message: $(Elements.MSG_BOOTBOX_MUST_SELECT_SCENE).text()
});
return;
}
var sceneMime = BB.Pepper.getSceneMime(selectedSceneId);
var addBlockView = BB.comBroker.getService(BB.SERVICES.ADD_SCENE_BLOCK_VIEW);
addBlockView.setPlacement(BB.CONSTS.PLACEMENT_SCENE);
addBlockView.setSceneMime(sceneMime);
self.options.stackView.slideToPage(Elements.SCENE_ADD_NEW_BLOCK, 'right');
});
},
/**
Listen go back to new scene selection
@method _listenGoBackSceneSelection
**/
_listenGoBackSceneSelection: function () {
var self = this;
$(Elements.BACK_SCENE_SELECTION).on('click', function () {
self._goBackToSceneSelection();
});
},
/**
Listen to when a resource is removed
@method _listenResourceRemoved
**/
_listenResourceRemoved: function () {
var self = this;
BB.comBroker.listen(BB.EVENTS.REMOVED_RESOURCE, function(e){
self._goBackToSceneSelection();
});
},
/**
Go back to the main scene selection screen
@method _goBackToSceneSelection
**/
_goBackToSceneSelection: function(){
var self = this;
var sceneEditorView = BB.comBroker.getService(BB.SERVICES['SCENE_EDIT_VIEW']);
sceneEditorView.disposeScene();
self.options.stackView.slideToPage(Elements.SCENE_SELECTOR, 'left');
},
/**
Listen to scene removed
@method _listenSceneRemoved
**/
_listenSceneRemoved: function(){
var self = this;
BB.comBroker.listen(BB.EVENTS['REMOVED_SCENE'], function (e) {
self.m_selectedSceneID = undefined;
});
},
/**
Load a selected Scene
@method _loadScene
@param {String} i_name
@param {String} i_id
**/
_loadScene: function (i_id) {
self.m_selectedSceneID = i_id;
BB.comBroker.fire(BB.EVENTS.LOAD_SCENE, this, null, self.m_selectedSceneID);
}
});
return ScenesToolbarView;
});