[CC] RECOLOR ENGINE v2 by S.H.

Тема в разделе «Скриптинг в Adobe Illustrator», создана пользователем Станислав Хоффман, 28 мар 2018.

  1. win - это первое окно. второе - win2
     
  2. я понял, думал мы закрываем окно 2 - win(1) - 0 - первое, 1 - второе), а здесь close(1). Начинает проясняться.
     
  3. Вы, все таки, покурите основные принципы программирования на яваскрипте. А то, вроде, серьезные программы пишете, но, временами, зияющие пробелы в базовых понятиях просто ужасают. 'fp'
     
    • Одобряю Одобряю x 1
  4. сейчас подкинули новый вариант с resize:

    Код:
    var   
    u, 
    ui = new Window('dialog'), 
    mainStack = ui.add('group'), 
    fullView = mainStack.add('group'), 
    basicView = mainStack.add('group'), 
    fullBtn = fullView.add('button',u,'Go to full view'), 
    basicBtn = basicView.add('button',u,'Go to basic view'), 
    basicDims = [400,500], 
    fullDims =[150,200] ; 
    fullBtn.id = "full"; 
    basicBtn.id = "basic"; 
     
    ui.preferredSize = fullDims; 
    mainStack.alignment = ["fill","fill"]; 
    mainStack.alignChildren = ["fill","top"]; 
    mainStack.orientation = "stack"; 
    basicView.visible = false; 
     
    basicBtn.onClick = fullBtn.onClick = function(){ 
    var id = this.id; 
    if ( id == "full" ) { 
    fullView.visible = false; 
    basicView.visible = true; 
    ui.size = basicDims; 
    ui.layout.resize(); 
    //ui.center(); 
    } 
    else { 
    fullView.visible = true; 
    basicView.visible = false; 
    ui.size = fullDims; 
    ui.layout.resize(); 
    //ui.center(); 
    } 
    } 
     
    ui.show();  
     
  5. прекрасно Вас понимаю, спасибо за тактичность и терпение.
     
  6. Век живи, век учись.
     
    • Одобряю Одобряю x 2
  7. спасибо
     
  8. А может есть решение проще? к примеру сделать две панели рядом, одну CM, другую YK и играться их свойством Visible.
     
  9. Код:
    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);
    }
     
  10. А порекомендуйте нормальный учебник? Тоже хочу перестать писать говнокод и костыли.
     
  11. Ну сходу вот первое что нагуглилось
     
    • Одобряю Одобряю x 2
  12. Можно начинать отсюда: Классика Computer Science
     
  13. Я бы порекомендовал нормальный язык. Хорошая книжка по C++ даст больше понимания откуда ноги растут.
    Если не вдаваться в тонкости, то для работы хватает поверхностных знаний Си/Паскале/Бейсико-подобных языков ну и чуть более глубокого понимания их принципов.
     
  14. проблема в том, что интерфейс я строил по координатам и вся разметка рассыпается:
    как сохранить разметку?

    Код:
    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);
    }
     
  15. Тут два варианта, либо не использовать координаты, либо их пересчитывать при переключении.
    Я же давал ссылку на хорошую книжку https://adobeindd.com/view/publicat...on-web-resources/pdf/scriptui-2-13-f-2017.pdf
    Там есть очень много ответов, если правильно задавать вопросы.
    курить alignment, alignChildren, size.width, preferred/Max/Min-Size ну и может что-то еще.
     
    • Одобряю Одобряю x 1
  16. книжка всегда под рукой. Попробую пересчитывать координаты. Спасибо.
     
  17. Ну это самый сексуальный способ, хотя иногда и быстрый. Если будет время попробую накидать альтернативный вариант.
     
  18. Времени что-то не предвидится в ближайшее время, так что опишу словами.
    Чтобы не привязываться к координатам нужно использовать несколько вложенных панелей.
    - Основная часть
    -- Панель CM
    --- Панель C
    ---- Панель слайдеров C
    ---- Панель текстовых блоков
    ---- Панель кнопок сброса
    --- Панель M
    ---- Панель слайдеров M
    ---- Панель текстовых блоков
    ---- Панель кнопок сброса

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