/* <copyright> This file contains proprietary software owned by Motorola Mobility, Inc.<br/> No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/> (c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. </copyright> */ /* Panel Container - A container for other panels */ var Montage = require("montage/core/core").Montage, Component = require("montage/ui/component").Component; exports.PanelContainer = Montage.create(Component, { panelData: { value: null }, // This will hold the current loaded panels. panels: { value: [] }, currentPanelState: { value: {} }, templateDidLoad: { value: function() { var pLen, storedData; // Loop through the panels to add to the repetition and get the saved state pLen = this.panelData.panels.length; // Get the saved panel state storedData = this.application.localStorage.getItem("panels"); for(var i = 0; i < pLen; i++) { var p = this.panelData.panels[i]; this['panel_'+i].name = p.name; this['panel_'+i].height = p.height; this['panel_'+i].minHeight= p.minHeight; this['panel_'+i].maxHeight = p.maxHeight; this['panel_'+i].flexible = p.flexible; this['panel_'+i].collapsed = p.collapsed; this['panel_'+i].modulePath = p.modulePath; this['panel_'+i].moduleName = p.moduleName; this['panel_'+i].disabled = true; this.currentPanelState[p.name] = {}; this.currentPanelState.version = "1.0"; if(storedData && storedData[p.name]) { this['panel_'+i].collapsed = storedData[p.name].collapsed; } this.currentPanelState[p.name].collapsed = this['panel_'+i].collapsed; // Check if current panel is open when feature is enabled this.panels.push(this['panel_'+i]); } this.application.localStorage.setItem("panels", this.currentPanelState); this.eventManager.addEventListener( "onOpenDocument", this, false); this.eventManager.addEventListener( "closeDocument", this, false); } }, prepareForDraw: { value: function() { window.addEventListener("resize", this, false); } }, handlePanelResizing: { value: function(e) { this._setPanelsSizes(e.target); } }, handleResize: { value: function(e) { this._redrawPanels(null, true); } }, handleOnOpenDocument: { value: function(){ this.panels.forEach(function(obj) { obj.disabled = false; }); } }, handleCloseDocument: { value: function(){ if(!this.application.ninja.documentController.activeDocument) { this.panels.forEach(function(obj) { obj.disabled = true; }); } } }, handleDropped: { value: function(e) { var draggedIndex, droppedIndex = 0, len = this.panels.length; // console.log(e._event.draggedComponent); for(var i = 0; i < len; i++) { if(this.panels[i].name === e._event.draggedComponent.name) { draggedIndex = i; // Actual component being dragged } if(this.panels[i].name === e._target.name) { droppedIndex = i; } } if(draggedIndex !== droppedIndex) { // switch panels if (droppedIndex === draggedIndex +1) { if(this.panels[droppedIndex].element.nextSibling) { this.panels[droppedIndex].element.parentNode.insertBefore(this.panels[draggedIndex].element, this.panels[droppedIndex].element.nextSibling); } else { return this.appendChild(this.panels[draggedIndex].element); } } else { this.panels[droppedIndex].element.parentNode.insertBefore(this.panels[draggedIndex].element, this.panels[droppedIndex].element); } var panelRemoved = this.panels.splice(draggedIndex, 1); this.panels.splice(droppedIndex, 0, panelRemoved[0]); } } }, _setPanelsSizes: { value: function(panelActivated) { var len = this.panels.length, setLocked = true; for(var i = 0; i < len; i++) { if(this.panels[i] === panelActivated || panelActivated === null) { setLocked = false; } this.panels[i].locked = setLocked; this.panels[i].needsDraw = true; } } }, _redrawPanels: { value: function(panelActivated, unlockPanels) { var maxHeight = this.element.offsetHeight, setLocked = true; var len = this.panels.length; if(unlockPanels === true) { setLocked = false; } var childrensMinHeights = (len * 26); if (panelActivated) { if (!panelActivated.collapsed) { childrensMinHeights+= panelActivated.minHeight -26; } } for(var i = 0; i < len; i++) { var obj = this['panel_'+i]; if(obj === panelActivated) { setLocked = false; } else if(obj.collapsed) { //Collapsed Ignore the rest of the code } else { if (setLocked) { if((maxHeight - childrensMinHeights) - obj.height > 0 ) { childrensMinHeights += obj.height - 26; } else { this.currentPanelState[obj.name].collapsed = obj.collapsed = true; this.application.localStorage.setItem("panels", this.currentPanelState); } } else { if ((maxHeight - childrensMinHeights) - obj.minHeight > 0 ) { childrensMinHeights += obj.minHeight - 26; } else { this.currentPanelState[obj.name].collapsed = obj.collapsed = true; this.application.localStorage.setItem("panels", this.currentPanelState); } } } obj.locked = setLocked; } } }, handleAction: { value: function(e) { var unlockPanels = true; var afterPanel = false; var panelName = e.target.parentComponent.name; this.panels.forEach(function(obj) { if(afterPanel) { if(obj.flexible && obj.collapsed === false) { unlockPanels = false; } } if (obj.name === panelName) { afterPanel = true; } }); switch(e.target.identifier) { case "btnCollapse": this.currentPanelState[e.target.parentComponent.name].collapsed = e.target.parentComponent.collapsed; this.application.localStorage.setItem("panels", this.currentPanelState); //this._setPanelsSizes(e.target.parentComponent); this._redrawPanels(e.target.parentComponent, unlockPanels); break; case "btnClose": //this.panelController.removeObjects(obj); this._redrawPanels(e.target.parentComponent, unlockPanels); break; } } } });