Захват щелчка пользователя: сценарии InDesign

Я пытаюсь придумать сценарий, который представляет пользователю простое диалоговое окно с тремя вариантами: «Да», «Нет» и «Отмена». На основе ввода пользователя сценарий затем создает два разных типа PDF-файлов (специальный отчет / онлайн-PDF) или завершает процесс (в случае, если они нажали «Отмена»). Это то, что я придумал до сих пор. Хотя я могу зафиксировать щелчок пользователя, я не могу запустить правильный скрипт в зависимости от выбора пользователя:

function checkReportType(){
    //draw window
    var askReportWindow = new Window("dialog", "Report Type");    
    askReportWindow.textmissing = askReportWindow.add('statictext{text:"Is this a Special Report?", justify:"center"}');
    var myInputGroup = askReportWindow.add("group");        
    var myButtonGroup = askReportWindow.add("group");
    myButtonGroup.alignment = "right";             
    //add buttons
    var yesButton = myButtonGroup.add("button", undefined, "Yes");   
    var noButton= myButtonGroup.add("button", undefined, "No");
    var cancelButton = myButtonGroup.add("button", undefined, "Cancel"); 
    //setting values to false for "yes" and "no" buttons
    var yesClicked = false;
    var noClicked = false;
    //change button value on click
    yesButton.onClick = function(){
        yesClicked = true;  
        //alert("k");   
    }       
    noButton.onClick = function(){
        noClicked = true; 
        //alert("l");      
    }
    //show window
    askReportWindow.show();
    //check for click
    if(yesClicked===true){
       exportSpecialReport();
    }else if(noClicked===true){
        exportOnlinePDF();
    }else{
        exit();
        askReportWindow.destroy();
    }
}//end checkReportType()

person Kostas Koutoupis    schedule 22.05.2017    source источник


Ответы (3)


Если вам не нужно использовать scriptUI, вы можете сделать это, используя сборку InDesign в диалоговых окнах, подобных этому.

/* global app, $*/
var diag = app.dialogs.add({
  name: 'my awesome dialog',
  canCancel: true
});
var col1 = diag.dialogColumns.add();
var radioGrp = col1.radiobuttonGroups.add();
var ctrl1 = radioGrp.radiobuttonControls.add({
  staticLabel: 'selection1',
  checkedState: true
});
var ctrl2 = radioGrp.radiobuttonControls.add({
  staticLabel: 'selection2'
});

if(diag.show() === true) {
  if(ctrl1.checkedState === true) {
    $.writeln('user selected item 1');
  } else if(ctrl2.checkedState === true) {
    $.writeln('user selected item 2');

  }
  diag.destroy();
}
person fabianmoronzirfas    schedule 22.05.2017

На случай, если кто-нибудь из AppleScripters найдет эту страницу:

if button returned of ¬
    (display dialog "Is this a Special Report?" buttons {"Yes", "No", "Cancel"} default button 2) = "Yes" then
    my exportSpecialReport()
else
    my exportOnlinePDF()
end if
person user1754036    schedule 23.05.2017
comment
Да, но затем вы сокращаете свой код только для пользователей Mac. ExtendScript сделает код совместимым для обеих платформ ;) - person Loic; 24.05.2017

person    schedule
comment
Не могли бы вы объяснить, на что ссылается this в w.close(this.code) в onClick? Я понимаю, что вы сохраняете код, а затем на основе его значения запускаете различные сценарии в операторе if/else. Кстати, большое спасибо, работает как шарм! - person Kostas Koutoupis; 23.05.2017
comment
это относится к кнопке, с которой было запущено событие. Я использую это, чтобы избежать повторения одного и того же обработчика для трех кнопок, но с небольшой разницей. - person Loic; 24.05.2017