[AI CC-CC2021] RECOLOR ENGINE v2 by S.H.

splxgf

12 лет на форуме
Сообщения
7 740
Реакции
3 421

splxgf

12 лет на форуме
Сообщения
7 740
Реакции
3 421
А может есть решение проще? к примеру сделать две панели рядом, одну CM, другую YK и играться их свойством Visible.
 

splxgf

12 лет на форуме
Сообщения
7 740
Реакции
3 421
Код:
var w = new Window ("dialog");

w.alignChildren="left";
 
var ts = w.add('panel', undefined, '');
ts.cm      = ts.add ("radiobutton", undefined, "CM");   
ts.yk       = ts.add ("radiobutton", undefined, "YK");
ts.cmyk   = ts.add ("radiobutton", undefined, "CMYK");
ts.cmyk.value = true;
ts.orientation = "row";
 
ts.cm.onClick = update;
ts.yk.onClick = update;
ts.cmyk.onClick = update;

var slg = w.add('group', undefined, '');   
var cm=slg.add('panel', undefined, 'CM')
var sliderC = cm.add ("slider", undefined, 0, -200, 200);
var sliderM = cm.add ("slider", undefined, 0, -200, 200);

var yk=slg.add('panel', undefined, 'YK')
var sliderY = yk.add ("slider", undefined, 0, -200, 200);
var sliderK = yk.add ("slider", undefined, 0, -200, 200);

w.show ();


function update(){
    cm.visible=false;
    yk.visible=false;
    
    if (ts.cmyk.value || ts.cm.value) cm.visible = true;
    if (ts.cmyk.value || ts.yk.value) yk.visible = true;
    if (ts.yk.value || ts.cm.value) slg.orientation="stack" else slg.orientation="row";
    w.layout.layout(true);
}
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 137
Реакции
10 835
  • Спасибо
Реакции: MrDesigner и Flame

splxgf

12 лет на форуме
Сообщения
7 740
Реакции
3 421
Я бы порекомендовал нормальный язык. Хорошая книжка по C++ даст больше понимания откуда ноги растут.
Если не вдаваться в тонкости, то для работы хватает поверхностных знаний Си/Паскале/Бейсико-подобных языков ну и чуть более глубокого понимания их принципов.
 

Станислав Хоффман

Участник
Топикстартер
Сообщения
277
Реакции
23
А может есть решение проще? к примеру сделать две панели рядом, одну CM, другую YK и играться их свойством Visible.

проблема в том, что интерфейс я строил по координатам и вся разметка рассыпается:
как сохранить разметку?

Код:
var w = new Window ("dialog");

w.alignChildren="left";
 
var ts = w.add('panel', undefined, '');
ts.cm      = ts.add ("radiobutton", undefined, "CM");   
ts.yk       = ts.add ("radiobutton", undefined, "YK");
ts.cmyk   = ts.add ("radiobutton", undefined, "CMYK");
ts.cmyk.value = true;
ts.orientation = "row";
 
ts.cm.onClick = update;
ts.yk.onClick = update;
ts.cmyk.onClick = update;

var slg = w.add('group', undefined, '');   
var cm=slg.add('panel', [0,0,300,300], 'CM')  //  PANEL 1  //  ЗАМЕНЯЕМ  undefined  на координаты

    var ys1 = 5;
    var ys2 = 30;
     Label_neg200 = cm.add("statictext", [20, ys1, 45, ys2], "-200"); 
     Label_0        = cm.add("statictext", [122, ys1, 170, ys2], "0"); 
     Label_200     = cm.add("statictext", [210, ys1, 250, ys2], "200"); 

    var xxx = 20;
    var yyy = 10;
    var xx2 = 230;
    var yy2 = 45;
    
    var dfg = 8;
    Label_CC = cm.add("edittext", [xxx+220, 19+dfg, 280, 38+dfg],             "100"); 
    Label_CM = cm.add("edittext", [xxx+220, 19+dfg+20, 280, 38+dfg+20], "0"); 
    Label_CY = cm.add("edittext", [xxx+220, 19+dfg+40, 280, 38+dfg+40], "0"); 
    Label_CK = cm.add("edittext", [xxx+220, 19+dfg+60, 280, 38+dfg+60], "0"); 

        var slideCC = cm.add("slider", [xxx, 25, xx2, 50], 0, -200, 200);      slideCC.value = 100;
        var slideCM = cm.add("slider", [xxx, 45, xx2, 70], 0, -200, 200);     slideCM.value = 0;
        var slideCY = cm.add("slider", [xxx, 65, xx2, 90], 0, -200, 200);      slideCY.value = 0;
        var slideCK = cm.add("slider", [xxx, 85, xx2, 110], 0, -200, 200);    slideCK.value = 0;

var yk=slg.add('panel', undefined, 'YK') //  PANEL 2

var sliderY = yk.add ("slider", undefined, 0, -200, 200);
var sliderK = yk.add ("slider", undefined, 0, -200, 200);
var sliderK = yk.add ("slider", undefined, 0, -200, 200);
var sliderK = yk.add ("slider", undefined, 0, -200, 200);

w.show ();


function update(){
    cm.visible=false;
    yk.visible=false;
    
    if (ts.cmyk.value || ts.cm.value) cm.visible = true;
    if (ts.cmyk.value || ts.yk.value) yk.visible = true;
    if (ts.yk.value || ts.cm.value) slg.orientation="stack" else slg.orientation="row";
    w.layout.layout(true);
}
 

splxgf

12 лет на форуме
Сообщения
7 740
Реакции
3 421
проблема в том, что интерфейс я строил по координатам и вся разметка рассыпается: как сохранить разметку?
Тут два варианта, либо не использовать координаты, либо их пересчитывать при переключении.
Я же давал ссылку на хорошую книжку https://adobeindd.com/view/publicat...on-web-resources/pdf/scriptui-2-13-f-2017.pdf
Там есть очень много ответов, если правильно задавать вопросы.
курить alignment, alignChildren, size.width, preferred/Max/Min-Size ну и может что-то еще.
 
  • Спасибо
Реакции: VVVSLAVA

Станислав Хоффман

Участник
Топикстартер
Сообщения
277
Реакции
23
Тут два варианта, либо не использовать координаты, либо их пересчитывать при переключении.
Я же давал ссылку на хорошую книжку https://adobeindd.com/view/publicat...on-web-resources/pdf/scriptui-2-13-f-2017.pdf
Там есть очень много ответов, если правильно задавать вопросы.
курить alignment, alignChildren, size.width, preferred/Max/Min-Size ну и может что-то еще.
книжка всегда под рукой. Попробую пересчитывать координаты. Спасибо.
 

splxgf

12 лет на форуме
Сообщения
7 740
Реакции
3 421

splxgf

12 лет на форуме
Сообщения
7 740
Реакции
3 421
Времени что-то не предвидится в ближайшее время, так что опишу словами.
Чтобы не привязываться к координатам нужно использовать несколько вложенных панелей.
- Основная часть
-- Панель CM
--- Панель C
---- Панель слайдеров C
---- Панель текстовых блоков
---- Панель кнопок сброса
--- Панель M
---- Панель слайдеров M
---- Панель текстовых блоков
---- Панель кнопок сброса

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

Станислав Хоффман

Участник
Топикстартер
Сообщения
277
Реакции
23
Времени что-то не предвидится в ближайшее время, так что опишу словами.
Чтобы не привязываться к координатам нужно использовать несколько вложенных панелей.
- Основная часть
-- Панель CM
--- Панель C
---- Панель слайдеров C
---- Панель текстовых блоков
---- Панель кнопок сброса
--- Панель M
---- Панель слайдеров M
---- Панель текстовых блоков
---- Панель кнопок сброса

так можно определять ширину на уровне группы, а элементы в нее впишутся. Желательно никаких жестких координат, только задавать ширину.
жалко выбрасывать свою разметку. Сначала остановился на варианте с переходом в один конец win 1 > win 2. Этого было бы достаточно. Когда стал собирать, решил завернуть блоки интерфейса в функции, тут же полезли ошибки - переменные перестали видеться из функций. Сделаю проще - 2 скрипта - 2 интерфейса.