/* This file contains proprietary software owned by Motorola Mobility, Inc.
No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.
(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
*/ /** @requires montage/core/core @requires montage/ui/component */ var Montage = require("montage/core/core").Montage, Component = require("montage/ui/component").Component; exports.StageView = Montage.create(Component, { _documents: { value : [] }, docs: { get: function() { return this._documents; }, set: function(value) { //console.log(value); } }, templateDidLoad: { value: function() { this.eventManager.addEventListener("appLoaded", this, false); } }, didDraw:{ value: function() { if(!this.application.ninja.documentController._textHolder) this.application.ninja.documentController._textHolder = this.element; } }, handleAppLoaded: { value: function() { // Don't bind for now /* Object.defineBinding(this, "docs", { boundObject: this.application.ninja.documentController, boundObjectPropertyPath: "_documents" }); */ } }, /** * Public method * Creates a textarea element which will contain the content of the opened text document. */ createTextAreaElement: { value: function(uuid) { var codeMirrorDiv = document.createElement("div"); codeMirrorDiv.id = "codeMirror_" + uuid; codeMirrorDiv.style.display = "block"; this.element.appendChild(codeMirrorDiv); var textArea = document.createElement("textarea"); textArea.id = "code"; textArea.name = "code"; codeMirrorDiv.appendChild(textArea); return textArea; } }, /** * Public method * Creates a new instance of a code editor */ createTextView: { value: function(doc) { var type; this.application.ninja.documentController._hideCurrentDocument(); this.hideOtherDocuments(doc.uuid); switch(doc.documentType) { case "css" : type = "css"; break; case "js" : type = "javascript"; break; case "html" : type = "htmlmixed"; break; case "json" : type = "javascript"; break; case "php" : type = "php"; break; case "pl" : type = "perl"; break; case "py" : type = "python"; break; case "rb" : type = "ruby"; break; case "xml" : type = "xml"; break; } document.getElementById("codeMirror_"+doc.uuid).style.display="block"; doc.editor = this.application.ninja.codeEditorController.createEditor(doc, type, doc.documentType); doc.editor.hline = doc.editor.setLineClass(0, "activeline"); this.application.ninja.stage._scrollFlag = false; // TODO HACK to prevent type error on Hide/Show Iframe this.application.ninja.documentController.activeDocument = doc; this.application.ninja.stage.hideCanvas(true); document.getElementById("iframeContainer").style.display="none";//hide the iframe when switching to code view this.showCodeViewBar(true); this.application.ninja.codeEditorController.applySettings(); this.collapseAllPanels(); } }, /** * Public method * Switches between documents. Document state data is saved and restored whereever applicable */ switchDocument:{ value: function(doc){ this.application.ninja.documentController._hideCurrentDocument(); this.application.ninja.documentController.activeDocument = doc; if(this.application.ninja.documentController.activeDocument.currentView === "design") { this.application.ninja.currentDocument = this.application.ninja.documentController.activeDocument; } this.application.ninja.stage._scrollFlag = false; // TODO HACK to prevent type error on Hide/Show Iframe this.application.ninja.documentController._showCurrentDocument(); //focus editor if(!!this.application.ninja.documentController.activeDocument && !!this.application.ninja.documentController.activeDocument.editor){ this.application.ninja.documentController.activeDocument.editor.focus(); this.showCodeViewBar(true); this.application.ninja.codeEditorController.applySettings(); this.collapseAllPanels(); } if(this.application.ninja.documentController.activeDocument.currentView === "design") { this.application.ninja.stage._scrollFlag = true; // TODO HACK to prevent type error on Hide/Show Iframe this.application.ninja.stage.stageDeps.reinitializeForSwitchDocument();//reinitialize draw-util, snapmanager and view-util this.showCodeViewBar(false); this.restoreAllPanels(); } NJevent("switchDocument"); } }, /** * Public method * Switches between different views of a design document, like HTML design view, HTML code view */ switchDesignDocViews: { value: function() { //TODO } }, hideOtherDocuments:{ value:function(docUuid){ this.application.ninja.documentController._documents.forEach(function(aDoc){ if(aDoc.currentView === "design"){ aDoc.container.parentNode.style["display"] = "none"; }else if((aDoc.currentView === "code") && (aDoc.uuid !== docUuid)){ aDoc.container.style["display"] = "none"; } }, this); } }, showRulers:{ value:function(){ this.application.ninja.rulerTop.style.display = "block"; this.application.ninja.rulerLeft.style.display = "block"; } }, hideRulers:{ value:function(){ this.application.ninja.rulerTop.style.display = "none"; this.application.ninja.rulerLeft.style.display = "none"; } }, showCodeViewBar:{ value:function(isCodeView){ if(isCodeView === true) { this.application.ninja.editorViewOptions.element.style.display = "block"; this.application.ninja.documentBar.element.style.display = "none"; }else{ this.application.ninja.documentBar.element.style.display = "block"; this.application.ninja.editorViewOptions.element.style.display = "none"; } } }, collapseAllPanels:{ value:function(){ this.application.ninja.panelSplitter.collapse(); this.application.ninja.timelineSplitter.collapse(); this.application.ninja.toolsSplitter.collapse(); this.application.ninja.optionsSplitter.collapse(); } }, restoreAllPanels:{ value:function(){ this.application.ninja.panelSplitter.restore(); this.application.ninja.timelineSplitter.restore(); this.application.ninja.toolsSplitter.restore(); this.application.ninja.optionsSplitter.restore(); } }, applyTheme:{ value:function(themeClass){ this.element.className = "codeViewContainer "+themeClass; } } });