Skip to main content
Inspiring
January 12, 2023
Answered

Preset layers

  • January 12, 2023
  • 4 replies
  • 702 views

Hi, i have a question, i would a script that show me a window to select the presets of layers visibility, every preset change the visibility of layers, i have found and modifiedthat script but not working

 

// Creazione della finestra di dialogo con l'elenco dei preset
var myDialog = new Window("dialog", "Seleziona il preset");

// Creazione dei radio button per i preset
var presetGroup = myDialog.add("group");
var englishPreset = presetGroup.add("radiobutton", undefined, "Inglese");
englishPreset.value = true;
var frenchPreset = presetGroup.add("radiobutton", undefined, "Francese");
var spanishPreset = presetGroup.add("radiobutton", undefined, "Spagnolo");

// Creazione dei pulsanti OK e Annulla
var myButtons = myDialog.add("group");
var okButton = myButtons.add("button", undefined, "OK");
var cancelButton = myButtons.add("button", undefined, "Annulla");

// Funzione per attivare il preset selezionato

okButton.onClick = function() {
if (englishPreset.value) {
var englishLayers = ["Menu interattivo Inglese", "Base 2 Inglese", "Inglese", "Base Inglese", "Base"];
for (var i = 0; i < englishLayers.length; i++) {
var currentLayer = app.activeDocument.layers.getByName(englishLayers[i]);
currentLayer.visible = true;
$.writeln(englishLayers[i] + " visibility: " + currentLayer.visible);
}
}
if (frenchPreset.value) {
var frenchLayers = ["Menu interattivo Francese", "Base 2 Francese", "Francese", "Base Francese", "Base"];
for (var i = 0; i < frenchLayers.length; i++) {
var currentLayer2 = app.activeDocument.layers.getByName(frenchLayers[i]);
currentLayer.visible = true;
$.writeln(frenchLayers[i] + " visibility: " + currentLayer.visible);
}
}
if (spanishPreset.value) {
var spanishLayers = ["Menu interattivo Spagnolo", "Base 2 Spagnolo", "Spagnolo", "Base Spagnolo", "Base"];
for (var i = 0; i < spanishLayers.length; i++) {
var currentLayer3 = app.activeDocument.layers.getByName(spanishLayers[i]);
currentLayer.visible = true;
$.writeln(spanishLayers[i] + " visibility: " + currentLayer.visible);
}
}
myDialog.close();
}

cancelButton.onClick = function() {
myDialog.close();
}

myDialog.show();

This topic has been closed for replies.
Correct answer brian_p_dts

You also are referencing currentLayer instead of currentLayer2 and currentLayer3 in your second and third onclicks. I'd just leverage the power of .show() in dialog instead of onclick in palette. Here's a working version (though it still doesn't account for hiding other layers if you don't want them showing). 

 

// Creazione della finestra di dialogo con l'elenco dei preset
var myDialog = new Window("dialog", "Seleziona il preset");

// Creazione dei radio button per i preset
var presetGroup = myDialog.add("group");
var englishPreset = presetGroup.add("radiobutton", undefined, "Inglese");
englishPreset.value = true;
var frenchPreset = presetGroup.add("radiobutton", undefined, "Francese");
var spanishPreset = presetGroup.add("radiobutton", undefined, "Spagnolo");

// Creazione dei pulsanti OK e Annulla
var myButtons = myDialog.add("group");
var okButton = myButtons.add("button", undefined, "OK", {name:"ok"});
var cancelButton = myButtons.add("button", undefined, "Annulla", {name:"cancel"});

// Funzione per attivare il preset selezionat


if (myDialog.show()) {
    if (englishPreset.value) {
        var englishLayers = ["Menu interattivo Inglese", "Base 2 Inglese", "Inglese", "Base Inglese", "Base"];
        for (var i = 0; i < englishLayers.length; i++) {
        var currentLayer = app.activeDocument.layers.itemByName(englishLayers[i]);
        currentLayer.visible = true;
        $.writeln(englishLayers[i] + " visibility: " + currentLayer.visible);
        }
        }
        if (frenchPreset.value) {
        var frenchLayers = ["Menu interattivo Francese", "Base 2 Francese", "Francese", "Base Francese", "Base"];
        for (var i = 0; i < frenchLayers.length; i++) {
        var currentLayer2 = app.activeDocument.layers.itemByName(frenchLayers[i]);
        currentLayer2.visible = true;
        $.writeln(frenchLayers[i] + " visibility: " + currentLayer2.visible);
        }
        }
        if (spanishPreset.value) {
        var spanishLayers = ["Menu interattivo Spagnolo", "Base 2 Spagnolo", "Spagnolo", "Base Spagnolo", "Base"];
        for (var i = 0; i < spanishLayers.length; i++) {
        var currentLayer3 = app.activeDocument.layers.itemByName(spanishLayers[i]);
        currentLayer3.visible = true;
        $.writeln(spanishLayers[i] + " visibility: " + currentLayer3.visible);
        }
    }
}

 

 

4 replies

Peter Kahrel
Community Expert
Community Expert
January 12, 2023

You probably got an error because you're trying to change layer visibility while the dialog is still on the screen. So add a target engine and change the window type to palette:

 

#targetengine session
var myDialog = new Window("palette", "Seleziona il preset");

 

The rest stays the same.

brian_p_dts
Community Expert
brian_p_dtsCommunity ExpertCorrect answer
Community Expert
January 12, 2023

You also are referencing currentLayer instead of currentLayer2 and currentLayer3 in your second and third onclicks. I'd just leverage the power of .show() in dialog instead of onclick in palette. Here's a working version (though it still doesn't account for hiding other layers if you don't want them showing). 

 

// Creazione della finestra di dialogo con l'elenco dei preset
var myDialog = new Window("dialog", "Seleziona il preset");

// Creazione dei radio button per i preset
var presetGroup = myDialog.add("group");
var englishPreset = presetGroup.add("radiobutton", undefined, "Inglese");
englishPreset.value = true;
var frenchPreset = presetGroup.add("radiobutton", undefined, "Francese");
var spanishPreset = presetGroup.add("radiobutton", undefined, "Spagnolo");

// Creazione dei pulsanti OK e Annulla
var myButtons = myDialog.add("group");
var okButton = myButtons.add("button", undefined, "OK", {name:"ok"});
var cancelButton = myButtons.add("button", undefined, "Annulla", {name:"cancel"});

// Funzione per attivare il preset selezionat


if (myDialog.show()) {
    if (englishPreset.value) {
        var englishLayers = ["Menu interattivo Inglese", "Base 2 Inglese", "Inglese", "Base Inglese", "Base"];
        for (var i = 0; i < englishLayers.length; i++) {
        var currentLayer = app.activeDocument.layers.itemByName(englishLayers[i]);
        currentLayer.visible = true;
        $.writeln(englishLayers[i] + " visibility: " + currentLayer.visible);
        }
        }
        if (frenchPreset.value) {
        var frenchLayers = ["Menu interattivo Francese", "Base 2 Francese", "Francese", "Base Francese", "Base"];
        for (var i = 0; i < frenchLayers.length; i++) {
        var currentLayer2 = app.activeDocument.layers.itemByName(frenchLayers[i]);
        currentLayer2.visible = true;
        $.writeln(frenchLayers[i] + " visibility: " + currentLayer2.visible);
        }
        }
        if (spanishPreset.value) {
        var spanishLayers = ["Menu interattivo Spagnolo", "Base 2 Spagnolo", "Spagnolo", "Base Spagnolo", "Base"];
        for (var i = 0; i < spanishLayers.length; i++) {
        var currentLayer3 = app.activeDocument.layers.itemByName(spanishLayers[i]);
        currentLayer3.visible = true;
        $.writeln(spanishLayers[i] + " visibility: " + currentLayer3.visible);
        }
    }
}

 

 

Inspiring
January 13, 2023

hi, thank yor for the code, it works, i added a part of code to hide all layers before, this is i edited your suggestions

 

var layersToHide = ["Spagnolo", "Base 2 Spagnolo", "Base Spagnolo", "Menu interattivo Spagnolo", "Francese", "Menu interattivo Francese", "Base Francese", "Base 2 Francese", "Menu interattivo Inglese", "Base 2 Inglese", "Inglese", "Base Inglese"];
for (var i = 0; i < layersToHide.length; i++) {
    var currentLayer4 = app.activeDocument.layers.itemByName(layersToHide[i]);
    currentLayer4.visible = false;
}


// Creazione della finestra di dialogo con l'elenco dei preset
var myDialog = new Window("dialog", "Seleziona il preset");

// Creazione dei radio button per i preset
var presetGroup = myDialog.add("group");
var englishPreset = presetGroup.add("radiobutton", undefined, "Inglese");
englishPreset.value = true;
var frenchPreset = presetGroup.add("radiobutton", undefined, "Francese");
var spanishPreset = presetGroup.add("radiobutton", undefined, "Spagnolo");

// Creazione dei pulsanti OK e Annulla
var myButtons = myDialog.add("group");
var okButton = myButtons.add("button", undefined, "OK", {name:"ok"});
var cancelButton = myButtons.add("button", undefined, "Annulla", {name:"cancel"});


// Funzione per attivare il preset selezionat


if (myDialog.show()) {
    if (englishPreset.value) {
        var englishLayers = ["Menu interattivo Inglese", "Base 2 Inglese", "Inglese", "Base Inglese", "Base"];
        for (var i = 0; i < englishLayers.length; i++) {
        var currentLayer = app.activeDocument.layers.itemByName(englishLayers[i]);
        currentLayer.visible = true;
        $.writeln(englishLayers[i] + " visibility: " + currentLayer.visible);
        }
        }
        if (frenchPreset.value) {
        var frenchLayers = ["Menu interattivo Francese", "Base 2 Francese", "Francese", "Base Francese", "Base"];
        for (var i = 0; i < frenchLayers.length; i++) {
        var currentLayer2 = app.activeDocument.layers.itemByName(frenchLayers[i]);
        currentLayer2.visible = true;
        $.writeln(frenchLayers[i] + " visibility: " + currentLayer2.visible);
        }
        }
        if (spanishPreset.value) {
        var spanishLayers = ["Menu interattivo Spagnolo", "Base 2 Spagnolo", "Spagnolo", "Base Spagnolo", "Base"];
        for (var i = 0; i < spanishLayers.length; i++) {
        var currentLayer3 = app.activeDocument.layers.itemByName(spanishLayers[i]);
        currentLayer3.visible = true;
        $.writeln(spanishLayers[i] + " visibility: " + currentLayer3.visible);
        }
    }
}
brian_p_dts
Community Expert
Community Expert
January 12, 2023

You're not hiding the other layers when you toggle. Maybe that's the issue. 

Peter Kahrel
Community Expert
Community Expert
January 12, 2023

In what way does it not work? Nothing happens? An error?

Inspiring
January 12, 2023

when i click ok nothing happens

Peter Kahrel
Community Expert
Community Expert
January 12, 2023

getByName should be itemByName.

Inspiring
January 12, 2023

i have changed it, but not working yet