Skip to main content
Participant
March 25, 2019
Answered

ScriptUI: Buttons not responsive

  • March 25, 2019
  • 3 replies
  • 3464 views

I'm making a UI for my Framemaker script in which I have 21 checkboxes.  I have 2 buttons, Select All, and Deselect All, which I want use to programmatically check and uncheck all the boxes.  However, in the buttons currently do absolutely nothing.

Code in my .onClick functions isn't getting executed at all.  $.writeln ("test1"); isn't printing anything to the console.

var myWindow = new Window ("dialog");

 

    var BG = myWindow.add("checkbox", undefined, "BG_Bulgarian"); //1

    var CS = myWindow.add("checkbox", undefined, "CS_Czech"); //2

    var DA = myWindow.add("checkbox", undefined, "DA_Danish"); //3

    var DE = myWindow.add("checkbox", undefined, "DE_German"); //4

    var ES = myWindow.add("checkbox", undefined, "ES_Spanish"); //5

    var FI = myWindow.add("checkbox", undefined, "FI_Finnish"); //6

    var FR = myWindow.add("checkbox", undefined, "FR_French"); //7

    var HR = myWindow.add("checkbox", undefined, "HR_Croatian"); //8

    var HU = myWindow.add("checkbox", undefined, "HU_Hungarian"); //9

    var IT = myWindow.add("checkbox", undefined, "IT_Italian"); //10

    var JA = myWindow.add("checkbox", undefined, "JA_Japanese"); //11

    var KO = myWindow.add("checkbox", undefined, "KO_Korean"); //12

    var NL = myWindow.add("checkbox", undefined, "NL_Dutch"); //13

    var PL = myWindow.add("checkbox", undefined, "PL_Polish"); //14

    var PT = myWindow.add("checkbox", undefined, "PT_Portuguese"); //15

    var RO = myWindow.add("checkbox", undefined, "RO_Romanian"); //16

    var RU = myWindow.add("checkbox", undefined, "RU_Russian"); //17

    var SK = myWindow.add("checkbox", undefined, "SK_Slovak"); //18

    var SV = myWindow.add("checkbox", undefined, "SV_Swedish"); //19

    var TR = myWindow.add("checkbox", undefined, "TR_Turkish"); //20

    var ZH = myWindow.add("checkbox", undefined, "ZH_Chinese"); //21

   

    BG.value = true; //1

    CS.value = true; //2

    DA.value = true; //3

    DE.value = true; //4

    ES.value = true; //5

    FI.value = true; //6

    FR.value = true; //7

    HR.value = true; //8

    HU.value = true; //9

    IT.value = true; //10

    JA.value = true; //11

    KO.value = true; //12

    NL.value = true; //13

    PL.value = true; //14

    PT.value = true; //15

    RO.value = true; //16

    RU.value = true; //17

    SK.value = true; //18

    SV.value = true; //19

    TR.value = true; //20

    ZH.value = true; //21   

   

    var myButtonGroup1 = myWindow.add("group");

    myButtonGroup1.orientation = "row";

    var selectAllButton = myButtonGroup1.add("button", undefined, "Select All");

    var deselectAllButton = myButtonGroup1.add("button", undefined, "Deselect All");

    var generateFMbooks = myWindow.add("button", undefined, "Generate FM books");   

    myWindow.show ();

deselectAllButton.onClick = function () {

    $.writeln ("test1");

    BG.value = false; //1

    CS.value = false; //2

    DA.value = false; //3

    DE.value = false; //4

    ES.value = false; //5

    FI.value = false; //6

    FR.value = false; //7

    HR.value = false; //8

    HU.value = false; //9

    IT.value = false; //10

    JA.value = false; //11

    KO.value = false; //12

    NL.value = false; //13

    PL.value = false; //14

    PT.value = false; //15

    RO.value = false; //16

    RU.value = false; //17

    SK.value = false; //18

    SV.value = false; //19

    TR.value = false; //20

    ZH.value = false; //21

}

selectAllButton.onClick = function () {

    $.writeln ("test2");

     BG.value = true; //1

    CS.value = true; //2

    DA.value = true; //3

    DE.value = true; //4

    ES.value = true; //5

    FI.value = true; //6

    FR.value = true; //7

    HR.value = true; //8

    HU.value = true; //9

    IT.value = true; //10

    JA.value = true; //11

    KO.value = true; //12

    NL.value = true; //13

    PL.value = true; //14

    PT.value = true; //15

    RO.value = true; //16

    RU.value = true; //17

    SK.value = true; //18

    SV.value = true; //19

    TR.value = true; //20

    ZH.value = true; //21

   

}

generateFMbooks.onClick = function () {

     myWindow.close();

}

This topic has been closed for replies.
Correct answer gabriels33895177

You are both right.  I let my frustration with this problem get to me.  The only thing wrong with my first implementation was the placement of

myWindow.show();

All of the button functions must be between

var myWindow = new Window ("dialog")

and

myWindow.show();

ScriptUI for Dummies is legit and I was just missed this rule.

3 replies

Klaus Göbel
Legend
April 2, 2019

Sorry for my delayed answer, but I was out of order for some days.

Here's a little snippet that may help you:

You can extend the array and that will append more checkboxes.

BTW: I was talking about this documentation: https://wwwimages2.adobe.com/content/dam/acom/en/devnet/scripting/pdfs/javascript_tools_guide.pdf

Please have in mind, that Peters excellent documentation is developed for Indesign and not all is usable for FrameMaker. But it is a great help, if you adapt things from it!

var myWindow = new Window ("dialog");
var gaLanguages = ["BG_Bulgarian","CS_Czech", "DA_Danish", "DE_German","ES_Spanish","FI_Finnish","FR_French","HR_Croatian","HU_Hungarian","IT_Italian","JA_Japanese"

,"KO_Korean","NL_Dutch","PL_Polish","PT_Portuguese","RO_Romanian","RU_Russian","SK_Slovak","SV_Swedish","TR_Turkish","ZH_Chinese"];

  

var CheckBoxGroup = myWindow.add("group");
CheckBoxGroup.orientation = "column";
CheckBoxGroup.alignChildren = "left";
myWindow.myButtonGroup1 = myWindow.add("group");
myWindow.myButtonGroup1.selectAllButton = myWindow.myButtonGroup1.add("button", undefined, "Select All");
myWindow.myButtonGroup1.deselectAllButton = myWindow.myButtonGroup1.add("button", undefined, "Deselect All");
myWindow.myButtonGroup1.orientation = "row";
myWindow.generateFMbooks = myWindow.add("button", undefined, "Generate FM books");
myWindow.myButtonGroup1.deselectAllButton.onClick = UnSelectAll;
myWindow.myButtonGroup1.selectAllButton.onClick = SelectAll;
myWindow.generateFMbooks.onClick = CloseWindow;
CreateCheckBoxes();
SelectAll();
myWindow.show ();

  

  

function CreateCheckBoxes()

{

for (var i = 0; i < gaLanguages.length; i++)
{
CheckBoxGroup.add("checkbox",undefined,gaLanguages);
}

function UnSelectAll()

{

for (var i = 0; i < CheckBoxGroup.children.length; i++)
{
CheckBoxGroup.children.value = false; 
}

}

function SelectAll()

{

for (var i = 0; i < CheckBoxGroup.children.length; i++)
{
CheckBoxGroup.children.value = true; 
}

}

function CloseWindow()

{

for (var i = 0; i < CheckBoxGroup.children.length; i++)
{
if (CheckBoxGroup.children.value == true)
{
$.writeln("Checked: " + CheckBoxGroup.children.text)  
}
}
myWindow.close();

}

Known Participant
April 2, 2019

Thanks! I knew there had to be a way to address the UI elements using a loop, but couldn't find it.  This will make maintaining the script easier.

gabriels33895177AuthorCorrect answer
Participant
March 26, 2019

You are both right.  I let my frustration with this problem get to me.  The only thing wrong with my first implementation was the placement of

myWindow.show();

All of the button functions must be between

var myWindow = new Window ("dialog")

and

myWindow.show();

ScriptUI for Dummies is legit and I was just missed this rule.

frameexpert
Community Expert
Community Expert
March 26, 2019

No problem. This stuff can definitely be frustrating.

www.frameexpert.com
Klaus Göbel
Legend
March 25, 2019

Hi,

you are adding lots of checkboxes, but you only need one.

To that one you can add, remove/removeAll or change  "items"

But first of all you have to add agroup to myWindow !

something like that:

var DropDownGroup = myWindow.add("group")

DropDown = DropDownGroup.add("dropdownlist",undefined, ["ABC","DEF","GHJ"]);  //

// to add further item

DropDown.add("item","KLM");

But in your case you'd better use a listbox

like that:

SvgTextListe =

    myGroup.MyWindow.add("group");

   MyList = MyGroup.add("listbox",undefined,[],{multiselect:true});

You should have a look at the Javascript Tools Guide in chapter Common properties

Participant
March 25, 2019

I figured it out.  I was using the parent child hierarchy wrong.  This version now behaves correctly.

By the way this guide that everyone points to is full of lies.

var myWindow = new Window ("dialog");

    myWindow.BG = myWindow.add("checkbox", undefined, "BG_Bulgarian"); //1

    myWindow.CS = myWindow.add("checkbox", undefined, "CS_Czech"); //2

    myWindow.DA = myWindow.add("checkbox", undefined, "DA_Danish"); //3

    myWindow.DE = myWindow.add("checkbox", undefined, "DE_German"); //4

    myWindow.ES = myWindow.add("checkbox", undefined, "ES_Spanish"); //5

    myWindow.FI = myWindow.add("checkbox", undefined, "FI_Finnish"); //6

    myWindow.FR = myWindow.add("checkbox", undefined, "FR_French"); //7

    myWindow.HR = myWindow.add("checkbox", undefined, "HR_Croatian"); //8

    myWindow.HU = myWindow.add("checkbox", undefined, "HU_Hungarian"); //9

    myWindow.IT = myWindow.add("checkbox", undefined, "IT_Italian"); //10

    myWindow.JA = myWindow.add("checkbox", undefined, "JA_Japanese"); //11

    myWindow.KO = myWindow.add("checkbox", undefined, "KO_Korean"); //12

    myWindow.NL = myWindow.add("checkbox", undefined, "NL_Dutch"); //13

    myWindow.PL = myWindow.add("checkbox", undefined, "PL_Polish"); //14

    myWindow.PT = myWindow.add("checkbox", undefined, "PT_Portuguese"); //15

    myWindow.RO = myWindow.add("checkbox", undefined, "RO_Romanian"); //16

    myWindow.RU = myWindow.add("checkbox", undefined, "RU_Russian"); //17

    myWindow.SK = myWindow.add("checkbox", undefined, "SK_Slovak"); //18

    myWindow.SV = myWindow.add("checkbox", undefined, "SV_Swedish"); //19

    myWindow.TR = myWindow.add("checkbox", undefined, "TR_Turkish"); //20

    myWindow.ZH = myWindow.add("checkbox", undefined, "ZH_Chinese"); //21

    myWindow.BG.value = true; //1

    myWindow.CS.value = true; //2

    myWindow.DA.value = true; //3

    myWindow.DE.value = true; //4

    myWindow.ES.value = true; //5

    myWindow.FI.value = true; //6

    myWindow.FR.value = true; //7

    myWindow.HR.value = true; //8

    myWindow.HU.value = true; //9

    myWindow.IT.value = true; //10

    myWindow.JA.value = true; //11

    myWindow.KO.value = true; //12

    myWindow.NL.value = true; //13

    myWindow.PL.value = true; //14

    myWindow.PT.value = true; //15

    myWindow.RO.value = true; //16

    myWindow.RU.value = true; //17

    myWindow.SK.value = true; //18

    myWindow.SV.value = true; //19

    myWindow.TR.value = true; //20

    myWindow.ZH.value = true; //21

    myWindow.myButtonGroup1 = myWindow.add("group");

    myWindow.myButtonGroup1.selectAllButton = myWindow.myButtonGroup1.add("button", undefined, "Select All");

    myWindow.myButtonGroup1.deselectAllButton = myWindow.myButtonGroup1.add("button", undefined, "Deselect All");

    myWindow.myButtonGroup1.orientation = "row";

    myWindow.generateFMbooks = myWindow.add("button", undefined, "Generate FM books");  

myWindow.myButtonGroup1.deselectAllButton.onClick = function () {

    myWindow.BG.value = false; //1

    myWindow.CS.value = false; //2

    myWindow.DA.value = false; //3

    myWindow.DE.value = false; //4

    myWindow.ES.value = false; //5

    myWindow.FI.value = false; //6

    myWindow.FR.value = false; //7

    myWindow.HR.value = false; //8

    myWindow.HU.value = false; //9

    myWindow.IT.value = false; //10

    myWindow.JA.value = false; //11

    myWindow.KO.value = false; //12

    myWindow.NL.value = false; //13

    myWindow.PL.value = false; //14

    myWindow.PT.value = false; //15

    myWindow.RO.value = false; //16

    myWindow.RU.value = false; //17

    myWindow.SK.value = false; //18

    myWindow.SV.value = false; //19

    myWindow.TR.value = false; //20

    myWindow.ZH.value = false; //21

}

myWindow.myButtonGroup1.selectAllButton.onClick = function () {

    myWindow.BG.value = true; //1

    myWindow.CS.value = true; //2

    myWindow.DA.value = true; //3

    myWindow.DE.value = true; //4

    myWindow.ES.value = true; //5

    myWindow.FI.value = true; //6

    myWindow.FR.value = true; //7

    myWindow.HR.value = true; //8

    myWindow.HU.value = true; //9

    myWindow.IT.value = true; //10

    myWindow.JA.value = true; //11

    myWindow.KO.value = true; //12

    myWindow.NL.value = true; //13

    myWindow.PL.value = true; //14

    myWindow.PT.value = true; //15

    myWindow.RO.value = true; //16

    myWindow.RU.value = true; //17

    myWindow.SK.value = true; //18

    myWindow.SV.value = true; //19

    myWindow.TR.value = true; //20

    myWindow.ZH.value = true; //21

  

}

myWindow.generateFMbooks.onClick = function () {

    myWindow.close();

}

myWindow.show ();

frameexpert
Community Expert
Community Expert
March 25, 2019

There may be some inaccuracies in Peter's ScriptUI Guide (I haven't seen any yet), but I wouldn't call them "lies". Peter has provided a great free resource and he should be commended for that.

www.frameexpert.com