Migrating my CS5 Panel to CS4

Anyone, especially newbies, asking for help with Photoshop Scripting and Photoshop Automation - as opposed to those contributing to discussion about an aspect of Photoshop Scripting

Moderators: Tom, Kukurykus

d3mac123

Migrating my CS5 Panel to CS4

Post by d3mac123 »

Hello guys,

I have a project running on CS5 and now i need to migrate it to CS4. It seems all my problems are in the panel mode (I am not a good Flex developer). All the buttons work (they call javascript functions) but the main issues are in TreeView I have. Data is populated there (they came from the javascript file using (as example):
Code: Select allfunction sendVersion() {
   var sxml = "<object>";
   sxml += convertToXML(String(myConfig.vers), "version");
   sxml += "</object>"

   return sxml;
}


Issues start when I need to interact with the tree (double click an item should call a javascript function, press key DELETE does not call the function, etc). Below the mx code for the tree:
Code: Select all   <mx:Tree id="myTree" dataProvider="{treeData}"
          labelField="@label" iconField="@icon" creationComplete="initTree();" click="changeEvt(event);"
          dragComplete="dropHandler(event);"
          change="changeEvt(event);" dragEnabled="true" dropEnabled="true"
          dragEnter="onDragEnter(event);" dragStart="changeEvt(event);"
          dragOver="onDragOver(event);"
          dragDrop="onDragDrop(event);"
          dragMoveEnabled="true" doubleClickEnabled="true" itemDoubleClick="pageDoubleClickEvent(event);"
         
          right="0" left="0" top="118" bottom="33">
      
   </mx:Tree>


and the [CDATA]:
Code: Select all         import com.adobe.csxs.core.CSXSInterface;
         import com.adobe.csxs.types.*;
         import com.adobe.csxs.types.SyncRequestResult;
         
         import flash.events.*;
         import flash.events.MouseEvent;
         
         import mx.collections.ArrayCollection;
         import mx.collections.XMLListCollection;
         import mx.controls.*;
         import mx.core.DragSource;
         import mx.core.IUIComponent;
         import mx.core.UIComponent;
         import mx.events.*;
         import mx.events.DragEvent;
         import mx.events.DropdownEvent;
         import mx.events.ListEvent;
         import mx.managers.CursorManager;
         import mx.managers.DragManager;
         
         import mx.controls.Alert;
         import mx.events.CloseEvent;
         
         //TREE FUNCTIONS
         private var strXML:String; // = '<folder label="Mail"><folder label="inbox"/><folder label="Demo"/></folder>';
         [Bindable]
         private var treeData:XMLListCollection;
         
         [Embed(source="images/plus.gif")]
         public var plus:Class;
         [Embed(source="images/minus.gif")]
         public var minus:Class;
         
         
         private function initTree():void {
            //validateNow();
            //this.myTree.expandChildrenOf(this.myTree.dataProvider[0],true); //openItems = treeData..node;
         }
         
         public var lastTool:String = "";
         public var lastDoc:String = "";
         public var pSel:String = "";
         public var pInfo:String = "";
         public var pPage:String = "";
         private function changeEvt(event:Event):void {
            pSel = String(event.currentTarget.selectedItem.@label);
            pPage = String(event.currentTarget.selectedItem.@page);
            switch (String(event.currentTarget.selectedItem.@icon)) {
               case "icoAudio":
                  pInfo = "Audio";
                  break;
               case "icoBut":
                  pInfo = "Button";
                  break;
               case "icoAnim":
                  pInfo = "Animation";
                  break;
               case "icoVideo":
                  pInfo = "Video";
                  break;
               default:
                  pInfo = "Page";
                  break;
               
            }
         }
         
         private var _draggedItem:XML = null;
         private function onDragEnter( event:DragEvent ) : void
         {
            event.preventDefault();
            event.currentTarget.hideDropFeedback(event);
            
            var ds:DragSource = event.dragSource;
            var items:Array = ds.dataForFormat("treeItems") as Array;
            if (items != null && items.length > 0 && (items[0] is XML))
               _draggedItem = items[0];
            
            DragManager.acceptDragDrop(UIComponent(event.currentTarget));
         }
         private function onDragOver( event:DragEvent ) : void
         {
            event.preventDefault();
            event.currentTarget.hideDropFeedback(event);
            
            myTree.selectedIndex = myTree.calculateDropIndex(event);
            var node:XML = myTree.selectedItem as XML;
            
            // restrict drag & drop to nodes within same parent
            if (_draggedItem.parent() != node.parent())
            {
               DragManager.showFeedback(DragManager.NONE);
               return;
            }
            
            DragManager.showFeedback(DragManager.MOVE);
         }
         private function onDragDrop( event:DragEvent ) : void
         {
            event.preventDefault();
            event.currentTarget.hideDropFeedback(event);
            
            myTree.selectedIndex = myTree.calculateDropIndex(event);
            var node:XML = myTree.selectedItem as XML;
            
            var addToIndex:int = node.childIndex();
            if ((_draggedItem.parent() == node.parent()) && (addToIndex != _draggedItem.childIndex()))
            {
               myTree.dataDescriptor.removeChildAt(node.parent(), _draggedItem, _draggedItem.childIndex());
               myTree.dataDescriptor.addChildAt(node.parent(), _draggedItem, addToIndex);
            }
         }
         
         //BEGIN: handles keyboard events (mostly for datagrid)
         private function keyHandler(event:KeyboardEvent):void {
            if (event.keyCode==8) {
               //DELETE KEY PRESSED
               CursorManager.setBusyCursor();
               CSXSInterface.instance.evalScript("delPage", pSel, pInfo, pPage);
               
               initDataGrid();
               getPSProjXML();
            } else if (event.keyCode==13) {
               //ENTER OR RETURN KEY PRESSED
               CSXSInterface.instance.evalScript("selPage", pSel, pInfo, pPage);
               initDataGrid();
               getPSProjXML();
            }
         }
         //END: keyboard events
         
         //BEGIN: mouse events
         public function pageDoubleClickEvent(event:ListEvent):void{
            CursorManager.setBusyCursor();
            CSXSInterface.instance.evalScript("selPage", pSel, pInfo, pPage);
            initDataGrid();
            getPSProjXML();
         }
         
         
         
         //END: mouse events
         
         
         //DO NOT REMOVE
         // needs to enable Photoshop sending commands
         // host var and const
         public var hostMajorVersion:Number = -1;
         public var hostMinorVersion:Number = -1;
         public var hostFixVersion:Number = -1;
         public const photoshopCS4Version:Number = 11;
         
         
         
         public function getPSVersion():void{
            var reqResult:SyncRequestResult = CSXSInterface.instance.evalScript("getVersion");
            if (SyncRequestResult.COMPLETE == reqResult.status) {
               var versionString:String = reqResult.data.version;
               var versionArray:Array = versionString.split(".");
               if (versionArray.length >= 1) {
                  hostMajorVersion = Number(versionArray[0]);
               }
               if (versionArray.length >= 2) {
                  hostMinorVersion = Number(versionArray[1]);
               }
               if (versionArray.length >= 3) {
                  hostFixVersion = Number(versionArray[2]);
               }
               //projMedia.text = versionString;
            }
         }
         
         // Gets the updated XML from the project
         public var versionNum:String;
         private function getKwikVersion():void{
            var reqResult:SyncRequestResult = CSXSInterface.instance.evalScript("sendVersion");
            if (SyncRequestResult.COMPLETE == reqResult.status) {
               versionNum = reqResult.data.version;
               versNum.text = "Version: "+versionNum;
            }
         }
         private function getPSProjXML():void{
            var reqResult:SyncRequestResult = CSXSInterface.instance.evalScript("getProjXML");
            if (SyncRequestResult.COMPLETE == reqResult.status) {
               var projFileString:String = reqResult.data.projFile;
               var mediaString:String = reqResult.data.media;
               var projNameString:String = reqResult.data.projName;
               var deviceString:String = reqResult.data.device;
               var oriString:String = reqResult.data.orientation;
               var pageNum:String = reqResult.data.numPages;
               
               
               
               strXML = reqResult.data.allpages;
               treeData = new XMLListCollection(XMLList(strXML)..node);
               validateNow();
               var p:Number = reqResult.data.curPage - 1;
               myTree.expandChildrenOf(myTree.dataProvider[p],true);
                           
               
            }
         }
         
         //clears tree
         public function initDataGrid():void {
            strXML = "";
            treeData = new XMLListCollection(XMLList(strXML)..node);
            pSel = "";
            pPage = "";
            pInfo = "";
            CursorManager.removeBusyCursor();
         }
         
         public function init():void{   
            //getUpdatedVersion();
            application.addEventListener(KeyboardEvent.KEY_UP, keyHandler);
            treeData = new XMLListCollection(XMLList(strXML)..folder);
            myTree.setStyle("disclosureClosedIcon", plus);
            myTree.setStyle("disclosureOpenIcon", minus);
            getKwikVersion();
            
            getPSProjXML();
            getPSVersion();
            CSXSInterface.instance.evalScript("PhotoshopPersistent");
            CSXSInterface.instance.evalScript("loadConfig");
            CSXSInterface.instance.evalScript("PhotoshopRegisterEvent", charToInteger("slct").toString());
            // conditional for CS4, CS5 PhotoshopCallback
            if (hostMajorVersion == photoshopCS4Version) {
               ExternalInterface.addCallback("PhotoshopCallback", PhotoshopCallback);
            } else {
               ExternalInterface.addCallback("PhotoshopCallback" + CSXSInterface.instance.getExtensionId(), PhotoshopCallback);
            }
            
         }
         public function charToInteger(keyword:String):Number{
            var value:Number;
            value  = keyword.charCodeAt(0) * 256 * 256 * 256;
            value += keyword.charCodeAt(1) * 256 * 256;
            value += keyword.charCodeAt(2) * 256;
            value += keyword.charCodeAt(3);
            return value;
         }
         
         
         public function PhotoshopCallback(eventID:Number, descID:Number):void{
            var reqResult:SyncRequestResult = CSXSInterface.instance.evalScript("getCurrentTool");
            if (SyncRequestResult.COMPLETE == reqResult.status) {
               var tTool:String = reqResult.data.tool;
               var tDoc:String = reqResult.data.doc;
               //versNum.text = String(tTool);
            }
            
         }
         
         public function callNewProject():void{
            
            CSXSInterface.instance.evalScript("newProject");
            projTitle.text = "No projects open";
            projMedia.text = "";
            projDevice.source = "images/noDevice.png";
            initDataGrid();
            getPSProjXML();
         }
         
         public function dropHandler (event:DragEvent):void {
            var i:int;
            var x:String = "";
            for (i=0;i<treeData.length;i++) {
               x += String(treeData.getItemAt(i).@label)+",";
            }
            CSXSInterface.instance.evalScript("refreshGrid", String(x));
         }
         
         
         public function callDelete():void{
            CursorManager.setBusyCursor();
            CSXSInterface.instance.evalScript("delPage", pSel, pInfo, pPage);
            
            initDataGrid();
            getPSProjXML();
         }
         
         private function trashDragEnter(evt:DragEvent):void {
            //var obj:IUIComponent = IUIComponent("evt.currentTarget");
            //DragManager.acceptDragDrop(obj);
            callDelete();
         }
         
         


Hope someone can help. Thanks again and sorry for the long post.
Alex