Just altered that function so it returns all data, then it can be sorted later. I.E. var w = new Window("dialog","test",undefined,{closeButton: true}); var group4 = w.add("group"); var dropdownlist1_array = ["Any Layer [0]","Pixel Layer [1]","Adjustment [2]","Text Layer [3]","Vector Layer [4]","Smart Object [5]","Video Layer [6]","Group or Artboard [7]","3D Layer [8]","Gradient [9]","Pattern [10]","Solid Color [11]","Background Layer [12]"]; // "Hidden Section Bounder [13]" var dropdownlist1 = group4.add("dropdownlist", undefined, dropdownlist1_array); dropdownlist1.selection = 0; dropdownlist1.preferredSize.height = 20; dropdownlist1.onChange = function(){onChangeDropdownlist1();}; var dropdownlist2 = group4.add("dropdownlist", undefined, undefined); dropdownlist2.selection = -1; dropdownlist2.preferredSize.height = 20; w.show(); function onChangeDropdownlist1() { dropdownlist2.removeAll(); var layerData = getLayersData(dropdownlist1.selection.index); var layerNames=[]; for(var a in layerData){if(layerData.type == dropdownlist1.selection.index) layerNames.push(layerData.name);} layerNames = UniqueSortedList(layerNames); for(var z in layerNames) {dropdownlist2.add("item", layerNames ); } dropdownlist2.selection = 0; }; function getLayersData() { var lyrs = []; var layers = 1; while (true) { ref = new ActionReference(); ref.putIndex(charIDToTypeID('Lyr '), layers); try{var desc = executeActionGet(ref);}catch (err){break;}; var lyr = {}; lyr.type = desc.getInteger(stringIDToTypeID("layerKind")); lyr.name = desc.getString(charIDToTypeID("Nm ")); lyr.id = desc.getInteger(stringIDToTypeID("layerID")); lyrs.push(lyr); layers++; }; return lyrs; }; function UniqueSortedList(ArrayName) { var unduped = new Object; for (var i = 0; i < ArrayName.length; i++) { unduped[ArrayName] = ArrayName; } var uniques = new Array;for (var k in unduped) { uniques.push(unduped ); } return uniques.sort(); };
... View more