Окно обновления сценария Indesign?

Изменить: я также открыт для других предложений о том, что я мог бы сделать.

Как я могу обновить свое окно с помощью события onChange? Мое решение работает, но мне нужно, чтобы группы сворачивались, когда они не видны.

w.DD.onChange = function() {
    switch (this.selection.text){
        case 'Headline':
                if(w.visiblegroup)
                w.visiblegroup.visible = false;
                w.visiblegroup = w.texted;
                w.texted.visible = true;
            break;
    }
}

Я пытался использовать w.show, w.update (с документацией, до сих пор не уверен, что на самом деле делает .update) после добавления элементов в сам case. Но я не могу понять это.

w.DD.onChange = function() {
    switch (this.selection.text){
        case 'Headline':
                w.add('checkbox', undefined, 'User-Color');
                //w.show();
                w.update();
            break;
    }
}

Кто-нибудь знает, как это может работать?


person Frederik Witte    schedule 03.11.2014    source источник
comment
Речь идет об индизайнерском скриптинге, html нет.   -  person Frederik Witte    schedule 19.11.2014
comment
Извините, не увидел теги   -  person Aman B    schedule 19.11.2014


Ответы (2)


Обычно я избегаю использования LayoutManager и делаю все расчеты самостоятельно, чему я больше доверяю, но это мое скромное мнение…

var w = new Window("dialog");
w.preferredSize = [200,200];
w.DD = w.add( 'dropdownlist', undefined, ["A","B"] );
w.DD.selection = 0;
w.DD.alignment = ["fill","top"];

//Setting a stacked group to items overlay
w.gp = w.add('group');
w.gp.orientation = 'stack';
w.gp.alignment = ["fill","top"];
w.gp.alignChildren = ["fill","top"];
w.gp.p1 = w.gp.add('panel',undefined, "A");
w.gp.p2 = w.gp.add('panel',undefined, "B");

//dummy text to show "collapsing"
w.st = w.add('statictext',undefined, "Collapse ?");

w.DD.onChange = function() {
    w.gp.p1.visible = w.DD.selection==0;
    w.gp.p2.visible = !w.gp.p1.visible;
    w.gp.p2.size.height =100;
    w.gp.size.height = w.gp.p1.visible? 50 : 100;
    w.st.location.y = w.gp.location.y+w.gp.size.height+10;
}

w.onShow = function() {
    w.gp.p2.visible=false;
    w.gp.size.height = w.gp.p1.size.height = 50;
    w.st.location.y = w.gp.location.y+w.gp.size.height+10;
}

w.show();

введите здесь описание изображения

введите здесь описание изображения

Лоик

person Loic    schedule 08.01.2016

Чтобы свернуть группы и окно, вам нужно будет использовать метод layout() вашего окна. Это загрузит LayoutManager, который управляет автоматическим поведением макета для окна или контейнера. У LayoutManager также есть метод с именем layout(), этот метод вызывает автоматическое поведение макета и вызывается автоматически при первом отображении окна. После этого скрипт должен вызвать его явно следующим образом:

window.layout().layout();

Пример использования менеджера по расположению от Gerald Singelmann:

function main() { 
    var win = new Window("dialog"); 

    var maingroup = win.add("panel"); 
    maingroup.orientation = "column"; 
    add_group( maingroup ); 

    var show_btn = win.add("button", undefined, "show"); 
    show_btn.onClick = function() { 
        var txt = ""; 
        for (var n = 0; n < maingroup.children.length; n++) { 
            txt += maingroup.children[n].edit.text + "\n"; 
        } 
        alert("Da steht: \n" + txt ); 
    } 

    win.show(); 

    function add_group( maingroup ) { 
        var group = maingroup.add( "group" ); 
        group.edit = group.add("edittext", [undefined, undefined, 200, 20], maingroup.children.length ); 
        group.plus = group.add("button", undefined, "+"); 
        group.plus.onClick = add_btn; 
        group.minus = group.add("button", undefined, "-"); 
        group.minus.onClick = minus_btn; 
        group.index = maingroup.children.length - 1; 
        win.layout.layout( true ); 
        return group; 
    } 
    function add_btn ( e ) { 
        add_group( maingroup ); 
    } 
    function minus_btn ( e ) { 
        var ix = this.parent.index; 
        maingroup.remove( maingroup.children[ix] ); 
        win.layout.layout( true ); 
    } 
} 

источник

person Bruno    schedule 08.01.2016