<?xml version="1.0" encoding="utf-8"?><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" 	xmlns:csxs="com.adobe.csxs.*" 
	layout="absolute" width="100%" height="100%" 
	creationComplete="init()" 
	backgroundGradientColors="[#c0c0c0, #c0c0c0]" fontFamily="Verdana"><mx:Script><![CDATA[	import mx.collections.ArrayCollection;/******************************************************************************/import com.adobe.csxs.core.CSXSInterface;import com.adobe.csxs.events.*;import com.adobe.csxs.types.*;/******************************************************************************/public var csxs:CSXSInterface;/******************************************************************************/
private function init():void {	try {		csxs = CSXSInterface.getInstance();		var windowGeoData:WindowGeometry = new WindowGeometry(100, 100, 350, 400); 		csxs.requestStateChange(StateChangeEvent.WINDOW_RESIZE, windowGeoData);				var colorArray:Object = this.getStyle("backgroundGradientColors");		colorArray = updateHostData(colorArray[0]);		this.setStyle("backgroundGradientColors", [colorArray[0], colorArray[0]]);		ExternalInterface.addCallback("PhotoshopWorkspaceSet" + csxs.getExtensionId(), photoshopWorkspaceSet);		ExternalInterface.addCallback("PhotoshopWorkspaceGet" + csxs.getExtensionId(), photoshopWorkspaceGet);		requestWorkspaceAware();
        persistentClick();                cbWorkspaces.addEventListener("change", workspaceChangeHandler);        		getWorkspaceNames();				logMessage(" init complete");                  	}
  	catch (errObject:Error) {  		logMessage(" CATCH: init " + errObject.message);  	}}
/******************************************************************************/private function addWorkspace():void {	try {    	var reqResult:SyncRequestResult = csxs.evalScript("workspace.addWorkspace", escape(encodeURIComponent(etWorkspaceName.text)));	   	if (SyncRequestResult.COMPLETE != reqResult.status) {			logMessage(" ERROR: SyncRequestResult.COMPLETE != result.status in addWorkspace.");   		} else {   			getWorkspaceNames();   			logMessage(" addWorkspace: " + reqResult.data.message);   		} 	}  	catch (errObject:Error) {		logMessage(" CATCH: addWorkspace " + errObject.message);   	}}/******************************************************************************/private function deleteWorkspace():void {	try {    	var reqResult:SyncRequestResult = csxs.evalScript("workspace.deleteWorkspace", escape(encodeURIComponent(etWorkspaceName.text)));	   	if (SyncRequestResult.COMPLETE != reqResult.status) {			logMessage(" ERROR: SyncRequestResult.COMPLETE != result.status in deleteWorkspace.");   		} else {   			getWorkspaceNames();   			logMessage(" deleteWorkspace: " + reqResult.data.message);   		}   	}  	catch (errObject:Error) {		logMessage(" CATCH: deleteWorkspace " + errObject.message);   	}}/******************************************************************************/
private function updateHostData(originalColor:Number):Object {	var returnObject:Array = new Array;	try {		var result:SyncRequestResult = csxs.getHostEnvironment();    	if (SyncRequestResult.COMPLETE == result.status) {			var hostData:HostEnvironment = result.data;			var skinInfo:AppSkinInfo = hostData.appSkinInfo;			returnObject.push(skinInfo.panelBackgroundColor.color.rgb);			returnObject.push(skinInfo.baseFontFamily);     	} else {    		logMessage(" ERROR: SyncRequestResult.COMPLETE != result.status in updateHostData.");    	}   	}  	catch (errObject:Error) {		logMessage(" CATCH: updateHostData " + errObject.message);   	}   	return returnObject;}/******************************************************************************/private function workspaceChangeHandler(event:Object):void {	try {    	var reqResult:SyncRequestResult = csxs.evalScript("workspace.selectWorkspace", escape(encodeURIComponent(event.target.selectedItem.toString())));	   	if (SyncRequestResult.COMPLETE != reqResult.status) {			logMessage(" ERROR: SyncRequestResult.COMPLETE != result.status in workspaceChangeHandler.");   		} else {   			logMessage(" selectWorkspace: " + reqResult.data.message);   		}   }  	catch (errObject:Error) {  		logMessage(" CATCH: workspaceChangeHandler " + errObject.message);  	}}/******************************************************************************/private function resetWorkspace():void {	try {    	var reqResult:SyncRequestResult = csxs.evalScript("workspace.resetWorkspace", escape(encodeURIComponent(cbWorkspaces.selectedItem.toString())));	   	if (SyncRequestResult.COMPLETE != reqResult.status) {			logMessage(" ERROR: SyncRequestResult.COMPLETE != result.status in resetWorkspace.");   		} else {   			logMessage(" resetWorkspace: " + reqResult.data.message);    		}	}  	catch (errObject:Error) {  		logMessage(" CATCH: resetWorkspace " + errObject.message);  	}}/******************************************************************************/public function getWorkspaceNames():void {	try {    	var reqResult:SyncRequestResult = csxs.evalScript("workspace.getWorkspaceNames");	   	if (SyncRequestResult.COMPLETE != reqResult.status) {			logMessage(" ERROR: SyncRequestResult.COMPLETE != result.status in getWorkspaceNames.");   		} else {   			var workspaceData:Array = (reqResult.data.message as String).split(",");			cbWorkspaces.dataProvider = new ArrayCollection(workspaceData);   		}	}  	catch (errObject:Error) {  		logMessage(" CATCH: getWorkspaceNames " + errObject.message);  	}}/******************************************************************************/public function clearLog():void {	txtMessage.text = "";}public function logMessage(inMessage:String):void {	txtMessage.text += "\r" + (new Date()).getSeconds().toString()+"."+(new Date()).getMilliseconds().toString() + " ";	txtMessage.text += inMessage;}public function persistentClick():void {	try {		var message:String;		if (cbPersistent.selected) {			message = "PhotoshopPersistent";		} else {			message = "PhotoshopUnPersistent";		}	   	var reqResult:SyncRequestResult = csxs.evalScript(message);   		if (SyncRequestResult.COMPLETE != reqResult.status) {			logMessage(" ERROR: SyncRequestResult.COMPLETE != result.status in persistentClick.");   		} else {   			logMessage(" persistent OK " + cbPersistent.selected.toString());    		}   	}  	catch (errObject:Error) {		logMessage(" CATCH: persistentClick " + errObject.message);   	}}/******************************************************************************private function sendWorkspaceData():void {	try {	   	var reqResult:SyncRequestResult = csxs.evalScript("PhotoshopWorkspaceData", escape(encodeURIComponent(etWorkspaceData.text)));   		if (SyncRequestResult.COMPLETE != reqResult.status) {			logMessage(" ERROR: SyncRequestResult.COMPLETE != result.status in sendWorkspaceData.");   		} else {   			logMessage(" sendWorkspaceData OK");    		}   	}  	catch (errObject:Error) {		logMessage(" CATCH: sendWorkspaceData " + errObject.message);   	}}/******************************************************************************/private function requestWorkspaceAware():void {	try {		var reqResult:SyncRequestResult = csxs.evalScript("PhotoshopWorkspaceAware");	   	if (SyncRequestResult.COMPLETE != reqResult.status) {			logMessage(" ERROR: SyncRequestResult.COMPLETE != result.status in requestWorkspaceAware.");   		} else {   			logMessage(" requestWorkspaceAware OK");   		} 	}  	catch (errObject:Error) {		logMessage(" CATCH: requestWorkspaceAware " + errObject.message);   	}}/******************************************************************************/public function photoshopWorkspaceGet():void {	try {   		var reqResult:SyncRequestResult = csxs.evalScript("PhotoshopWorkspaceData", escape(encodeURIComponent(etWorkspaceData.text)));   		if (SyncRequestResult.COMPLETE != reqResult.status) {			logMessage(" ERROR: SyncRequestResult.COMPLETE != result.status in photoshopWorkspaceGet ");   		} else {   			logMessage(" photoshopWorkspaceGet OK ");		}	}	catch(errObject:Error) {		logMessage(" CATCH: photoshopWorkspaceGet " + errObject.message);	}}/******************************************************************************/public function photoshopWorkspaceSet(workspaceName:String, defaultConfig:Boolean, workspaceData:String):void {	try {		etWorkspaceName.text = decodeURIComponent(unescape(workspaceName));		cbDefaultConfig.selected = defaultConfig;		etWorkspaceData.text = decodeURIComponent(unescape(workspaceData));		logMessage(" photoshopWorkspaceSet OK ")	}	catch(errObject:Error) {		logMessage(" CATCH: photoshopWorkspaceSet " + errObject.message);	}}/******************************************************************************/]]></mx:Script>	<mx:Button x="10" y="0" label="Add" id="btnAddWorkspace" click="{addWorkspace()}"/>	<mx:Button x="70" y="0" label="Delete" id="btnDeleteWorkspace" click="{deleteWorkspace()}"/>	<mx:Button x="140" y="0" label="Reset" id="btnReset" click="{resetWorkspace()}"/>	<mx:Label x="10" y="30" text="Name:"/>	<mx:TextInput x="60" y="30" id="etWorkspaceName" text="" width="140"/>	<mx:Label x="10" y="60" text="Data:"/>	<mx:TextInput x="60" y="60" id="etWorkspaceData" text="" width="140"/>	<mx:ComboBox x="10" y="90" id="cbWorkspaces" width="190"/>	<mx:Button x ="180" y="120" label="Clear" id="btnClearLog" click="{clearLog()}"/>	<mx:CheckBox x="10" y="150" selected="true" label="Persistent" id="cbPersistent" click="{persistentClick()}"/>	<mx:CheckBox x="180" y="150" selected="true" label="Default" id="cbDefaultConfig" enabled="false"/>	<mx:Text x="10" y="180" id="txtMessage" text="" width="300" height="200"/></mx:Application>