// ========================================================================== // Project: Greenhouse // Copyright: ©2010 Mike Ball // ========================================================================== /*globals Greenhouse js_beautify*/ /**
@extends Greenhouse @author Mike Ball @author Evin Grano @version RC1 @since RC1
*/ Greenhouse.mixin( /** @scope Greenhouse */{
// .......................................................... // Ready States // readyStates: SC.State.design({ initialSubstate: 'readyWaiting', enterState: function(){ console.log('greenhouse has landed'); var c = Greenhouse.getPath('mainPage.mainPane.container'); c.set('nowShowing', Greenhouse.getPath('appPage.mainView')); }, exitState: function(){ }, // .......................................................... // Events // run: function(){ var target = Greenhouse.targetController.get('name'); window.open(target, "",""); }, selectFile: function(){ var c = Greenhouse.fileController.get('content'); if(c) { c.refresh(); this.gotoState('gettingFile'); } }, unselectFile: function(){ // TODO: [EG, MB] add the action for unselecting this.gotoState('readyWaiting'); }, reloadIframe: function(){ Greenhouse.filesController.set('selection', null); Greenhouse.gettingFile._firstTime = YES; Greenhouse.iframe.location.reload(); this.gotoState('iframeLoading'); }, resizePage: function(sender){ var s = sender.getPath('content.size'), def = {top: 20, left: 20, right: 20, bottom: 83}, iframe = Greenhouse.get('iframe'), view; view = iframe.SC.designPage.getPath('designMainPane.container'); if(!s){ view.set('classNames', ['design']); view.set('layout', def); } else{ view.set('classNames', []); view.set('layout', SC.merge({centerX:0, centerY: 0}, s)); } // .......................................................... // Wait for the view to re-draw and update the webViewFrame // SC.run(function(){ var dropViewFrame, webView = Greenhouse.appPage.get('webView'), pv = webView.get('parentView'), webViewFrame = webView.get('frame'); console.log(webViewFrame); webViewFrame = pv.convertFrameToView(webViewFrame, null); console.log(webViewFrame); //add the drop container to the adjusted layout pv = view.get('parentView'); dropViewFrame = pv.convertFrameToView(view.get('frame'), null); if(dropViewFrame){ webViewFrame.x += dropViewFrame.x; webViewFrame.y += dropViewFrame.y; } console.log(Greenhouse._webViewFrame); //update Greenhouse._webViewFrame = webViewFrame; console.log(Greenhouse._webViewFrame); }); }, // .......................................................... // Ready substates // readyWaiting: SC.State.design({ }), gettingFile: SC.State.design({ init: function(){ sc_super(); this._firstTime = YES; }, enterState: function(){ //TODO draw spinner }, exitState: function(){ }, fileSelectedIsAPage: function(){ Greenhouse.loadIframeWithPage(this._firstTime); this._firstTime = NO; this.gotoHistoryState('pageSelected'); }, fileSelectedIsNotAPage: function(){ this.gotoState('fileSelected'); } }), fileSelected: SC.State.design({ enterState: function(){ //TODO: draw message saying we can't do anything with this right now... }, exitState: function(){} }), pageSelected: SC.State.design({ parentState: 'ready', initialSubstate: 'noDock', enterState: function(){}, exitState: function(){}, // .......................................................... // Events // save: function(){ var designPage, content = Greenhouse.fileController.get('content'); designPage = Greenhouse.iframe.SC.designsController.get('page'); //check if this page has a name... designPage.setPath('designController.selection', null); if(!designPage.get('pageName')) designPage.set('pageName', content.get('pageName')); designPage = designPage.emitDesign(); content.set('body', js_beautify(designPage)); content.commitRecord(); }, addProperty: function(){ var designer = Greenhouse.designController.get('content'); if(designer){ this._propertyCount = this._propertyCount ? this._propertyCount+1 : 1; designer.designProperties.pushObject("newProperty"+this._propertyCount); //TODO: generate better name.... designer.propertyDidChange('editableProperties'); } }, deleteProperty: function(){ var prop = Greenhouse.propertyController.get('content'), designer = Greenhouse.designController.get('content'), view; if(prop && designer){ view = prop.view; view[prop.view] = undefined; delete view[prop.key]; //FIXME: [MB] this isn't removing the property... designer.designProperties.removeObject(prop.key); view.propertyDidChange(prop.key); if(view.displayDidChange) view.displayDidChange(); designer.propertyDidChange('editableProperties'); } }, // .......................................................... // pageSelected substates // noDock: SC.State.design({ parentState: 'pageSelected', enterState: function(){ var dock = Greenhouse.appPage.get('dockView'); dock.set('layout', {top: 0, bottom: 0, right: 0, width: 0}); var design = Greenhouse.appPage.get('designAreaView'); design.set('layout', {top: 0, bottom: 0, right: 0, left: 0}); }, exitState: function(){ }, // .......................................................... // Events // toggleDockedLibrary: function(){ this.gotoState('docked'); }, toggleDockedInspector: function(){ this.gotoState('docked'); } }), docked: SC.State.design({ parentState: 'pageSelected', enterState: function(){ var dock = Greenhouse.appPage.get('dockView'); dock.set('layout', {top: 0, bottom: 0, right: 0, width: 230}); var design = Greenhouse.appPage.get('designAreaView'); design.set('layout', {top: 0, left: 0, right: 230, bottom: 0}); }, exitState: function(){ }, // .......................................................... // Events // undock: function(){ this.gotoState('noDock'); } }) }) })
});