Quantcast
Channel: Adobe Community : Popular Discussions - Illustrator Scripting
Viewing all articles
Browse latest Browse all 12845

Custom Swatch Palette (beta)

$
0
0

Hi yall,

 

I created this custom swatch palette which allows a person to keep swatch info in this palette and instantiate it in documents.  The palette can store notes about a particular swatch and there is a save button somewhere which will save your palette state as an xml file.

 

//==================================================HOBO SWATCHES by Vasily ===========================================//

// BETA

/**

* @@@BUILDINFO@@@ Hobo Swatches_v1.jsx !Version! Sat Jan 18 2014 22:36:40 GMT-0600

*/

 

 

 

 

function swatchPalette(){

//===================================================Icon Resources========================//

var infoBtnSrc='({total:2, '+

'shape_1:{fillColor:[0.11, 0.18, 1], name:"", tag:"", strokeColor:null, pathPoints:[10, 3, 5, 5], ellipsePath:true, closed:true}, '+

'shape_0:{fillColor:[0.11, 0.18, 1], name:"", tag:"", strokeColor:null, pathPoints:[[15, 15], [15, 11], [18, 11], [18, 9], [13, 9], [8, 9], [8, 11], [11, 11], [11, 15], [7, 15], [7, 17], [19, 17], [19, 15]], ellipsePath:false, closed:true}})';

var addBtnSrc='({total:1, '+

'group_0:{'+

'shape_1:{fillColor:null, name:"", tag:"", strokeColor:[0, 0.14, 1], pathPoints:[[19, 9], [14, 9], [14, 4], [12, 4], [12, 9], [7, 9], [7, 11], [12, 11], [12, 16], [14, 16], [14, 11], [19, 11]], ellipsePath:false, closed:true, strokeWidth:2}, '+

'shape_0:{fillColor:[1, 1, 0], name:"", tag:"", strokeColor:null, pathPoints:[[19, 9], [14, 9], [14, 4], [12, 4], [12, 9], [7, 9], [7, 11], [12, 11], [12, 16], [14, 16], [14, 11], [19, 11]], ellipsePath:false, closed:true}, total:2}})';

var rmvBtnSrc='({total:2, '+

'shape_1:{fillColor:null, name:"", tag:"", strokeColor:[0, 0.22, 0], pathPoints:[[20, 9], [6, 9], [6, 11], [20, 11]], ellipsePath:false, closed:true, strokeWidth:3}, '+

'shape_0:{fillColor:[0.27, 1, 0], name:"", tag:"", strokeColor:null, pathPoints:[[20, 9], [6, 9], [6, 11], [20, 11]], ellipsePath:false, closed:true}})';

var rstBtnSrc='({total:2, '+

'group_1:{'+

'shape_1:{fillColor:[1, 0, 0], name:"", tag:"", strokeColor:[0.14, 0.12, 0.13], pathPoints:[45, 4, 12, 12], ellipsePath:true, closed:true, strokeWidth:2}, '+

'shape_0:{fillColor:null, name:"", tag:"", strokeColor:[0.14, 0.12, 0.13], pathPoints:[[51, 12], [51, 2]], ellipsePath:false, closed:false, strokeWidth:3}, total:2}, '+

'group_0:{'+

'shape_7:{fillColor:null, name:"", tag:"", strokeColor:[0.75, 0.36, 0], pathPoints:[[5, 16], [5, 5], [11, 5], [11, 10], [7, 10], [12, 15]], ellipsePath:false, closed:false, strokeWidth:2}, '+

'shape_6:{fillColor:null, name:"", tag:"", strokeColor:[0.75, 0.36, 0], pathPoints:[[20, 5], [15, 5], [15, 15], [19, 15]], ellipsePath:false, closed:false, strokeWidth:2}, '+

'shape_5:{fillColor:null, name:"", tag:"", strokeColor:[0.75, 0.36, 0], pathPoints:[[14, 10], [18, 10]], ellipsePath:false, closed:false, strokeWidth:2}, '+

'shape_4:{fillColor:null, name:"", tag:"", strokeColor:[0.75, 0.36, 0], pathPoints:[[34, 5], [29, 5], [29, 15], [34, 15]], ellipsePath:false, closed:false, strokeWidth:2}, '+

'shape_3:{fillColor:null, name:"", tag:"", strokeColor:[0.75, 0.36, 0], pathPoints:[[29, 10], [32, 10]], ellipsePath:false, closed:false, strokeWidth:2}, '+

'shape_2:{fillColor:null, name:"", tag:"", strokeColor:[0.75, 0.36, 0], pathPoints:[[21, 15], [26, 15], [26, 10], [22, 10], [22, 5], [27, 5]], ellipsePath:false, closed:false, strokeWidth:2}, '+

'shape_1:{fillColor:null, name:"", tag:"", strokeColor:[0.75, 0.36, 0], pathPoints:[[39, 16], [39, 5]], ellipsePath:false, closed:false, strokeWidth:2}, '+

'shape_0:{fillColor:null, name:"", tag:"", strokeColor:[0.75, 0.36, 0], pathPoints:[[35, 5], [42, 5]], ellipsePath:false, closed:false, strokeWidth:2}, total:8}})';

var labModelSrc='({total:3, '+

'shape_2:{fillColor:null, name:"", tag:"", strokeColor:[1, 1, 1], pathPoints:[[4, 2], [4, 8], [7, 8]], ellipsePath:false, closed:false, strokeWidth:2}, '+

'shape_1:{fillColor:null, name:"", tag:"", strokeColor:[0, 1, 1], pathPoints:[[12, 3], [12, 8], [9, 8], [9, 5], [12, 5]], ellipsePath:false, closed:false, strokeWidth:2}, '+

'shape_0:{fillColor:null, name:"", tag:"", strokeColor:[1, 1, 0], pathPoints:[[15, 2], [15, 8], [18, 8], [18, 5], [15, 5]], ellipsePath:false, closed:false, strokeWidth:2}})';

var cmykModelSrc='({total:4, '+

'shape_3:{fillColor:[0, 1, 1], name:"", tag:"", strokeColor:null, pathPoints:[[2, 9], [5, 9], [5, 8], [3, 8], [3, 3], [5, 3], [5, 2], [2, 2]], ellipsePath:false, closed:true}, '+

'shape_2:{fillColor:[1, 0, 1], name:"", tag:"", strokeColor:null, pathPoints:[[10, 3], [9, 3], [9, 4], [8, 4], [8, 3], [7, 3], [7, 2], [6, 2], [6, 3], [6, 5], [6, 9], [7, 9], [7, 5], [8, 5], [8, 6], [9, 6], [9, 5], [10, 5], [10, 9], [11, 9], [11, 2], [10, 2]], ellipsePath:false, closed:true}, '+

'shape_1:{fillColor:[1, 1, 0], name:"", tag:"", strokeColor:null, pathPoints:[[16, 2], [16, 3], [15, 3], [15, 4], [14, 4], [14, 3], [13, 3], [13, 2], [12, 2], [12, 4], [13, 4], [13, 5], [14, 5], [14, 9], [15, 9], [15, 5], [16, 5], [16, 4], [17, 4], [17, 2]], ellipsePath:false, closed:true}, '+

'group_0:{'+

'shape_4:{fillColor:[0, 0, 0], name:"", tag:"", strokeColor:null, pathPoints:[[19, 5], [19, 2], [18, 2], [18, 9], [19, 9], [19, 6], [20, 6], [20, 5]], ellipsePath:false, closed:true}, '+

'shape_3:{fillColor:[0, 0, 0], name:"", tag:"", strokeColor:null, pathPoints:[[20, 8], [21, 8], [21, 6], [20, 6]], ellipsePath:false, closed:true}, '+

'shape_2:{fillColor:[0, 0, 0], name:"", tag:"", strokeColor:null, pathPoints:[[22, 9], [22, 8], [21, 8], [21, 9]], ellipsePath:false, closed:true}, '+

'shape_1:{fillColor:[0, 0, 0], name:"", tag:"", strokeColor:null, pathPoints:[[21, 3], [20, 3], [20, 5], [21, 5]], ellipsePath:false, closed:true}, '+

'shape_0:{fillColor:[0, 0, 0], name:"", tag:"", strokeColor:null, pathPoints:[[22, 2], [21, 2], [21, 3], [22, 3]], ellipsePath:false, closed:true}, total:5}})';

var rgbModelSrc='({total:5, '+

'shape_4:{fillColor:[1, 0, 0], name:"", tag:"", strokeColor:null, pathPoints:[[2, 2], [2, 9], [3, 9], [3, 3], [5, 3], [5, 5], [3, 5], [3, 7], [4, 7], [4, 6], [6, 6], [6, 2]], ellipsePath:false, closed:true}, '+

'shape_3:{fillColor:[1, 0, 0], name:"", tag:"", strokeColor:null, pathPoints:[[5, 8], [5, 7], [4, 7], [4, 8]], ellipsePath:false, closed:true}, '+

'shape_2:{fillColor:[1, 0, 0], name:"", tag:"", strokeColor:null, pathPoints:[[6, 9], [6, 8], [5, 8], [5, 9]], ellipsePath:false, closed:true}, '+

'shape_1:{fillColor:[0, 1, 0], name:"", tag:"", strokeColor:null, pathPoints:[[7, 9], [11, 9], [11, 6], [9, 6], [9, 7], [10, 7], [10, 8], [8, 8], [8, 3], [10, 3], [10, 4], [11, 4], [11, 2], [7, 2]], ellipsePath:false, closed:true}, '+

'shape_0:{fillColor:[0, 0, 1], name:"", tag:"", strokeColor:null, pathPoints:[[13, 5], [13, 3], [15, 3], [15, 5], [16, 5], [16, 2], [12, 2], [12, 9], [16, 9], [16, 6], [15, 6], [15, 8], [13, 8], [13, 6], [15, 6], [15, 5]], ellipsePath:false, closed:true}})';

var grayModelSrc='({total:7, '+

'shape_6:{fillColor:[0.57, 0.58, 0.59], name:"", tag:"", strokeColor:null, pathPoints:[[7, 2], [7, 9], [8, 9], [8, 3], [10, 3], [10, 5], [8, 5], [8, 7], [9, 7], [9, 6], [11, 6], [11, 2]], ellipsePath:false, closed:true}, '+

'shape_5:{fillColor:[0.57, 0.58, 0.59], name:"", tag:"", strokeColor:null, pathPoints:[[10, 8], [10, 7], [9, 7], [9, 8]], ellipsePath:false, closed:true}, '+

'shape_4:{fillColor:[0.57, 0.58, 0.59], name:"", tag:"", strokeColor:null, pathPoints:[[11, 9], [11, 8], [10, 8], [10, 9]], ellipsePath:false, closed:true}, '+

'shape_3:{fillColor:[0.82, 0.82, 0.83], name:"", tag:"", strokeColor:null, pathPoints:[[2, 9], [6, 9], [6, 6], [4, 6], [4, 7], [5, 7], [5, 8], [3, 8], [3, 3], [5, 3], [5, 4], [6, 4], [6, 2], [2, 2]], ellipsePath:false, closed:true}, '+

'shape_2:{fillColor:[0.35, 0.36, 0.38], name:"", tag:"", strokeColor:null, pathPoints:[[15, 3], [13, 3], [13, 2], [15, 2]], ellipsePath:false, closed:true}, '+

'shape_1:{fillColor:[0.35, 0.36, 0.38], name:"", tag:"", strokeColor:null, pathPoints:[[15, 3], [15, 5], [13, 5], [13, 3], [12, 3], [12, 9], [13, 9], [13, 6], [15, 6], [15, 9], [16, 9], [16, 3]], ellipsePath:false, closed:true}, '+

'shape_0:{fillColor:[0.2, 0.22, 0.24], name:"", tag:"", strokeColor:null, pathPoints:[[21, 2], [21, 3], [20, 3], [20, 4], [19, 4], [19, 3], [18, 3], [18, 2], [17, 2], [17, 4], [18, 4], [18, 5], [19, 5], [19, 9], [20, 9], [20, 5], [21, 5], [21, 4], [22, 4], [22, 2]], ellipsePath:false, closed:true}})';

var noteMarkSrc='({total:4, '+

'shape_3:{fillColor:[0.53, 0.33, 0.26], name:"", tag:"", strokeColor:[0.14, 0.12, 0.13], pathPoints:[[11, 21], [11, 14], [4, 14]], ellipsePath:false, closed:true, strokeWidth:1}, '+

'shape_2:{fillColor:[1, 0.97, 0.62], name:"", tag:"", strokeColor:[0.14, 0.12, 0.13], pathPoints:[[11, 21], [1, 21], [1, 14], [7, 14], [11, 19]], ellipsePath:false, closed:true, strokeWidth:1}, '+

'shape_1:{fillColor:null, name:"", tag:"", strokeColor:[0.14, 0.12, 0.13], pathPoints:[[1, 17], [6, 17]], ellipsePath:false, closed:false, strokeWidth:1}, '+

'shape_0:{fillColor:null, name:"", tag:"", strokeColor:[0.14, 0.12, 0.13], pathPoints:[[1, 19], [6, 19]], ellipsePath:false, closed:false, strokeWidth:1}})';

var okBtnSrc='({total:2, '+

'group_1:{'+

'shape_5:{fillColor:null, name:"", tag:"", strokeColor:[0.39, 0.31, 0], pathPoints:[[11, 5], [5, 5], [5, 15], [11, 15]], ellipsePath:false, closed:false, strokeWidth:2}, '+

'shape_4:{fillColor:null, name:"", tag:"", strokeColor:[0.39, 0.31, 0], pathPoints:[[28, 5], [22, 5], [22, 15], [28, 15]], ellipsePath:false, closed:true, strokeWidth:2}, '+

'shape_3:{fillColor:null, name:"", tag:"", strokeColor:[0.39, 0.31, 0], pathPoints:[[14, 4], [14, 15], [19, 15]], ellipsePath:false, closed:false, strokeWidth:2}, '+

'shape_2:{fillColor:null, name:"", tag:"", strokeColor:[0.39, 0.31, 0], pathPoints:[[45, 5], [40, 5], [40, 15], [45, 15]], ellipsePath:false, closed:false, strokeWidth:2}, '+

'shape_1:{fillColor:null, name:"", tag:"", strokeColor:[0.39, 0.31, 0], pathPoints:[[40, 10], [43, 10]], ellipsePath:false, closed:false, strokeWidth:2}, '+

'shape_0:{fillColor:null, name:"", tag:"", strokeColor:[0.39, 0.31, 0], pathPoints:[[31, 15], [36, 15], [36, 10], [32, 10], [32, 5], [37, 5]], ellipsePath:false, closed:false, strokeWidth:2}, total:6}, '+

'group_0:{'+

'shape_2:{fillColor:[0, 0, 0], name:"", tag:"", strokeColor:[0.57, 0.58, 0.59], pathPoints:[47, 2, 15, 15], ellipsePath:true, closed:true, strokeWidth:1}, '+

'shape_1:{fillColor:null, name:"", tag:"", strokeColor:[0.93, 0.11, 0.14], pathPoints:[[51, 13], [58, 6]], ellipsePath:false, closed:false, strokeWidth:2}, '+

'shape_0:{fillColor:null, name:"", tag:"", strokeColor:[0.93, 0.11, 0.14], pathPoints:[[58, 13], [51, 6]], ellipsePath:false, closed:false, strokeWidth:2}, total:3}})';

var addToDocBtnSrc='({total:5, '+

'shape_4:{fillColor:[1, 1, 0.59], name:"", tag:"", strokeColor:[0.14, 0.12, 0.13], pathPoints:[[22, 16], [13, 16], [13, 9], [17, 5], [22, 5]], ellipsePath:false, closed:true, strokeWidth:2}, '+

'shape_3:{fillColor:[0.14, 0.12, 0.13], name:"", tag:"", strokeColor:null, pathPoints:[[11, 13], [8, 13], [8, 4], [11, 4]], ellipsePath:false, closed:true}, '+

'shape_2:{fillColor:[0.14, 0.12, 0.13], name:"", tag:"", strokeColor:null, pathPoints:[[5, 10], [5, 7], [14, 7], [14, 10]], ellipsePath:false, closed:true}, '+

'shape_1:{fillColor:[1, 0, 0], name:"", tag:"", strokeColor:null, pathPoints:[[13, 9], [6, 9], [6, 8], [13, 8]], ellipsePath:false, closed:true}, '+

'shape_0:{fillColor:[1, 0, 0], name:"", tag:"", strokeColor:null, pathPoints:[[10, 5], [10, 12], [9, 12], [9, 5]], ellipsePath:false, closed:true}})';

//===================================================Basic Functions========================//

    var UIElements=[Window,Group,EditText,Panel];

    for(var i=0; i<UIElements.length; i++){

        UIElements[i].prototype.setBg=function(rgb){

            this.graphics.backgroundColor=this.graphics.newBrush(this.graphics.Br ushType.SOLID_COLOR,[rgb[0],rgb[1],rgb[2]]);

        }

    }

    function round2(num){

        return Math.round(num*100)/100;

    }

    var env=ScriptUI.environment;

   

    function convertAppColor(src,dest,clrArr){

        return app.convertSampleColor(ImageColorSpace[src], clrArr, ImageColorSpace[dest], ColorConvertPurpose.defaultpurpose);

    }

    function currentTime(){

        var time=new Date();

        var hours=time.getHours();

        var minutes=time.getMinutes();

        var seconds=time.getSeconds();

        if(seconds<10){seconds='0'+seconds;}

        if(minutes<10){minutes='0'+minutes;}

        var ampm=function(){

            if(hours>12){

                hours-=12;

                return 'pm';

            } else {

                if(hours==0){hours=1;}

                return 'am';

            }

        }();

        return (hours)+":"+minutes+":"+seconds+" "+ampm;

    }

    function getUIRGB(type, clr){

        for(var x=0; x<clr.length; x++){

            clr[x]=clr[x]*1;

        }

        if(type=="RGB"){

            return [round2(clr[0]/255),round2(clr[1]/255),round2(clr[2]/255)];

        } else if(type=="CMYK"){

            var newArr=convertAppColor("CMYK","RGB",[clr[0],clr[1],clr[2],clr[3]]);

            return [round2(newArr[0]/255),round2(newArr[1]/255),round2(newArr[2]/255)];

        } else if(type=="GRAY"){

            var newArr=convertAppColor("GrayScale","RGB",[clr[0]]);

            return [round2(newArr[0]/255),round2(newArr[1]/255),round2(newArr[2]/255)];

        } else if(type=="LAB"){

            var newArr=convertAppColor("LAB","RGB",[clr[0],clr[1],clr[2]]);

            return [round2(newArr[0]/255),round2(newArr[1]/255),round2(newArr[2]/255)];

        } else {

            return [0.5,0.5,0.5];

        }

    }

//===================================================Advanced Functions========================//

    //===================================XML=============//

    function wrapCDATA(str, propNm){

        str = '<data>'+str+'</data>';

        str = str.replace(/(\<data\>)/g, '<'+propNm+'><![CDATA[');

        str = str.replace(/(\<\/data\>)/g,']]\>'+'</'+propNm+'>');

        return XML(str);

    }

    function stringXmlSafe(str){

        str=str.toString();

        str=str.replace(/&(?!(amp;|gt;|lt;|quot;|apos;))/g,"&amp;");

        str=str.replace(/</g,"&lt;");

        str=str.replace(/>/g,"&gt;");

        str=str.replace(/'/g,"&apos;");

        str=str.replace(/"/g,"&quot;");

        return str;

    }

    function getXmlSwatchesArr(xmlFile){

        var myFile=xmlFile;

        myFile.open('r');

        myFile.seek(0,0);

        var fileStr=myFile.read();

        myFile.close();

        var xmlObj=XML(fileStr);

        var swatchArr=[];

        for(var x=0, ln=xmlObj.children().length(); x<ln; x++){

            var sw={};

            var thisSw=xmlObj.children()[x];

            sw.name=thisSw.descendants("name").toString();

            sw.aiSwatchKind=thisSw.descendants("aiswatchkind").toString();

            var comp=thisSw.descendants("colorcomp");

            sw.colorComp={};

            sw.colorComp.mode=comp.descendants("mode").toString();

            sw.colorComp.comp=[];

            for(var y=0, ln_2=thisSw.descendants("colorcomp").descendants("colorvalues").child ren().length(); y<ln_2; y++){

                sw.colorComp.comp.push(thisSw.descendants("colorcomp").descendants("c olorvalues").children()[y]*1);

            }

            sw.notes=thisSw.descendants("notes");

            sw.originDoc=thisSw.descendants("origindoc").toString();

            swatchArr.push(sw);

        }

        return swatchArr;

    }

    function getXmlSwatchesXML(swatchArr){

        XML.prettyIndent=4;

        var xmlBody=new XML('<swatches></swatches>');

        for(var i=0; i<swatchArr.length; i++){

            var thisSw=swatchArr[i];

            xmlBody.appendChild(new XML("<swatch></swatch>")); xmlBody.swatch[i].@order=i+1;

            xmlBody.swatch[i].appendChild(new XML("<name>"+stringXmlSafe(thisSw.name)+"</name>"));

            if(thisSw.name!='none'){

                if(thisSw.info && thisSw.info.plating){

                    thisSw.aiSwatchKind=thisSw.info.plating;

                    thisSw.colorComp.mode=thisSw.colorComp.typename;

                    thisSw.originDoc=thisSw.info.originDoc;

                    thisSw.notes=thisSw.info.notes;

                }

                xmlBody.swatch[i].appendChild(new XML("<aiswatchkind>"+stringXmlSafe(thisSw.aiSwatchKind)+"</aiswatchki nd>"));

                xmlBody.swatch[i].appendChild(new XML("<colorcomp></colorcomp>"));

                xmlBody.swatch[i].colorcomp[0].appendChild(new XML("<mode>"+stringXmlSafe(thisSw.colorComp.mode)+"</mode>"));

                xmlBody.swatch[i].colorcomp[0].appendChild(new XML("<colorvalues></colorvalues>"));

                for(var j=0; j<thisSw.colorComp.comp.length; j++){

                    xmlBody.swatch[i].colorcomp[0].colorvalues[0].appendChild(new XML("<value>"+stringXmlSafe(thisSw.colorComp.comp[j])+"</value>"));

                }

                xmlBody.swatch[i].notes=wrapCDATA(thisSw.notes, 'notes');

                xmlBody.swatch[i].origindoc=stringXmlSafe(thisSw.originDoc);

            }

        }

        return xmlBody;

    }

    //===================================end XML=============//

   

    // gets type and color array from swatch in swatch palette - for BT

    function getAISwatchColor(processColorOrSpot,name){

        function round2(num){

            return Math.round(num*100)/100;

        }

        var result={type:null, name:null, colorArr:null, uiColor:null, plating:null, originDoc:null, creDt:null, rgbClr:null, cmykClr:null, grayClr:null, labClr:null};

        var clr=processColorOrSpot;

        result.name=name;

        if(clr=="[RGBColor]"){

            result.type="RGB"; result.colorArr=[round2(clr.red),round2(clr.green),round2(clr.blue)];

            result.uiColor=[clr.red/255,clr.green/255,clr.blue/255]; result.plating='Process';

        } else if(clr=="[CMYKColor]"){

            result.type="CMYK"; result.colorArr=[round2(clr.cyan),round2(clr.magenta),round2(clr.yell ow),round2(clr.black)]; result.uiColor=function(){

                var newArr=convertAppColor("CMYK","RGB",[clr.cyan,clr.magenta,clr.yellow, clr.black]);

                return [newArr[0]/255,newArr[1]/255,newArr[2]/255,];

            }(); result.plating='Process';

        } else if(clr=="[GrayColor]"){

            result.type="GRAY"; result.colorArr=[round2(clr.gray)]; result.uiColor=function(){

                var newArr=convertAppColor("GrayScale","RGB",[clr.gray]);

                return [newArr[0]/255,newArr[1]/255,newArr[2]/255,];

            }(); result.plating='Process';

        } else if(clr=="[SpotColor]"){

            clr=clr.spot;

            if(clr.colorType==ColorModel.SPOT){

                result.plating='Spot';

            } else if(clr.colorType==ColorModel.PROCESS){

                result.plating='GlobalProcess';

            } else if(clr.colorType==ColorModel.REGISTRATION){

                result.plating='Registration';

            } else {

                result.plating="Process";

            }

            var intClr=clr.getInternalColor();

            for(var i=0; i<intClr.length; i++){

                intClr[i]=round2(intClr[i]);

            }

            if(clr.spotKind==SpotColorKind.SPOTLAB){

                result.type="LAB"; result.colorArr=intClr; result.uiColor=function(){

                    var newArr=convertAppColor("LAB","RGB",[intClr[0],intClr[1],intClr[2]]);

                    return [newArr[0]/255,newArr[1]/255,newArr[2]/255,];

                }();

            } else if(clr.spotKind==SpotColorKind.SPOTRGB){

                result.type="RGB"; result.colorArr=intClr; result.uiColor=[intClr[0]/255,intClr[1]/255,intClr[2]/255];

            } else if(clr.spotKind==SpotColorKind.SPOTCMYK){

                result.type="CMYK"; result.colorArr=intClr; result.uiColor=function(){

                    var newArr=convertAppColor("CMYK","RGB",[intClr[0],intClr[1],intClr[2],in tClr[3]]);

                    return [newArr[0]/255,newArr[1]/255,newArr[2]/255,];

                }();

            }

        }

        var colorMode=result.type;

        if(colorMode=="GRAY"){

            colorMode="GrayScale";

        }

        var altClrs=[

            result.rgbClr=convertAppColor(colorMode, "RGB", result.colorArr),

            result.cmykClr=convertAppColor(colorMode, "CMYK", result.colorArr),

            result.grayClr=convertAppColor(colorMode, "GrayScale", result.colorArr),

            result.labClr=convertAppColor(colorMode, "LAB", result.colorArr),

        ];

        for(var c=0; c<altClrs.length; c++){

            for(var d=0; d<altClrs[c].length; d++){

                altClrs[c][d]=round2(altClrs[c][d]);

            }

        }

        result.originDoc=app.activeDocument.name;

        result.creDt=currentTime();

        return result;

    }

 

 

    function drawPath(shp, canvas){

        var thisShp=shp;

        if(thisShp.ellipsePath!=true){

            var vectorPts=thisShp.pathPoints;

            canvas.newPath(); canvas.moveTo(thisShp.pathPoints[0][0],thisShp.pathPoints[0][1]);

            for(var j=0; j<vectorPts.length; j++){

                var thisAnchor=vectorPts[j];

                var x=thisAnchor[0], y=thisAnchor[1];

                canvas.lineTo(x,y);

            }

            if(thisShp.closed==true){

                canvas.closePath();

            }

        } else {

            var cirPts=thisShp.pathPoints;

            canvas.newPath();

            canvas.ellipsePath(round2(cirPts[0]), round2(cirPts[1]), round2(cirPts[2]), round2(cirPts[3]));

            canvas.closePath();

        }

        if(thisShp.fillColor!=null){

            var clr=thisShp.fillColor;

            var myBrush=canvas.newBrush(canvas.BrushType.SOLID_COLOR,clr);

            canvas.fillPath(myBrush);

        }

        if(thisShp.strokeColor!=null){

            var clr=thisShp.strokeColor;

            var myPen=canvas.newPen(canvas.PenType.SOLID_COLOR,[clr[0],clr[1],clr[2], 1], thisShp.strokeWidth);

            canvas.strokePath(myPen);

        }

    }

    function drawImg(objString, canvasArea){

        // using drawPath();

        var obj=eval(objString.replace(/(^'|';$)/g,''));

        var canvas=canvasArea.graphics;

        var counter=obj.total;

        while(counter>=0){

            for(all in obj){

                if(all.match(/\d{1,2}$/g) && all.match(/\d{1,2}$/g)==counter){

                    var thisShp=obj[all];

                    if(all.match('group')){

                        var ctr=obj[all].total;

                        while(ctr>=0){

                            for(paths in obj[all]){

                                if(paths.match(/\d{1,2}$/g) && paths.match(/\d{1,2}$/g)==ctr){

                                    drawPath(obj[all][paths], canvas);

                                }

                            }

                        ctr--;

                        }

                    } else {

                        drawPath(thisShp, canvas);

                    }

                }

            }

        counter-=1;

        } 

    }

    function btnSkin(elem,aClr,w,h){

        var g=elem.graphics; var brush=g.newBrush(g.BrushType.SOLID_COLOR,aClr);

        g.newPath(); g.moveTo(1,1); g.lineTo(w-1,1); g.lineTo(w-1,h-1); g.lineTo(1,h-1); g.closePath(); g.fillPath(brush);

        var ltr=[aClr[0]*1.2,aClr[1]*1.2,aClr[2]*1.2];

        for(var c=0; c<ltr.length; c++){

            if(ltr[c]>1){

                ltr[c]=1;

            }

        }

        brush=g.newBrush(g.BrushType.SOLID_COLOR,ltr); g.newPath(); g.rectPath(0,0,w,h/2); g.fillPath(brush);

        var pen=g.newPen(g.PenType.SOLID_COLOR,[1,1,1,1],2);

        g.newPath(); g.moveTo(1,1); g.lineTo(w-1,1); g.lineTo(w-1,h-1); g.lineTo(1,h-1); g.closePath();

        g.strokePath(pen);

    }

    function createAltDisp(swObj, uiParent){

        var altClrs=swObj.info.altClrs;

        var modes=['CMYK','RGB','LAB','GRAY'];

        for(var m=0; m<modes.length; m++){

            if(swObj.colorComp.typename!=modes[m]){

                var altG=uiParent.add('panel',undefined,modes[m]); altG.margins=[2,6,2,2];

                altG.size=[80,88]; altG.spacing=2; altG.alignChildren='left';

                if(modes[m]=="RGB"){

                    altG.add('statictext',undefined,'R: '+altClrs.rgbClr[0]);

                    altG.add('statictext',undefined,'G: '+altClrs.rgbClr[1]);

                    altG.add('statictext',undefined,'B: '+altClrs.rgbClr[2]);

                } else if(modes[m]=="CMYK"){

                    altG.add('statictext',undefined,'C: '+altClrs.cmykClr[0]);

                    altG.add('statictext',undefined,'M: '+altClrs.cmykClr[1]);

                    altG.add('statictext',undefined,'Y: '+altClrs.cmykClr[2]);

                    altG.add('statictext',undefined,'K: '+altClrs.cmykClr[3]);

                } else if(modes[m]=="LAB"){

                    altG.add('statictext',undefined,'L: '+altClrs.labClr[0]);

                    altG.add('statictext',undefined,'A: '+altClrs.labClr[1]);

                    altG.add('statictext',undefined,'B: '+altClrs.labClr[2]);

                } else if(modes[m]=="GRAY"){

                    altG.add('statictext',undefined,'Black: '+altClrs.grayClr[0]);

                }

            }

        }

    }

    function swatchInfoBox(swObj, uiParent){

        var baseG=uiParent; // usually a group

        var g_1=baseG.add("panel",undefined,"Swatch Info"); g_1.size=[340,340]; g_1.spacing=2; g_1.margins=[4,12,4,4];

        var nameD=g_1.add('edittext',undefined,swObj.name,{readonly:true}); nameD.characters=20; nameD.justify='center';

        if(swObj.name!='none'){

            var mode=swObj.colorComp.typename;

            var sep=g_1.add('panel'); sep.size=[310,2];

            var g_1_0=g_1.add('group');

                var txtG=g_1_0.add('group'); txtG.orientation='column'; txtG.spacing=2; txtG.margins=[2,2,2,2]; txtG.alignChildren='left';

                    txtG.add('statictext',undefined,'Color Model: '+swObj.colorComp.typename);

                    txtG.add('statictext',undefined,'Illustrator Swatch Type: '+swObj.info.plating);

                var swD=g_1_0.add('panel'); swD.size=[34,34]; swD.setBg(swObj.fillColor);

            var sep_1=g_1.add('panel'); sep_1.size=[310,2];

            var g_1_1=g_1.add('group'); g_1_1.spacing=2;

            if(mode=="RGB"){

                var rD=g_1_1.add('statictext',undefined,'Red: '+swObj.colorComp.comp[0]+',');

                var gD=g_1_1.add('statictext',undefined,'Green: '+swObj.colorComp.comp[1]+',');

                var bD=g_1_1.add('statictext',undefined,'Blue: '+swObj.colorComp.comp[2]);

            } else if(mode=="CMYK"){

                var cD=g_1_1.add('statictext',undefined,'Cyan: '+swObj.colorComp.comp[0]+',');

                var mD=g_1_1.add('statictext',undefined,'Magenta: '+swObj.colorComp.comp[1]+',');

                var yD=g_1_1.add('statictext',undefined,'Yellow: '+swObj.colorComp.comp[2]+',');

                var kD=g_1_1.add('statictext',undefined,'Black: '+swObj.colorComp.comp[3]);

            } else if(mode=="LAB"){

                var lD=g_1_1.add('statictext',undefined,'Luminance: '+swObj.colorComp.comp[0]+',');

                var aD=g_1_1.add('statictext',undefined,'a: '+swObj.colorComp.comp[1]+',');

                var bD=g_1_1.add('statictext',undefined,'b: '+swObj.colorComp.comp[2]);

            } else if(mode=="GRAY"){

                var gD=g_1_1.add('statictext',undefined,'Gray-Scale Black: '+swObj.colorComp.comp[0]);

            }

            var g_1_2=g_1.add('group');

            createAltDisp(swObj, g_1_2);

            var sep_2=g_1.add('panel'); sep_2.size=[310,2];

            var originDocG=g_1.add('group'); originDocG.orientation='row';

                var originDocH=originDocG.add('statictext',undefined,"Originating Document");

                var originDocE=originDocG.add('edittext',undefined,swObj.info.originDoc,{ readonly:true}); originDocE.characters=18;

            var g_1_3=g_1.add('panel',undefined,'Notes'); g_1_3.margins=[2,8,2,2]; g_1_3.spacing=2;

                var notesE=g_1_3.add('edittext',undefined,'',{readonly:true, multiline:true}); notesE.size=[310,60];

                if(swObj.info && swObj.info.notes && swObj.info.notes!=''){

                    notesE.text=swObj.info.notes;

                }

                var notesBtnG=g_1_3.add('group');

                    var viewBigBtn=notesBtnG.add('button',undefined,"View Big");

                    var editBtn=notesBtnG.add('button',undefined,"Edit Notes");

                    var clearBtn=notesBtnG.add('button',undefined,"Clear Notes");

            viewBigBtn.onClick=function(){

                if(notesE.text!=''){

                    var notesW=new Window('dialog',"Notes in a bigger window:"); notesW.margins=[4,4,4,4];

                    var bignotesE=notesW.add('edittext',undefined,notesE.text,{multiline:true , readonly:true}); bignotesE.size=[300,360];

                    var closeNotes=notesW.add('button',undefined,"Ok");

                    notesW.show();

                } else {

                    alert("There are no notes here.");

                }

            }

            editBtn.onClick=function(){

                var editResult=function(){

                    var newNotes=null;

                    var w=new Window('dialog','Edit Notes');

                        var inst=w.add('statictext',undefined,"Tip: use Ctrl+Return to enter in a carriage-return.");

                        var editE=w.add('edittext',undefined,notesE.text,{multiline:true}); editE.size=[310,160]; editE.active=true;

                        var btnG=w.add('group');

                            var okBtn=btnG.add('button',undefined,'Set Notes (OK)');

                            var cclBtn=btnG.add('button',undefined,'Cancel');

                    okBtn.onClick=function(){

                        if(editE.text.replace(/\s/g)!=''){

                            newNotes=editE.text;

                        } else {

                            newNotes='';

                        }

                        w.close();

                    }

                    w.show();

                    return newNotes;

                }();

                if(editResult!=null){

                    notesE.text=editResult;

                    swObj.info.notes=editResult;

                    swObj.noteChange=currentTime();

                }

            }

            clearBtn.onClick=function(){

                if(confirm("Are you sure you want to clear the notes?")==true){

                    notesE.text='';

                    swObj.info.notes='';

                    swObj.noteChange=currentTime();

                }

            }

        }

    }

    function infoWindow(SESSION){ //======================================MINI UI

        var noteChange;

        var userChoice={showMode:SESSION.options.showMode, showNotes:SESSION.options.showNotes, noteChange:false};

        var swatchBox=function(){

            if(SESSION.selection.length==0){

                return null;

            } else if(SESSION.selection.length==1){

                return SESSION.selection[0];

            } else if(SESSION.selection.length>1){

                return "--Multiple Selection--";

            }

        }();

        var w=new Window('dialog',"Swatch Info & Preferences"); w.margins=[4,4,4,4];

            var g_0=w.add('group'); g_0.orientation='column'; g_0.spacing=4;

                var g_0_1=g_0.add("group");

                if(swatchBox!=null){

                    if(swatchBox=="--Multiple Selection--"){ // Multi

                        var msg=g_0_1.add('statictext',undefined,swatchBox);

                    } else { //Single

                        if(swatchBox.name!='none'){

                            noteChange=swatchBox.noteChange;

                            swatchInfoBox(swatchBox, g_0_1);

                        } else {

                            var msg=g_0_1.add('statictext',undefined,"Empty Cell");

                        }

                    }

                } else { // NONE

                    //var msg=g_0_1.add('statictext',undefined,"NONE");

                }

                var g_0_1=g_0.add("panel",undefined,"Main Window Prefrences"); g_0_1.size=[340,44]; g_0_1.orientation='column';

                    var boxGrp=g_0_1.add('group');

                        var modelBx=boxGrp.add('checkbox',undefined,"Show Color Mode"); modelBx.value=SESSION.options.showMode;

                        var noteBx=boxGrp.add('checkbox',undefined,"Show Note Marker"); noteBx.value=SESSION.options.showNotes;

                var g_0_2=g_0.add("panel",undefined,"Persistence Options"); g_0_2.size=[340,54];

                    var saveBtn=g_0_2.add('button',undefined,"Save Current Session");

            var okBtn=w.add('button',undefined,'Ok'); okBtn.size=[340,20]; okBtn.margins=[0,0,0,0];

            okBtn.onClick=function(){

                w.close();

            }

            saveBtn.onClick=function(){

                var swcs=SESSION.swatchBoxes, swcsLn=SESSION.swatchBoxes.length;

                var dir=SESSION.presetFolder;

                var saveFl=File(dir+"/HoboSwatchSession.xml");

                var blank=function(){

                    for(var s=0; s<swcsLn; s++){

                        if(swcs[s].name!='none'){

                            return false;

                        }

                    }

                    return true;

                }();

                var go=false;

                if(blank==true){

                    if(confirm('Set saved session to all blanks?',true,'Confirm this action:')==true){

                        go=true;

                    }

                } else if(confirm('Save current session?',true,'Confirm this action:')==true){

                    go=true;

                }

                if(go==true){

                    if(!dir.exists){

                        dir.create();

                    }

                    saveFl.open('w');

                    saveFl.write('<?xml version="1.0"?>\r'+getXmlSwatchesXML(swcs));

                    saveFl.close();

                    if(saveFl.exists){

                        alert("Successfully Saved in: "+decodeURI(saveFl),'SUCCESS!');

                    } else {

                        alert("Sorry, "+decodeURI(saveFl)+"'s save operation was NOT successful!",'Failure... Horrible abysmal failure. :\'(');

                    }

                }

            }

        w.show();

        userChoice.showMode=modelBx.value;

        userChoice.showNotes=noteBx.value;

        userChoice.noteChange=function(){

            if(swatchBox!=null && (swatchBox.noteChange != noteChange)){

                return true;

            }

            return false;

        }();

        return userChoice;

    }

//===================================================For Bridge Talk========================//

    function asSourceString(func, withArgs){

        if(withArgs!=undefined && withArgs==true){

            return func.toSource().toString().replace("(","").replace(/\)$/,"");

        } else {

            return func.toSource().toString().replace("(function "+func.name+"(){","").replace(/}\)$/,"");

        }

    }

    function sendBTmsg(func, updateObj, resultFunc, resultFuncArgs){

        if(updateObj==undefined){updateObj={self: 'nothing'}};

        var updateObjName=updateObj.self;

        if(updateObjName!=undefined){

            var bt=new BridgeTalk;

            bt.target='illustrator';

            var btMsg=asSourceString(func);

            for(all in updateObj){

                if(all!='self'){

                    var rx=new RegExp(updateObjName+'\\.'+all,'g');

                    btMsg=btMsg.replace(rx,updateObj[all]);

                }

            }

            bt.body=btMsg;

            //$.write(btMsg);

            if(resultFunc!=undefined){

                bt.onResult=function(result){

                    resultFunc(result.body, resultFuncArgs);

                }

            }

            bt.send();

        } else {

            $.writeln("Error, function 'sendBTmsg(func, updateOb)': the update object should have a 'self' property, indentifying its' name.");

        }

    }

    function doNothing(){

        var nothing=function(){

            return;

        }()

    }

    function initSwatch(SESSION, sw, name, mode, clrArr, uiClr, info){ // Result of getting document swatches.

        sw.fillColor=uiClr;

        sw.name=name;

        if(mode=="RGB" || mode=="LAB"){

            sw.colorComp={typename:ColorComp[mode].typename,comp:[clrArr[0],clrAr r[1],clrArr[2]]};

        } else if(mode=="CMYK"){

            sw.colorComp={typename:ColorComp[mode].typename,comp:[clrArr[0],clrAr r[1],clrArr[2],clrArr[3]]};

        } else if(mode=="GRAY"){

            sw.colorComp={typename:ColorComp[mode].typename,comp:[clrArr[0]]};

        }

        sw.colorComp.name=sw.name;

        SESSION.nameDisplay.text=sw.name;

        sw.info=info;

        sw.addDrawPhase(sw.coloredState);

        if(info.plating=="Spot"){

            sw.addDrawPhase(sw.spotMark);

        } else if(info.plating=="GlobalProcess"){

            sw.addDrawPhase(sw.globalMark);

        }

        if(SESSION.options.showMode==true){

            sw.addDrawPhase(sw[mode+'Model']);

        }

        if(SESSION.options.showNotes==true && sw.info && sw.info.notes!=''){

            sw.addDrawPhase(sw.noteMark);

        }

        if(sw.selected==true){

            sw.removeDrawPhase(sw.selectedMark);

            sw.addDrawPhase(sw.selectedMark);

        }

        sw.refresh();

        sw.instantiated=true;

        sw.elem.helpTip=sw.getInfo();

    }

//=========<<<<<<<<<<<<<<<BT Function

    function bt_func(){

        var outcome={swatches:[],};

        if(app.documents.length>0){

            var doc=app.activeDocument;

            var swcs=doc.swatches.getSelected();

            if(swcs.length>0){

                BTOBJ.func_convertAppColor;

                BTOBJ.func_currentTime;

                BTOBJ.func_getAISwatchColor;

                for(var s=0; s<swcs.length; s++){

                    var thisSw=swcs[s];

                    if(thisSw.color!="[PatternColor]" && thisSw.color!="[GradientColor]"

                        && thisSw.name!="[Registration]" && thisSw.name!="[None]"){

                        outcome.swatches.push(getAISwatchColor(thisSw.color, thisSw.name));

                    }

                }

                outcome=outcome.toSource();

            } else {

                alert("Please select some swatches from the document's swatches palette.");

            }

        } else {

            alert("Please open a document with swatches.");

        }

    }

    function bt_func_rt(objString, args){ //puts swatches into palette.

        var docSws=eval(objString).swatches; var SESSION=args[0];

        for(var s=0; s<docSws.length; s++){

            var thisSw=docSws[s];

            if(SESSION.selection[s]!=undefined){

                if(thisSw.name!='none'){

                    var sw=SESSION.selection[s];

                    var info={plating: thisSw.plating, originDoc: thisSw.originDoc,

                        altClrs:{rgbClr:thisSw.rgbClr,cmykClr:thisSw.cmykClr,labClr:thisSw.la bClr,grayClr:thisSw.grayClr},

                        notes: '',

                    };

                    initSwatch(SESSION, sw, thisSw.name, thisSw.type, thisSw.colorArr, thisSw.uiColor, info);

                } else {

                    alert("Sorry, can't have a swatch by the name of '"+thisSw.name+"'");

                }

            }

        }

    }

    function bt_func_2(){

        BTOBJ.func_currentTime;

        var outcome={};

        if(app.documents.length>0){

            var doc=app.activeDocument;

            var swcs=eval(BTOBJ.sessionSelection);

            var nonConflictingSwatches=[];

            for(var s=0; s<swcs.length; s++){

                var thisSw=swcs[s];

                try{

                    doc.swatches.getByName(thisSw.name);

                    continue;

                } catch(e){

                    nonConflictingSwatches.push(thisSw);

                }

            }

            for(var s=0; s<nonConflictingSwatches.length; s++){

                var thisSw=nonConflictingSwatches[s];

                for(var t=0; t<nonConflictingSwatches.length; t++){

                    var thisOtherSw=nonConflictingSwatches[t];

                    if(t!=s && thisSw.name==thisOtherSw.name){

                        nonConflictingSwatches.splice(s,1);

                        s=0;

                        break;

                    }

                }

            }

            if(nonConflictingSwatches.length>0){

                var swG=doc.swatchGroups.add(); var d=new Date();

                swG.name="Added at "+((d.getMonth()+1)+"/"+d.getDate()+"/"+d.getFullYear()+" "+currentTime());

            }

            for(var s=0; s<nonConflictingSwatches.length; s++){

                var thisSw=nonConflictingSwatches[s];

                if(thisSw.plating!='Process'){

                    var dsw=doc.spots.add();

                    if(thisSw.colorComp.typename=="LAB"){

                        dsw.colorType=ColorModel.SPOT;

                    }

                    dsw.color=function(){

                        if(thisSw.colorComp.typename=="RGB"){

                            var c=new RGBColor();

                            c.red=thisSw.colorComp.comp[0];

                            c.green=thisSw.colorComp.comp[1];

                            c.blue=thisSw.colorComp.comp[2];

                            return c;

                        } else if(thisSw.colorComp.typename=="CMYK"){

                            var c=new CMYKColor();

                            c.cyan=thisSw.colorComp.comp[0];

                            c.magenta=thisSw.colorComp.comp[1];

                            c.yellow=thisSw.colorComp.comp[2];

                            c.black=thisSw.colorComp.comp[3];

                            return c;

                        } else if(thisSw.colorComp.typename=="LAB"){

                            var c=new LabColor();

                            c.l=thisSw.colorComp.comp[0];

                            c.a=thisSw.colorComp.comp[1];

                            c.b=thisSw.colorComp.comp[2];

                            return c;

                        } else if(thisSw.colorComp.typename=="GRAY"){

                            var c=new CMYKColor();

                            c.cyan=0;

                            c.magenta=0;

                            c.yellow=0;

                            c.black=thisSw.colorComp.comp[0];

                            return c;

                        }

                    }();

                    dsw.name=thisSw.name;

                    if(thisSw.plating=="Spot"){

                        dsw.colorType=ColorModel.SPOT;

                    } else if(thisSw.plating=="GlobalProcess"){

                        dsw.colorType=ColorModel.PROCESS;

                    }

                    swG.addSpot(dsw);

                } else {

                    var dsw=doc.swatches.add();

                    var color=function(){

                        if(thisSw.colorComp.typename=="RGB"){

                            var c=new RGBColor();

                            c.red=thisSw.colorComp.comp[0];

                            c.green=thisSw.colorComp.comp[1];

                            c.blue=thisSw.colorComp.comp[2];

                            return c;

                        } else if(thisSw.colorComp.typename=="CMYK"){

                            var c=new CMYKColor();

                            c.cyan=thisSw.colorComp.comp[0];

                            c.magenta=thisSw.colorComp.comp[1];

                            c.yellow=thisSw.colorComp.comp[2];

                            c.black=thisSw.colorComp.comp[3];

                            return c;

                        } else if(thisSw.colorComp.typename=="GRAY"){

                            var c=new GrayColor();

                            c.gray=thisSw.colorComp.comp[0];

                            return c;

                        }

                    }();

                    dsw.color=color;

                    dsw.name=thisSw.name;

                    swG.addSwatch(dsw);

                }

            }

            outcome=outcome.toSource();

        } else {

            alert("Please open a document with swatches.");

        }

    }

//===================================================Used Objects========================//

    var BTOBJ={

        self: "BTOBJ",

        doNothing: asSourceString(doNothing),

        func_getAISwatchColor: asSourceString(getAISwatchColor, true),

        func_convertAppColor: asSourceString(convertAppColor, true),

        func_currentTime: asSourceString(currentTime, true),

        func_round2: asSourceString(round2, true),

        sessionSelection: null,

    };

    var ColorComp={

        CMYK:{typename:'CMYK', name:'', comp: [0,0,0,0]},

        RGB:{typename:'RGB', name:'', comp: [0,0,0]},

        LAB:{typename:'LAB', name:'', comp: [0,0,0]},

        GRAY:{typename:'GRAY', name:'', comp: [0]},

        NULL:{typename:'NULL', name:'None', comp:null},

    };

    function SwatchBox(elem){

        this.uiOrder=elem.order;

        this.name='none';

        this.elem=elem;

        this.colorComp=ColorComp.NULL;

        this.elem.parentObj=this; // access constructor through UI element.

        this.selected=false;

        this.instantiated=false;

        this.refresh=function(){

            this.assignOnDraw(this.currentDrawingState);

            this.elem.hide();  this.elem.show();

        }

        this.elem.helpTip='none';

        this.fillColor=[0.4,0.4,0.4];

        this.selectedMark={id: 'selected',

            func:function(elem){

                var g = elem.graphics;

                var pen=g.newPen(g.PenType.SOLID_COLOR,[0,0,0,0.7],3);

                g.rectPath(2, 2, 19, 19); g.strokePath(pen);

                pen=g.newPen(g.PenType.SOLID_COLOR,[1,1,1,1],2);

                g.newPath(); g.moveTo(2,7); g.lineTo(2,2); g.lineTo(7,2); g.strokePath(pen);

                g.newPath(); g.moveTo(21,7); g.lineTo(21,2); g.lineTo(16,2); g.strokePath(pen);

                g.newPath(); g.moveTo(2,16); g.lineTo(2,21); g.lineTo(7,21); g.strokePath(pen);

                g.newPath(); g.moveTo(21,16); g.lineTo(21,21); g.lineTo(16,21); g.strokePath(pen);

            }

        };

        this.coloredState={id:'colored',

            func:function(elem){

                var g = elem.graphics;

                var pen=g.newPen(g.PenType.SOLID_COLOR,[0.7,0.7,0.7,1],1);

                var brush=g.newBrush(g.BrushType.SOLID_COLOR,elem.parentObj.fillColor);

                g.newPath(); g.moveTo(1,1); g.lineTo(22,1); g.lineTo(22,22); g.lineTo(1,22); g.closePath();

                g.fillPath(brush); g.strokePath(pen);

            }

        };

        this.noneState={id:'none',

            func:function(elem){

                var g = elem.graphics;

                var pen=g.newPen(g.PenType.SOLID_COLOR,[0.7,0.7,0.7,1],1);

                var brush=g.newBrush(g.BrushType.SOLID_COLOR,[0.4,0.4,0.4]);

                g.newPath(); g.moveTo(1,1); g.lineTo(22,1); g.lineTo(22,22); g.lineTo(1,22); g.closePath();

                g.strokePath(pen); g.fillPath(brush);

            }

        };

        this.spotMark={id:'spot',

            func:function(elem){

                var g = elem.graphics;

                var brush=g.newBrush(g.BrushType.SOLID_COLOR,[1,1,1]), pen=g.newPen(g.PenType.SOLID_COLOR,[0.7,0.7,0.7,1],1);

                g.newPath(); g.moveTo(22,13); g.lineTo(22,22); g.lineTo(13,22); g.closePath();

                g.fillPath(brush); g.strokePath(pen);

                g.newPath();

                brush=g.newBrush(g.BrushType.SOLID_COLOR,[0,0,0]);

                g.ellipsePath(18,18,2,2); g.fillPath(brush);

            }

        };

        this.globalMark={id:'global',

            func:function(elem){

                var g = elem.graphics;

                var brush=g.newBrush(g.BrushType.SOLID_COLOR,[1,1,1]), pen=g.newPen(g.PenType.SOLID_COLOR,[0.7,0.7,0.7,1],1);

                g.newPath(); g.moveTo(22,13); g.lineTo(22,22); g.lineTo(13,22); g.closePath();

                g.fillPath(brush); g.strokePath(pen);

            }

        };

        this.noteMark={id:'notes',

            func:function(elem){

                drawImg(noteMarkSrc, elem);

            }

        };

        this.LABModel={id:'labmodel',

            func:function(elem){

                drawImg(labModelSrc, elem);

            }

        };

        this.GRAYModel={id:'graymodel',

            func:function(elem){

                drawImg(grayModelSrc, elem);

            }

        };

        this.CMYKModel={id:'cmykmodel',

            func:function(elem){

                drawImg(cmykModelSrc, elem);

            }

        };

        this.RGBModel={id:'rgbmodel',

            func:function(elem){

                drawImg(rgbModelSrc, elem);

            }

        };

        this.addDrawPhase=function(newPhase){

            for(var x=0, ln=this.currentDrawingState.length; x<ln; x++){

                if(this.currentDrawingState[x].id!=newPhase.id && x==ln-1){

                    this.currentDrawingState.push(newPhase);

                }

            }

        }

        this.removeDrawPhase=function(oldPhase){

            for(var x=this.currentDrawingState.length-1; x>-1; x--){

                if(this.currentDrawingState[x].id==oldPhase.id){

                    this.currentDrawingState.splice(x,1);

                }

            }

        }

        this.currentDrawingState=[this.noneState];

        this.assignOnDraw=function(aDrawings){

            this.elem.onDraw=function(){

                for(var d=0; d<aDrawings.length; d++){

                    aDrawings[d].func(this);

                }

            }

        }

        this.select=function(){

            this.removeDrawPhase(this.selectedMark);

            this.addDrawPhase(this.selectedMark);

            this.selected=true;

            this.refresh();

        }

        this.unselect=function(){

            this.removeDrawPhase(this.selectedMark);

            this.selected=false;

            this.refresh();

        }

        this.reset=function(){

            this.currentDrawingState=[this.noneState];

            this.info={};

            this.name='none';

            this.elem.helpTip='none';

            this.instantiated=false;

            this.colorComp=ColorComp.NULL;

            this.selected=false;

            this.refresh();

        }

        this.getInfo=function(){

            var msg='';

            msg+='Name: '+this.name+"\rColor Model: "+this.colorComp.typename+"\r";

            var clrCmp=this.colorComp;

            var cmp=function(){

                var cmp=clrCmp;

                if(cmp.typename=="RGB"|| cmp.typename=="LAB"){

                    return 'Color Values: '+cmp.comp[0]+" , "+cmp.comp[1]+" , "+cmp.comp[2];

                } else if(cmp.typename=="CMYK"){

                    return 'Color Values: '+cmp.comp[0]+" , "+cmp.comp[1]+" , "+cmp.comp[2]+" , "+cmp.comp[3];

                } else if(cmp.typename=="GRAY"){

                    return 'Color Values: '+cmp.comp[0];

                }

                return '';

            }();

            msg+=cmp;

            return msg;

        }

        this.info={};

        this.noteChange=currentTime();

    }

    var allSwatchBoxes=[];

    var SESSION={ //========================================================<<< SESSION object

        selection: [],

        options: {

           showMode: true,

           showNotes: true,

        },

        lastSelection: null,

        swatchBoxes: allSwatchBoxes,

        presetFolder: function(){

            var dir;

            if($.os.match('Windows')){

                dir=Folder("~\\Documents\\Adobe Scripts\\Hobo Swatches");

            } else {

                dir=Folder(app.path+"/Hobo Swatches");

            }

            return dir;

        }(),

    };

//===================================================UI Window========================//

    function ShowPalette(name){

        var w= new Window('palette',name,undefined,{closeButton:false}); w.margins=[1,1,1,1]; w.spacing=2; w.setBg([0.2,0.2,0.2]);

            var g_0=w.add('group'); g_0.orientation='column'; g_0.margins=[1,1,1,1]; g_0.spacing=1;

                var g_0_1=g_0.add('panel',undefined,'',{borderStyle:'sunken'}); g_0_1.size=[140,160]; g_0_1.margins=[0,1,1,0];

                g_0_1.orientation='row'; g_0_1.spacing=1; g_0_1.alignChildren='top';

                var swatchContainer=g_0_1.add('group'); swatchContainer.spacing=1;

                swatchContainer.size=[123,260]; swatchContainer.margins=[0,0,0,0]; swatchContainer.orientation='column';

                var swatchContObj={

                    swG_0: swatchContainer.add('group'),

                    swG_1: swatchContainer.add('group'),

                    swG_2: swatchContainer.add('group'),

                    swG_3: swatchContainer.add('group'),

                    swG_4: swatchContainer.add('group'),

                    swG_5: swatchContainer.add('group'),

                    swG_6: swatchContainer.add('group'),

                    swG_7: swatchContainer.add('group'),

                    swG_8: swatchContainer.add('group'),

                    swG_9: swatchContainer.add('group'),

                }

                for(all in swatchContObj){

                    swatchContObj[all].spacing=1;

                }

                for(var i=0; i<50; i++){// Setting up all 50 swatch slots.

                    var swP = swatchContObj[('swG_'+Math.floor((i/5)))].add('group'); swP.size=[24,24]; swP.order=i;

                    var thisSwatch=new SwatchBox(swP);

                    thisSwatch.assignOnDraw(thisSwatch.currentDrawingState);

                    thisSwatch.elem.addEventListener('mousedown',function(ev){

                        var subj=this.parentObj;

                        var keyState=env.keyboardState;

                        if(keyState.ctrlKey==false && keyState.shiftKey==false && keyState.metaKey==false && keyState.altKey==false){

                            nameD.text=subj.name;

                            subj.select();

                            SESSION.selection=[subj];

                            for(var j=0; j<allSwatchBoxes.length; j++){

                                var thisBox=allSwatchBoxes[j];

                                if(thisBox.selected==true && thisBox!=subj){

                                    thisBox.unselect();

                                }

                            }

                        } else if(keyState.shiftKey==true){

                            SESSION.nameDisplay.text=subj.name;

                            if(subj.selected==false){

                                subj.select();

                                SESSION.selection.push(subj);

                                SESSION.selection.sort(function(a,b){return a.uiOrder-b.uiOrder});

                            }

                            if(SESSION.lastSelection!=null){

                                if(ev.target.parentObj.uiOrder > SESSION.lastSelection.uiOrder){

                                    var indA = SESSION.lastSelection.uiOrder, indB = ev.target.parentObj.uiOrder;

                                } else {

                                    var indA = ev.target.parentObj.uiOrder, indB = SESSION.lastSelection.uiOrder;

                                }

                                for(var s=0; s<allSwatchBoxes.length; s++){

                                    if(s>indA && s<indB){

                                        var thisBox=allSwatchBoxes[s];

                                        if(thisBox.selected==false){

                                            thisBox.select();

                                            SESSION.selection.push(thisBox);

                                        }

                                    }

                                }

                            SESSION.selection.sort(function(a,b){return a.uiOrder-b.uiOrder});

                            }

                        } else if(keyState.ctrlKey==true || keyState.metaKey==true){

                            if(subj.selected==false){

                                nameD.text=subj.name;

                                subj.select();

                                SESSION.selection.push(subj);

                                SESSION.lastSelection=subj;

                            } else if(subj.selected==true){

                                subj.unselect();

                                for(var j=0; j<SESSION.selection.length; j++){

                                    var thisBox=SESSION.selection[j];

                                    if(thisBox==subj){

                                        SESSION.selection.splice(j,1);

                                        break;

                                    }

                                }

                            }

                        } else if(keyState.altKey==true && subj.selected==true && subj.name!='none'){

                            var infoDisp=function(){

                                var w=new Window('dialog',subj.name+" Swatch Info"); w.margins=[4,8,4,4]; w.spacing=2;

                                swatchInfoBox(subj, w);

                                var okBtn=w.add('button',undefined,'Ok'); okBtn.size=[340,22];

                                okBtn.onClick=function(){

                                    w.close();

                                };

                                w.show();

                            }();

                            if(subj.info.notes!='' && SESSION.options.showNotes==true){

                                for(var i=0; i<subj.currentDrawingState.length; i++){

                                    if(subj.currentDrawingState[i].id=='notes'){

                                        break;

                                    } else if(i==subj.currentDrawingState.length-1 && subj.currentDrawingState[i].id!='notes'){

                                        subj.addDrawPhase(subj.noteMark);

                                        subj.refresh();

                                    }

                                }

                            } else if(SESSION.options.showNotes==false || subj.info.notes==''){

                                for(var i=0; i<subj.currentDrawingState.length; i++){

                                    if(subj.currentDrawingState[i].id=='notes'){

                                        subj.removeDrawPhase(subj.currentDrawingState[i]);

                                        subj.refresh();

                                        break;

                                    }

                                }

                            }

                        }

                        if(SESSION.selection.length>1){

                            nameD.text="--Multi-Selection: "+SESSION.selection.length+"--"; SESSION.lastSelection=SESSION.selection[0];

                        } else if(SESSION.selection.length==1){

                            nameD.text=SESSION.selection[0].name; SESSION.lastSelection=SESSION.selection[0];

                        }  else if(SESSION.selection.length==0){

                            nameD.text=''; SESSION.lastSelection=null;

                        }

                    });

                    allSwatchBoxes.push(thisSwatch);

                }

                var g_0_1_scrl=g_0_1.add('scrollbar'); g_0_1_scrl.size=[10,152];

        var g_0_2=g_0.add('group'); g_0_2.indent=1;

            var nameD=g_0_2.add('edittext',undefined,'',{readonly:true}); nameD.size=[140,20]; nameD.setBg([1,1,1]);

            SESSION.nameDisplay=nameD;

        var btnG=g_0.add('group'); btnG.margins=[1,1,1,1]; btnG.spacing=2;

            var infoBtn=btnG.add('button',undefined,'I'); infoBtn.size=[26,20];

                infoBtn.helpTip='Get swatch info';

                infoBtn.onDraw=function(){

                    btnSkin(this,[0.9,0.8,0.3],26,20);

                    drawImg(infoBtnSrc, this);

                }

            var addToDocBtn=btnG.add('button',undefined,'T'); addToDocBtn.size=[26,20];

                addToDocBtn.helpTip='Add selected swatches to current document';

                addToDocBtn.onDraw=function(){

                    btnSkin(this,[0.3,0.8,0.9],26,20);

                    drawImg (addToDocBtnSrc, this)

                }

            var addBtn=btnG.add('button',undefined,'A'); addBtn.size=[26,20];

                addBtn.helpTip='Add swatch from current document to this palette';

                addBtn.onDraw=function(){

                    btnSkin(this,[0.4,0.8,0.4],26,20);

                    drawImg(addBtnSrc, this);

                }

            var rmvBtn=btnG.add('button',undefined,'R'); rmvBtn.size=[26,20];

                rmvBtn.helpTip='Remove current selected swatch from this palette';

                rmvBtn.onDraw=function(){

                    btnSkin(this,[0.6,0.2,0.3],26,20);

                    drawImg(rmvBtnSrc, this);

                }

        var btnG_2=g_0.add('group'); btnG_2.margins=[1,1,1,1]; btnG_2.spacing=2;

            var rstBtn=btnG_2.add('button',undefined,'Reset'); rstBtn.size=[65,20];

                rstBtn.helpTip='RESET all Hobo Swatches to "none"';

                rstBtn.onDraw=function(){

                    btnSkin(this,[1,0.6,0.2],65,20);

                    drawImg(rstBtnSrc,this);

                }

            var okBtn=btnG_2.add('button',undefined,'Close'); okBtn.size=[65,20];

                okBtn.helpTip='Close this palette';

                okBtn.onDraw=function(){

                    btnSkin(this,[0.8,0.2,0.2],65,20);

                    drawImg(okBtnSrc,this);

                }

        g_0_1_scrl.onChange=function(){ // Need both of them for mousewheels and clicks.

            swatchContainer.location=[0,1-(this.value/100*96)];

        }

        g_0_1_scrl.onChanging=function(){

            swatchContainer.location=[0,1-(this.value/100*96)];

        }

        addBtn.onClick=function(){

            if(SESSION.selection.length>0){

                sendBTmsg(bt_func, BTOBJ, bt_func_rt, [SESSION]);

                SESSION.nameDisplay.text=SESSION.selection[0].name;

            } else {

                alert("Please allocate cells to fill with your document swatches.");

            }

        }

        rmvBtn.onClick=function(){

            if(SESSION.selection.length>0){

                if(SESSION.selection.length<2){

                    var sw=SESSION.selection[0];

                    sw.reset(); sw.selected=true; sw.addDrawPhase(sw.selectedMark); sw.refresh; nameD.text=sw.name; sw.elem.helpTip=sw.name;

                } else {

                    for(var s=SESSION.selection.length-1; s>-1; s--){

                        var sw=SESSION.selection[s];

                        sw.reset(); sw.selected=true; sw.addDrawPhase(sw.selectedMark); sw.refresh; sw.elem.helpTip=sw.name;

                    }

                    nameD.text=sw.name;

                }

            }

        }

        infoBtn.onClick=function(){

            var sessionUpdate=infoWindow(SESSION);

            if(sessionUpdate.showMode!=SESSION.options.showMode || sessionUpdate.showNotes != SESSION.options.showNotes || sessionUpdate.noteChange==true){

                SESSION.options.showMode=sessionUpdate.showMode;

                SESSION.options.showNotes=sessionUpdate.showNotes;

                for(var s=allSwatchBoxes.length-1; s>-1; s--){

                    var thisBox=allSwatchBoxes[s];

                    var dState=thisBox.currentDrawingState;

                    if(SESSION.options.showMode==false){

                        for(var c=dState.length-1; c>-1; c--){

                            if(dState[c].id.match('model')){

                                thisBox.removeDrawPhase(dState[c]);

                            }

                        }

                    } else {

                        for(var c=dState.length-1; c>-1; c--){

                            if(dState[c].id.match('model')){

                                thisBox.removeDrawPhase(dState[c]);

                            }

                        }

                        if(thisBox.colorComp.typename!="NULL"){

                            thisBox.addDrawPhase(thisBox[thisBox.colorComp.typename+"Model"]);

                        }

                    }

                    if(thisBox.info && thisBox.info.hasOwnProperty('notes')){

                        if(SESSION.options.showNotes==false || thisBox.info.notes==''){

                            for(var c=dState.length-1; c>-1; c--){

                                if(dState[c].id=='notes'){

                                    thisBox.removeDrawPhase(dState[c]);

                                }

                            }

                        } else if(SESSION.options.showNotes==true && thisBox.info.notes!=''){

                            for(var c=dState.length-1; c>-1; c--){

                                if(dState[c].id=='notes'){

                                    break;

                                } else if(dState[c].id!='notes' && c==0){

                                    thisBox.addDrawPhase(thisBox.noteMark);

                                }

                            }

                        }

                    }

                    thisBox.refresh();

                }

            }

        }

        rstBtn.onClick=function(){

            if(confirm('Are you sure you want to reset the whole Hobo Swatch palette?',true,'Confirm this action:')==true){

                for(var i=0; i<allSwatchBoxes.length; i++){

                    var thisBox=allSwatchBoxes[i];

                    thisBox.reset();

                }

                nameD.text='';

                SESSION.selection=[];

            }

        }

 

 

        addToDocBtn.onClick=function(){

            var validOnes=function(){

                var arr=[];

                for(var s=0; s<SESSION.selection.length; s++){

                    if(SESSION.selection[s].instantiated==true){

                        arr.push(SESSION.selection[s]);

                    }

                }

                return arr;

            }();

            if(validOnes.length>0){

                BTOBJ.sessionSelection=function(){

                    var arr=[];

                    for(var s=0; s<validOnes.length; s++){

                        var sw=validOnes[s];

                        arr.push({

                            name: sw.name, colorComp: sw.colorComp, plating: sw.info.plating,

                        });

                    }

                    return arr.toSource();

                }();

                sendBTmsg(bt_func_2, BTOBJ);

            } else {

                alert("Please select some existing swatches first.");

            }

        }

        okBtn.onClick=function(){

            if(confirm('Are you sure you want completely close the Hobo Swatch palette?',true,'Confirm this action:')==true){

                w.close();

            }

        }

        this.show=function(){w.show()};

    };

    var mainWindow = new ShowPalette('Hobo Swatches™');

    mainWindow.show();

    // Load from Preset XML on startup.

    var presetFile=File(SESSION.presetFolder+"/HoboSwatchSession.xml");

    if(presetFile.exists){

        try{

            var swXmlArr=getXmlSwatchesArr(presetFile);

            for(var i=0; i<swXmlArr.length; i++){

                if(allSwatchBoxes[i] && swXmlArr[i].name!='none'){

                    var thisSw=allSwatchBoxes[i], thisInfo=swXmlArr[i];

                    var colorMode=thisInfo.colorComp.mode.toString(), colorArr=thisInfo.colorComp.comp;

                    var altClrs=[

                        thisSw.rgbClr=convertAppColor(colorMode, "RGB", colorArr),

                        thisSw.cmykClr=convertAppColor(colorMode, "CMYK", colorArr),

                        thisSw.grayClr=convertAppColor(colorMode, "GrayScale", colorArr),

                        thisSw.labClr=convertAppColor(colorMode, "LAB", colorArr),

                    ];

                    for(var c=0; c<altClrs.length; c++){

                        for(var d=0; d<altClrs[c].length; d++){

                            altClrs[c][d]=round2(altClrs[c][d]);

                        }

                    }

                    initSwatch(SESSION, thisSw, thisInfo.name, thisInfo.colorComp.mode,

                    thisInfo.colorComp.comp, getUIRGB(colorMode,colorArr),

                        {plating: thisInfo.aiSwatchKind,

                            originDoc: thisInfo.originDoc,

                            altClrs:{rgbClr:thisSw.rgbClr,cmykClr:thisSw.cmykClr,labClr:thisSw.la bClr,grayClr:thisSw.grayClr},

                            notes: thisInfo.notes,

                        }

                    );

                    SESSION.selection=[];

                    SESSION.nameDisplay.text='';

                }

            }

        } catch(e){

            alert(e,'Uhoh!');

        }

    }

}

#target illustrator

#targetengine main

swatchPalette();


Viewing all articles
Browse latest Browse all 12845

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>