Feedback wanted: Fit Layers To
Posted: September 4th, 2012, 8:46 am
Hi everyone,
As I'm starting out with scripting I'd love to hear any feedback on the script below. It seems to work fluently (CS5), including alerts when the wrong items are selected. It's pretty simple and nothing fancy, but I wonder where I could write it cleaner or better or whatever.
http://upload.klustre.nl/kl_fitLayersTo.jsx.zip
As I'm starting out with scripting I'd love to hear any feedback on the script below. It seems to work fluently (CS5), including alerts when the wrong items are selected. It's pretty simple and nothing fancy, but I wonder where I could write it cleaner or better or whatever.
http://upload.klustre.nl/kl_fitLayersTo.jsx.zip
Code: Select all
/*
FIT LAYERS TO—
PROVIDES A PALETTE WITH BUTTONS TO FIT THE SELECTED LAYERS
TO EITHER THE CURRENT TIME, WORK AREA OR TIMELINE.
WRITTEN BY REMCO JANSSEN / KLUSTRE
KLUSTRE.NL / SEPTEMBER 2012
*/
var win = new Window('palette', 'Fit selected layers to:');
this.windowRef = win;
win.grp = win.add("group", [0,0,310,25], 'Group');
var btnWidth = 100;
var btnHeight = 25;
win.grp.fttBtn = win.grp.add("button", [0, 0, btnWidth, btnHeight], 'Timeline');
win.grp.ftwBtn = win.grp.add("button", [105, 0, 105+btnWidth, btnHeight], 'Work Area');
win.grp.ctiBtn = win.grp.add("button", [210, 0, 210+btnWidth, btnHeight], 'Current Time');
win.show();
win.grp.fttBtn.onClick = fitToTimeline;
win.grp.ftwBtn.onClick = fitToWorkArea;
win.grp.ctiBtn.onClick = fitToCTI;
function fitToTimeline() {
var klComp = app.project.activeItem;
if(klComp == null) {
alert("Select at least one layer.");
} else{
var klLayers = klComp.selectedLayers;
if((klComp instanceof CompItem) == false || klLayers.length == 0) { // klLayers.length is 0 when nothing is selected.
alert("Select at least one layer.");
} else{
app.beginUndoGroup("Fit to Timeline");
for(var i = 0; i < klLayers.length; i++){
klLayers[i].inPoint = 0;
klLayers[i].outPoint = klComp.duration;
}
app.endUndoGroup();
}
}
}
function fitToWorkArea() {
var klComp = app.project.activeItem;
if(klComp == null) {
alert("Select at least one layer.");
} else{
var klLayers = klComp.selectedLayers;
if((klComp instanceof CompItem) == false || klLayers.length == 0) { // klLayers.length is 0 when nothing is selected.
alert("Select at least one layer.");
} else{
app.beginUndoGroup("Fit to Work Area");
var waStart = klComp.workAreaStart;
var waDur = klComp.workAreaDuration;
for(var i = 0; i < klLayers.length; i++){ // klLayers.length is 0 when nothing is selected.
klLayers[i].inPoint = waStart;
klLayers[i].outPoint = waStart + waDur;
}
app.endUndoGroup();
}
}
}
function fitToCTI() {
var klComp = app.project.activeItem;
if(klComp == null) {
alert("Select at least one layer.");
} else{
var klLayers = klComp.selectedLayers;
if((klComp instanceof CompItem) == false || klLayers.length == 0) { // klLayers.length is 0 when nothing is selected.
alert("Select at least one layer.");
} else{
app.beginUndoGroup("Fit to Current Time");
var klTime = klLayers[0].time;
for(var i = 0; i < klLayers.length; i++){
klLayers[i].inPoint = 0;
klLayers[i].outPoint = klTime;
}
app.endUndoGroup();
}
}
}