[AI CC-CC2023] Вопрос по ScriptUI. Как сделать кнопку switch?

romaya

Топикстартер
10 лет на форуме
Сообщения
324
Реакции
41
Всем привет! Вопрос в теме топика. Нужно на ScriptUI сделать кнопку/переключатель для инверсии значений полей ввода.

JavaScript:
// Нижний клапан
  var lowerValveGroup = valveContainer.add("group");
  lowerValveGroup.orientation = "column";
  lowerValveGroup.alignChildren = "center";
  lowerValveGroup.spacing = 5;
  lowerValveGroup.add("statictext", undefined, "Нижний");
  var lowerValveInput = lowerValveGroup.add("edittext", undefined, "1.5");
  lowerValveInput.characters = 8;
  lowerValveInput.active = true;

  // Кнопка switch
  var switchGroup = valveContainer.add("group");
  switchGroup.orientation = "column";
  switchGroup.alignChildren = "center";
  var switchButton = switchGroup.add("iconbutton", undefined, undefined, {name: 'switch'});
  switchButton.size = [30, 30];
  var switchText = switchGroup.add("statictext", undefined, "⇄");
  switchText.graphics.font = ScriptUI.newFont("Helvetica", "BOLD", 16);

  // Верхний клапан
  var topValveGroup = valveContainer.add("group");
  topValveGroup.orientation = "column";
  topValveGroup.alignChildren = "center";
  topValveGroup.spacing = 5;
  topValveGroup.add("statictext", undefined, "Верхний");
  var topValveInput = topValveGroup.add("edittext", undefined, "4");
  topValveInput.characters = 8;

JavaScript:
  // Обработчик кнопки switch для инверсии значений
  switchButton.onClick = function() {
    var temp = lowerValveInput.text;
    lowerValveInput.text = topValveInput.text;
    topValveInput.text = temp;
    updateSleeveWidth();
  };

Написал такой код, но кнопка переключения отдельно, сам символ "⇄" отдельно, мне надо как-то объединить их. Как это можно сделать, может кто-нибудь подскажет?
 
Ну да, из кода видно должно быть. Собственно и кнопка то не нужна, просто как повесить обработчик на statictext я не знаю.
 
Вот скриншот, чтобы было наглядно понятно в чем засада.

1766402386901.png
 
Не помню, есть ли вообще в скриптовом UI люстры кнопка типа switch.
Давным-давно делал так:

1. создается группа, в которой картинки двух состояний кнопки вкл и выкл, - одна кнопка под другой
Код:
aaa2: Group { orientation: 'stack', \
b1: IconButton { icon:'"+app.path+"/Presets/en_US/Scripts/buttons/ru1.png' , size:[41, 20] }, \
b2: IconButton { icon:'"+app.path+"/Presets/en_US/Scripts/buttons/rd1.png' , size:[41, 20] }, \
}, \
2. при создании основного окна программы дальше в коде, одна кнопка скрывается ....b1.visible=false, а другая показывается ....b2.visible=true
3. в обработчиках обеих кнопок - меняем состояние видимости кнопок и запоминаем в глобальной переменной это состояние, которое потом используем где-то дальше в коде
 
Последнее редактирование:
Не помню, есть ли вообще в скриптовом UI люстры кнопка типа switch.
Давным-давно делал так:

1. создается группа, в которой картинки двух состояний кнопки вкл и выкл, - одна кнопка под другой
Код:
aaa2: Group { orientation: 'stack', \
b1: IconButton { icon:'"+app.path+"/Presets/en_US/Scripts/buttons/ru1.png' , size:[41, 20] }, \
b2: IconButton { icon:'"+app.path+"/Presets/en_US/Scripts/buttons/rd1.png' , size:[41, 20] }, \
}, \
2. при создании основного окна программы дальше в коде, одна кнопка скрывается ....b1.visible=false, а другая показывается ....b2.visible=true
3. в обработчиках обеих кнопок - меняем состояние видимости кнопок и запоминаем в глобальной переменной это состояние, которое потом используем где-то дальше в коде
Мне собственно не нужно менять состояние кнопок. Текстового символа "⇄" достаточно, нужно только на него как-то обработчик повесить.
 
навесить на statictext обработчик можно так:

допустим statictext
Код:
ed1: EditText { preferredSize: [92, 20], text:'имя', justify:'center' } \

навешиваем
Код:
бла-бла.ed1.addEventListener ("click", function (k) {eee (k)});

внутри функции что-то делаем
Код:
function eee (p)
{
 alert ("жмакнул по statictext");
}

ЗЫ. Но, лично у меня в люстре, это будет срабатывать если нажимаешь мышкой только где-то в этом районе statictext
1766404998533.png

а если по центру щелкать - то ничего не будет происходить. Заморачиваться и разбираться почему так это происходит я забил уже давно, работает и ладно, а что там индусы накодили, что это так - хз
 
Последнее редактирование:
  • Спасибо
Реакции: romaya
Можно обычную кнопку и onClick, только задать габариты кнопки. Не iconbutton. Можно статичный текст и на него событие мышки в прослушиватель.

JavaScript:
(function(){
  // DIALOG
  var win = new Window("dialog");
      win.text = "Dialog";
      win.orientation = "column";
      win.alignChildren = ["center","top"];

  var group1 = win.add("group");
      group1.orientation = "row";
      group1.alignChildren = ["left","center"];

  var edittext1 = group1.add("edittext", undefined, "30");
      edittext1.preferredSize.width = 40;

  var switchBtn = group1.add("button", undefined, "⇄");
      switchBtn.preferredSize.width = 30;
      switchBtn.preferredSize.height = 30;

  var edittext2 = group1.add("edittext", undefined, "10");
      edittext2.preferredSize.width = 40;

  var group2 = win.add("group");
      group2.orientation = "row";
      group2.alignChildren = ["left","center"];

  var edittext3 = group2.add("edittext", undefined, "30");
      edittext3.preferredSize.width = 40;

  var switchLabel = group2.add("statictext", undefined, "⇄");

  var edittext4 = group2.add("edittext", undefined, "10");
      edittext4.preferredSize.width = 40;

  var closeBtn = win.add("button", undefined, "Close", {name: "ok"});

  // EVENTS
  switchBtn.onClick = function () {
    var temp = edittext1.text;
    edittext1.text = edittext2.text;
    edittext2.text = temp;
    this.active = true;
    this.active = false;
  };

  switchLabel.addEventListener('mousedown', function () {
    var temp = edittext3.text;
    edittext3.text = edittext4.text;
    edittext4.text = temp;
  });

  closeBtn.onClick = win.close;

  win.show();
})();
 

Вложения

  • switch.gif
    switch.gif
    65.6 КБ · Просм.: 9
  • Спасибо
Реакции: Chiga, zollinger и densen
Спасибо, попробую, если первый вариант не прокатит.