Palette listbox redraw

Hello,
Is there a way to suppress the drawing of a listbox when it is being rebuilt. We are seeing flickering on Win machines and on Macs it can take a long time to rebuild the list. If we set the visible flag to false, we get a fast rebuild on the Mac but the area where the list was goes blank and then redraws when we set the visible flag back to true.
Thanks.
P.

Page 37 in http://www.kahrel.plus.com/indesign/scriptui.html
A method is described there that I saw on hilfDirSelbst, which amnounts to replacing a listbox object rather than rewriting its contents. Amazing speed gains.
Peter

Similar Messages

  • Pages Palette constantly redraws.

    Using CC 2014 with a photo heavy layout of 56 pages. EVERY TIME I go to a new page the pages palette redraws and hangs ID until it is complete. If I make even a minor move, it redraws and nothing happens until it is complete. I can't even change to another palette. I finally changed the display properties of the graphics to fast in the preferences and that worked but I'm not sure that is a real solution. Suggestions?

    Think I found a solution - or better: a workaround for it.
    When I delete the Indesign defaults, the problem stays.
    But when I delete the InDesign SavedData file
    (it is in C:\Documents and Settings\<user name>\Local Settings\Application Data\Adobe\InDesign\Version 6.0\en_GB\Caches)
    the problem is gone.
    Maybe this can help to find out what really causes this problem - and find a better solution to avoid it?
    Thank you all!
    L.L.

  • Storing selection in palette

    Hi.
    I'm trying to store my current selection in a palette listbox and then select the objects when the listbox item is clicked.
    This is proving problematic since I can't access the specific  Illustrator objects from the palette.
    I've managed to get the selection using something like this:
    function BTactiveDocumentSelection()
        return app.activeDocument.selection;
         addButton.onClick = function()
              var inSelection;
              var bt = new BridgeTalk();
              bt.target = "illustrator";
              bt.body = BTactiveDocumentSelection.toString()+'BTactiveDocumentSelection();';
              bt.onResult = function(result)
                   inSelection= result.body;
                   if (inSelection != 0)
                        titlesList.add("item", inSelection);
              bt.send();
    But I'm not sure how to return it to select it later with another BridgeTalk since converting it to string doesn't seem to retain the reference to the original objects.
    And I'm not sure it did in the first place when I got it.
    Help would be appreciated.

    Anita,
    you need to write code in STEP = 2 in the customer exit where you can move values to TVARVC

  • Illustrator CS2 OSX Palettes stops working

    Hi!
    I have a user running OSX 10.4.11 on an Intel-based iMac G5. She's using CS2 (yes, I know we're a bit slow to upgrade ), and she's having some problems.
    Lately, Illustrators palettes will suddenly stop working, which means she's unable to select layers, colours etc. She can draw, use the menus, select tools etc., but the palettes just won't work.
    I've tried removing the preferences, but with no luck. I would prefer not to reinstall Creative Suite, since that takes quite a while, so I'm counting on you guys to help me!
    Best regards,
    Thomas

    Close any mm Multiple Master fonts you may have open. Fonts like Kronos MM can cause this. Use fontbook to close them adn any utility like suitcase which also might have a mm font open. Symptoms of this are you change the point size, and it instantly returns to the original size.
    Also install the 12.01 CS2 update, if you need to
    Problems related to palettes (slow redraw, palettes go white, possible crash) have been addressed.

  • ++ Photoshop 9.0.1 (CS2 update) available ++

    listed at http://www.adobe.com/support/downloads/detail.jsp?ftpID=3335

    From the description:
    The most significant fixes in the 9.0.1 release include the following:
    Photoshop no longer hangs for several seconds when using painting tools with quick strokes.
    A runtime error that could appear when mousing over a high-res document with the Brush tool has been fixed.
    Documents containing a large number of text layers now open more quickly.
    Problems related to palettes (slow redraw, palettes go white, possible crash) have been addressed.
    TIFF files from certain scanners can now be opened correctly.
    After editing an image in Photoshop CS2 via the TouchUp tool in Adobe Acrobat software, the image no longer gets repositioned.
    XMP metadata from AI and PDF files is now retained in Photoshop.
    Slow performance when toggling layer visibility has been fixed.
    Info palette numbers are now displayed and updated when moving a curve point in Curves via the cursor keys.
    Problems opening certain TIFF and PSB files greater than 2GB have been resolved.
    The Merge to HDR command now functions properly when using high-ASCII characters in user login.

  • Is there a fix for modal dialogs opening behind palettes -cs6 -osx 10.6.8

    Is there a fix for modal dialogs open behind palettes in
    Photoshop cs6 13.0 (createive cloud update) + OSX 10.6.8 Snow Leopard on MacBook Pro? 
    ( I am using 2 monitors where the second monitor is set to be the menu display.  cs4 does not exhibit this bug. )
    Toggling the Application Frame off improves the hiding 'feature' but this does not include the desired continuous floating in front of palettes in all circumstances.
    An example is Blending Options, then chose Stroke, then chose the Color Picker.  After clicking OK, the Blending Options dialog now sits behind the palettes.  One trick is to click on another app, then back to cs6 to force a window redraw.
    It sure would help me if this could be solved.  I am preparing educational videos and this display bug makes things very troublesome.
    Thanks for any help.  If I find a solution, I will post to this thread so everyone can benefit.

    The setting for the graphics check box Does Not make a difference.  If I have a new document window open, then add a layer, then open the blending options > drop shadow > edit the color > the chooser dialog opens, and immediately both dialog windows drop behind the palettes AND any document windows.
    The same behavior for the Preferences dialog > guides > color.
    The quick workaround is to click another app, then back to CS6.  A real pain, of course.
    It is only a factor when opening a second (child) dialog box.
    Other CS6 apps do work correctly (eg. FW AE)
    I have yet to get a handle on this.  Mac OSX 10.6.8    CS6 13.0  x64
    Thanks for your replies, and the long reply time for me was a vaction away from the office.

  • Dreamweaver 8 work area redraw problem

    Hi all, I'm having severe problems with screen refreshes in
    the work area - dreamweaver doesn't seem to be able to redraw the
    screen. I've no idea what is going on to try and resolve the
    problem and have tried completely removing dreamweaver and doing a
    'clean' reinstall to no avail.
    When first started up dreamwaver draws the menus, property
    bars and tool palettes ok but the Windows XP desktop shows in the
    workarea. pages can be displayed and worked on alright in the split
    window view, but neither the code or design views display
    correctly, and CSS style sheets cannot be displayed for editing (a
    window appears, but you can't see anything in it - or a split
    code/design window style is displayed). dragging a document window
    around the workarea leaves a trail of 'echos' of the window in the
    work area.
    This is a complete mystery to me - have tried installing on
    two different machines (both WinXP SP2) and applying available
    updates to DW8... similar problems on both machines.
    Anyone got any ideas?

    Please provide a link (URL).....
    Regards
    John Waller

  • Custom Swatch Palette (beta)

    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.BrushType.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").children().length(); y<ln_2; y++){
                    sw.colorComp.comp.push(thisSw.descendants("colorcomp").descendants("colorvalues").childre n()[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)+"</aiswatchkind>"));
                    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.yellow),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],intClr[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],clrArr[1],clrArr[2]]};
            } else if(mode=="CMYK"){
                sw.colorComp={typename:ColorComp[mode].typename,comp:[clrArr[0],clrArr[1],clrArr[2],clrAr r[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.labClr,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, el

    Thank you W_J_T  and here is the place where I got my drawing from:
    http://forums.adobe.com/message/5819478#5819478
    * I posted the latest update at the bottom on Jan 25 2014.
    The principles of this method are to draw by reading the string object and that;s how you can change colors and things by changing the eval-led objects and redrawing them with putting an updating function into OnDraw and hiding/showing the element to force the OnDraw.  If you end up using this , I'd like to see some examples!

  • [CS4 JS] ScriptUI - Update palette with properties from front document

    Hi all. I have created, with ScriptUI, a palette containing, among other things, a ListBox containing items for every xmlElement in a document. I want the control to read from the front document when there is more than one document open, and to update when there is a new front document.
    I've added event listeners for "afterRevert," "afterOpen," "afterNew" and "afterClose" that call the function that populates the ListBox. The ListBox is successfully updated on closing the front document, reverting, or making a new document, or when opening a document when no others are open. However:
    1.) The control doesn't update when a second or third document is opened. It "hangs on" to the first document. I've tried defining my document variable, in the function called by the event listeners, as app.documents.item(0) and as app.activeDocument, with no change in behavior. And
    2.) I don't know how to update the control when bringing to the front an already-open document. I've tried adding an onActivate listener to my palette window that calls the ListBox population function, but the palette window isn't deactivated when you change the front document using command-~ or the Window menu, so it only works if you switch documents by clicking their tabs in the application window.
    Can anyone help me? I think I'm missing something basic in my approach. If not, I can clean up some code to post.
    Thanks,
    Jeff

    2.) I don't know how to update the control when bringing to the front an already-open document. I've tried adding an onActivate listener to my palette window that calls the ListBox population function, but the palette window isn't deactivated when you change the front document using command-~ or the Window menu, so it only works if you switch documents by clicking their tabs in the application window.
    Perhaps adding an eventListener to the appropriate menuItems (that changes the activeDocument) to update your palette will do the trick?

  • How to open selected files from a listbox

    I am trying to open files from selected items in a listbox, but am having some problems.
    Here is my code:
    var firstLibrary = "C:\\Program Files (x86)\\Adobe\\test\\Library1.indl";
    var secondLibrary = "C:\\Program Files (x86)\\Adobe\\test\\Library2.indl";
    var libraryList = [firstLibrary, secondLibrary]; // array filled with file url's
    var w = new Window ("dialog");
    var myList = w.add ("listbox", undefined, libraryList, {multiselect: true}); // list populated with libraryList array
    var print = w.add ("button", undefined, "Print selected items");
    myList.selection = 0; // default selection of first index
    print.onClick = function () // when button is clicked, should print selections to console, open files and then close the window
        for (var i = 0; i < myList.selection.length; i++){
            $.writeln (myList.selection[i].text); // <-- correctly prints the selected items to the console
            //app.open(File(myList.selection[i].text)); // <-- this line I would assume allows me to open the files because the text is a file url,
                                                                            // however, uncommenting it breaks the code
        w.close();
    w.show ();

    @Sam – Instead of a "dialog" type of Window use a "palette" type:
    var w = new Window ("palette");
    "palette" creates a modeless type of dialog.
    Or close the Window with type "dialog" before opening the file with:
    var myFileToOpen = File(libraryList[i]);
    w.destroy();
    app.open(myFileToOpen);
    (Not tested with your code, but should work…)
    Uwe

  • Linking a JS object to ScriptUI listbox item

    I am writing a script that that takes elements from a document and for each element makes a custom object with its own properties and methods. This list of elements is then spat out into a ScriptsUI listbox.
    How do I link each listbox item to its associated obejct? i.e. So if I double click on a listbox item it will run a particular method within that object.
    P.S. I dont want to have to store array ids in a column or something hacky like that.

    Yep, it seems that the Translator component of the MVVM pattern wouldn't be very useful in a ScriptUI perspective.
    The most asbtract pattern you have to deal with, I think, is the GenericList widget (ListBox, DropDownList, maybe TreeView?) and its relationship with what we may call a DataProvider (following Flex and .NET terminology). But ScriptUI/ExtendScript does not allow a serious level of data binding.
    The whole problem is to emulate something of a dynamic link so that the data provider can notify the List widget of some changing. As a response, the List then would update its items accordingly. A skeleton of this approach could be drawn using custom event notification:
    const EXTERNAL_EVENT_TYPE = 'myEventType';
    var externalProcess = function F()
        if( F.targetWidget )
            F.targetWidget.dispatchEvent(new UIEvent(EXTERNAL_EVENT_TYPE));
    // =====================================
    // UI
    // =====================================
    var w = new Window('dialog', "Example"),
        // register the LB as a target:
        lb = externalProcess.targetWidget = w.add('listbox'),
        b = w.add('button',undefined,"Test Change");
    lb.addEventListener(
        EXTERNAL_EVENT_TYPE,
        function(){ alert("Something is happening. I need to update my items!"); }
    b.onClick = externalProcess;
    w.show();
    but I'm afraid this code—which, by the way, works!—leads us to an anti-pattern! Indeed, while we have to register and maintain a reference to the List widget in the external object (which is assumed to wrap the data), we still need to tell the list how to access the data provider in order to update the list items. The only benefit of the scheme above is that the external process can notify the list at any moment. Maybe this could make some sense in a non-modal context (palette), but this doesn't solve the original problem.
    So, intuitively, I would tend to take the opposite view: instead of making the external process trigger some event in the UI when its data change, let simply provide a generic resync() method to the list widget. The paradigm, here, is that a data provider should always be an array structure whose elements expose a toString() or whatever feature. If the list widget has a reference to some data provider, then it can load and/or resync the list items using always the same abstract routines. Then we have something purely prototypal:
    ListBox.prototype.load = DropDownList.prototype.load = function(/*obj[]&*/dp)
    // =====================================
    // A simple load method based on the assumption that
    // all dp items offer a toString() ability
        // Manage a reference to the data provider
        this.properties||(this.properties={});
        this.properties.data||(this.properties.data=[]);
        dp?(this.properties.data=dp):(dp=this.properties.data);
        // Vars
        var CAN_SEP = 'dropdownlist'==this.type,
            n = (dp&&dp.length)||0,
            i, s;
        // Add the ListItem elems
        for (
            i=0 ;
            i < n ;
            s=(''+dp[i++]),
            this.add(CAN_SEP && '-'==s ? 'separator' : 'item', s)
            // One could improve the code to support additional
            // keys for: multicol, images, checks, etc.
        return this;
    ListBox.prototype.resync = DropDownList.prototype.resync = function(/*obj[]&*/dp)
    // =====================================
    // Resync, or even reload, the data provider items
        this.selection = null;
        this.removeAll();
        return this.load(dp||null);
    ListItem.prototype.get = function()
    // =====================================
    // Return an object instance from the DP (behind this ListItem)
        return this.parent.properties.data[this.index] || null;
    From that point, what could the client code look like? We basically have two options:
    #1 The process is non-modal and then the external object will invoke List.resync(…) when required; in this case it MUST have a reference to the widget.
    #2 The process is modal, meaning that the 'external' object in fact is entirely interacted from the UI (e.g. via a button click); in that case no external reference to the list widget is actually required since the UI module itself knows exactly when a List.resync() is required, so why should it delegate the job? Here is a basic example in such a context:
    // Let's have some arbitrary 'OOP' stuff available
    var MyClass = function(uid,str)
    {   // constructor
        this.id=uid||0;
        this.rename(str||'');
        // various methods
    MyClass.prototype.rename = function(str){ this.name=str||'<unknown>'; };
        // toString()
    MyClass.prototype.toString = function(str){ return this.name; };
    var myDataProvider = [
        // some array of instances
        new MyClass(3, "Name 3"),
        new MyClass(5, "Name 5"),
        new MyClass(7),
        new MyClass(11, "Name 11, OK?")
    var processChanges = function()
    {   // emulate various changes in the data provider
        myDataProvider[0].rename("New name (3)");
        myDataProvider[2].rename("Finally Born 7");
        myDataProvider[myDataProvider.length] = new MyClass(13, "Did you miss 13?");
        myDataProvider[myDataProvider.length] = new MyClass(17, "Hello 17");
        myDataProvider.splice(1,1);
    // Now the User Interface:
    var w = new Window('dialog', "Example"),
        lb = w.add('listbox').load(myDataProvider),
        b = w.add('button', undefined, "Test Changes!");
    lb.onDoubleClick = function()
        var someInstance = this.selection.get();
        alert( "My secret UID is: " + someInstance.id );
    b.onClick = function()
        processChanges();
        lb.resync();
    w.show();
    Does it make sense?
    @+
    Marc

  • How to Create Listbox in a JSP Application

    Hi.
    I'm new to JDeveloper. Can someone show me how to create a Listbox (that gets it's values from a database table) in a *.jsp form? This listbox is linked to a database table field. I'm not using BC4J nor EJB. I've created a JSP application with ADF using a Model1 (or MVC pattern) architecture -- which I based on the JDeveloper10i tutorial (http://otn.oracle.com/obe/obe9051jdev/ADFmodel1/ADFmodel1.htm). I've tried using render on the field in the view object entity, refresh the Data Control Palette and then drag the table view entity to a *.jsp page as input form. But I can't see the field in the form being displayed as a list box.
    Please help.
    thanks,
    christina

    Hi Shay.
    Thanks for the quick reply. Sorry for the misuderstanding but I have no clue on terminology used in JDeveloper. The "view object" entity I was referring to is the "<TableName>View" view object (e.g. EmpView) under the Model->Application Sources->Mypackage folder where the "<TableName>" entity object file also resides. I think I'm using the Business Component bec. I have this step in the tutorial that I based my application on.
    I have trouble following the tutorial link you gave me (for the ADF Business Component Popup list) bec. when I select the table field in the "Data Control Palette" Panel, the only values I see in the "Drag and Drop As" poplist are "Value","Label","RenderValue" and "Input Render". I can't see the type "Single Select List". Do you why is that?
    thanks,
    christina

  • Finding the hwnd of a listbox

    I am using a Call Library Function Node to start another program. I have a listbox on the front panel and I need to find the hwnd that corresponds to the listbox in order to send debug messages from the other program to LabVIEW. I would appreciate any help I can get. Thanks.

    Thanks.
    I tried to get the window handler of an activex container, like Greg
    McKaskle described in the link Dennis Knutson send. This works fine! Have
    you ever tried to subclass a activex component by filtering messages?
    Regards,
    Wiebe.
    "zou" wrote in message
    news:[email protected]..
    > If the listbox is a true window object, then you don't
    > have to worry about paint event. Unless you want to do
    > some fancy "owner draw".
    >
    > Use BeginPaint/EndPaint only in window procedure when
    > you create your own window, while Listbox is window pre-
    > defined class.
    >
    > In my VIs, there are 2 different types: those create an
    > child window,and those draw directly on the front panel.
    >
    > If o
    ne draw something on an exist window, such as a
    > front panel, then he has to catch the redraw event of
    > that window, and paint again. Otherwise, graphics
    > "disappear".
    >
    > George Zou
    > http://gtoolbox.yeah.net

  • ScriptUI: How to update Listbox values? (CC2014)

    Is there way to update listbox element that filled with JS array elements. If I push more elements to the array, how I can re-render it in ScriptUI? Is there way to do this.
    I know there is way just to add elements to listbox like in Peter Kahrel's PDF. But this isn't so dynamic:
    var w = new Window ("dialog");
    var myList = w.add ("listbox", undefined, ["one", "two", "three"]);
    var b = w.add ("button", undefined, "Add");
    b.onClick = function () {myList.add ("item", "zero", 0)}
    w.show ();
    How about if I wan't to update listbox when I have changed my arrays, like below:
    // Create example array
    var testArr = ['item1', 'item2']
    $.writeln(testArr.length);
    startGUI();
    function startGUI() {
        // Window
        var win = new Window( "palette", script_name, undefined, { resizeable:true } );
        win.orientation = "column";
        win.alignChildren = ["fill", "fill"];
        // Listbox
        var myListbox = win.add ("listbox", undefined, testArr, 
            numberOfColumns: 1, 
            showHeaders: true, 
            columnTitles: ['Name']
        // Add Item To Array
        var addItem = win.add("button", undefined, "Add Item");
        addItem.onClick = function() {  
            testArr.push ('item3');
            $.writeln(testArr.length);
        // Quit BTN
        win.quitBtn = win.add("button", undefined, "Close");
        win.quitBtn.onClick = function() {  
            win.close();  
        win.show();
    Maybe there is some update funtion on ScriptUI. I tried to search solution without success. Any help?

    I updated your own script to show how I removed the listbox
    I added a group to host the listbox, the purpose of the group is to be used as a placeholder( to add the new listbox in the right place) and to easily get the listbox to be removed
    // listboxEditFromJSArray.jsx - Sakari Niittymaa
    // https://forums.adobe.com/message/6785515
    //#target illustrator
    // Create example array
    var testArr = ['item1', 'item2', 'item3'];
    startGUI();
    function startGUI() {
        // Main Window
        var win = new Window( "palette", "Test Listbox", undefined, { resizeable:true } );
        win.orientation = "column";
        win.alignChildren = ["fill", "fill"];
        // Listbox Group
        var grpListbox = win.add('group');
        grpListbox.alignChildren = ['fill', 'fill'];
        var myListbox = addListBox (grpListbox, testArr);
        // add ListBox
      function addListBox(container, testArr) {
            var listbox = container.add("listbox", undefined, testArr,  
                numberOfColumns: 1,  
                showHeaders: true,  
                columnTitles: ['Name']
            return listbox;
        // BTN: Add Items To Array
        var addItem = win.add("button", undefined, "Add Item");
        addItem.onClick = function() {
            testArr.push ('item' + (testArr.length + 1));
            grpListbox.remove(grpListbox.children[0]);
            myListbox = addListBox (grpListbox, testArr);
            win.layout.layout(true);
            //updateListboxArray(myListbox);
            //$.writeln (testArr.length + "  " + myListbox.items.length);
        // BTN: Remove Selected
        var removeSelectedItems = win.add("button", undefined, "Remove Selected");
        removeSelectedItems.onClick = function() {
            // Remove selected listbox item from array
            testArr.splice( myListbox.selection.index, 1 );
            updateListboxArray(myListbox);
        // BTN: Clear Listbox
        var removeAllItems = win.add("button", undefined, "Clear Listbox");
        removeAllItems.onClick = function() {
            // Clear the array
            testArr = [];
            updateListboxArray(myListbox);
        // Update listbox items
        function updateListboxArray(listbox) {
            // Clear listbox first
            listbox.removeAll();
            // Create new listbox items from array
            var i = 0;
            while (listbox.items.length < testArr.length) {
                listbox.add ("item", testArr[i]);
                i++;
        // Quit BTN
        win.quitBtn = win.add("button", undefined, "Close");
        win.quitBtn.onClick = function() {  
            win.close();  
        // Window Settings
        win.onResizing = function () { this.layout.resize(); };
        win.onShow = function () { win.layout.resize(); };
        win.center();    
        win.show();

  • In After Effects CC, images added to listboxes fail to appear at first

    Given a simple listbox with images, created like so:
    function buildUI(this_obj_) {
    var winDef = (this_obj_ instanceof Panel)
    ? this_obj_
    : new Window('palette', 'testing listbox',[194,174,644,406]);
    winDef.ctl_list1 = winDef.add('listbox', [10,20+10+10,160+10,140+10], ["1                      ", "2                      ", "3                      "]);
    winDef.ctl_list1.items[0].image = File("/valid/image/location/test1.png");
    winDef.ctl_list1.items[1].image = File("/valid/image/location/test2.png");
    winDef.ctl_list1.items[2].image = File("/valid/image/location/test3.png");
    winDef.ctl_button5 = winDef.add('button', [332,189,416,215], 'OK');
    winDef.ctl_button5.onClick = function () {this.parent.close(1);}
    return winDef
    var builtWin = buildUI(this);
    if (builtWin.toString() == "[object Panel]") {
    builtWin;
    } else {
    builtWin.show();
    In After Effects CC, loading this script as a ScriptUI Panel (at least on OSX) initially shows no images, until some interface interaction is made (clicking on listbox, showing about box, sometimes switching apps, etc.).
    Is there a way to get these images to show correctly on launch of the script? Anything I add to the script, including phantom buttons with notify("onClick") tricks, seems to run while the script is still being created (even if added after the panel being built/shown), and the initial "no-image" listbox is shown. I'm also curious to know if this behavior is the same on Windows, and if anyone can test this it would be great.

    Appears to be a bug with CC, I even rewrote a test script using a different coding approach. I've filed bug reports before for listbox. I've gotten times where a multi-column list content will overlap from column to column. It fixes itself once you click on the listbox or attempt to resize a column.
    Here's the setup I used:
      function TEST(thisObj){
      function TEST_buildUI(thisObj){
      var pal = (thisObj instanceof Panel) ? thisObj : new Window("palette", "Test", undefined, {resizeable:true});
      if (pal != null){
      var res ="group {orientation:'column', alignment:['fill','fill'], alignChildren:['fill','top'],\
      folderPathListbox: ListBox{alignment:['fill','fill'], properties:{multiline:true, numberOfColumns:1, showHeaders:true, columnTitles: ['TEST']}},\
      pal.grp = pal.add(res);
      ///CONTROL VARIABLES
      var folderPathListbox = pal.grp.folderPathListbox;
      ///POPULATE
      try{
      var listLen = 5;
      var curItem;
      for(var i=1; i<=listLen; i++){
      curItem = folderPathListbox.add('item', i);
      curItem.image = File("~/Desktop/Alert.png");
      }catch(err){alert(err)}
      pal.layout.layout(true);
      pal.grp.minimumSize = pal.grp.size;
      pal.layout.resize();
      pal.onResizing = pal.onResize = function () {this.layout.resize();}
      return pal;
      var rPal = TEST_buildUI(thisObj);
      if (rPal != null){
      if (rPal instanceof Window){
      rPal.center();
      rPal.show();
      TEST(this);

Maybe you are looking for