left menu mob button

Спасибо всем, кто сказал «спасибо» по ссылке:

Олег Е.
(23.12.2020):

За полезные скрипты и с Новым годом!

Фёдор Х.
(22.12.2020):

Большое спасибо!

Дмитрий
(20.06.2020):

За скрипт для работы с таблицами в Индизайне.


Новое на канале:

Комментарии

hadi
(10.08.2021 9:44):

Hi. If there is a group style, its subset style will not be displayed.

(Скопировать ГРЕП-стили)

hadi
(24.06.2021 9:04):

hi. It is a perfect script.

(Общее форматирование нескольких таблиц)

bartbin
(11.06.2021 21:22):

Eugenyus, I use your two scripts with great joy and benefit: Split Table Row by Paragraphs and Split Text By Paragraphs. Thank you very much for them. They have saved me time and work many times. I found another very interesting Quick Formatting script on your blog. I copied the code into the Sublime text editor and saved it as a .jsx file type Unfortunately, it does not perform the main function. After pressing start, the inscription -not working- is displayed and the window with the choice of style does not appear. The script still does not make any changes to the text. I have Indesign 2020 Please, write if it's the program's fault or if I wrote something wrong. Thank you so much. Bartholomew

(Быстрое форматирование)

только нужной информации

(серия статей):

Как организовать доступ к списку стилей через Пользовательский интерфейс

Подписчики (и просто зрители) канала «Скрипты для Adobe InDesign» не должны были пропустить выход серии видео по теме, вынесенной в заголовок статьи. В самой же статье приводится код из видео со ссылками на те видео, в которых можно найти пояснения к этому коду.

Здесь только стоит отметить ключевую особенность алгоритма — это его универсальность. С его помощью можно легко и быстро получить список стилей любого типа — абзацных, символьных, табличных, объектных. Достаточно во второй строке первого фрагмента заменить «paragraph» на нужный тип — «character», «table», «cell», «object» — и скрипт сформирует полный список стилей заданного типа (с учётом групп стилей) для пользовательского окна.

А как сделать так, чтобы пользователь сам выбирал тип стилей, необходимых ему? Ссылку на соответствующее видео вы найдёте в конце статьи.

Выбор стилей в пользовательском интерфейсе

Скрипт 1. Пользовательский интерфейс для выбора стилей

Подробности по алгоритму вы найдёте в видео:

«30. Пользовательский интерфейс. Часть 4. Полоса прокрутки как инструмент контроля над размером окна».

#include "getStylesList.jsx"
var stylesType = "paragraph";
var sNames = getStylesList(stylesType);
var w = new Window('dialog', 'Выбор стилей');
w.alignChildren = 'left';
w.orientation = 'column';
w.maximumSize.width = 500;
w.maximumSize.height = 460;
var maingroup = w.add('group');
var pan = maingroup.add('panel', undefined, 'Выберите стили');
pan.alignChildren = 'left';


var cBox = [];
for (i = 0; i < sNames.length; i++){
    cBox[i] = pan.add('checkbox',undefined,sNames[i]);
    cBox[i].helpTip = sNames[i];
    }


var sb = maingroup.add('scrollbar {stepdelta: 26, jumpdelta: 78}');
sb.onChanging = function(){
    for (p = 0; p < cBox.length; p++){
        cBox[p].location.y = -1 * this.value + 26 * p + 13;
        }
    }


var butgroup = w.add('group');
butgroup.add('button', undefined, 'OK');
butgroup.add('button', undefined, 'Cancel');


w.onShow = function(){
    maingroup.size.height = w.size.height - 78;
    maingroup.size.width = w.size.width - 20;
    pan.size.height = maingroup.size.height;
    pan.size.width = maingroup.size.width - 50;
    sb.size.height = maingroup.size.height - 13;
    sb.size.width = 20;
    sb.location = [maingroup.size.width - 30, 10];
    sb.maxvalue = cBox.length * 26 - pan.size.height + 26;
    butgroup.size.width = w.size.width - 20;
    butgroup.location = [20, w.size.height - 50];
    }


if (w.show() != 1) exit();

Скрипт 2. Создание списка стилей для пользовательского окна

Функция создания полного списка стилей. Её надо поместить в отдельный скрипт, который нужно назвать «getStylesList.jsx» и сохранить в одну папку с первым скриптом. Тогда верхний скрипт сможет получить к нему доступ (см. строку 1 верхнего скрипта).

Подробное описание алгоритма можно найти в видео:

«31. Пользовательский интерфейс. Часть 5(1). Как закодить то, «не знаю что»»

«32. Пользовательский интерфейс. Часть 5(2). Как получить список стилей любого типа в одном функционале».

function getStylesList(stylesType){
    var doc = app.activeDocument;
    var curStyleName = stylesType + "Styles";
    var curStyleGroupName = stylesType + "StyleGroups";
    var curScript = "var curStyles = doc." + curStyleName + ";\n";
    curScript += "var curStyleGroups = doc." + curStyleGroupName+";\n";
    app.doScript(curScript);
    var styleList = [];
    for (var i = 1; i < curStyles.length; i++){
        styleList.push(curStyles[i].name);
        }
    for (var i = 0; i < curStyleGroups.length; i++){
        curScript = "var curStylesInGroup = curStyleGroups[i]." + curStyleName + ";";
        app.doScript(curScript);
        for (var j = 0; j < curStylesInGroup.length; j++){
            styleList.push("(" + curStyleGroups[i].name + ") " + curStylesInGroup[j].name);
            }
        }
    return styleList;
    }

Обработка выбранных стилей

После того, как пользователь запустил скрипт и выбрал нужные ему стили, эти стили надо собрать в один массив и передать в основной функционал, в котором будет происходить их обработка.

Соберём в отдельный массив выбранные пользователем стили через отдельную функцию. Строку ниже надо поместить в первый скрипт в конце:

var myStyles = getSelectedStyles(cBox, stylesType);

myStyles — это переменная-массив, которая будет содержать в себе выбранные стили. Сформируем мы этот массив в функции getSelectedStyles. Для этого передадим в неё необходимые данные — массив чекбоксов cBox и тип стилей stylesType.

Функцию надо создать и разместить во втором скрипте — «getStylesList.jsx».

Остальные пояснения смотрите в видео:

«33. Пользовательский интерфейс. Часть 5(3). Обработка выбранных стилей».

function getSelectedStyles(cBox, stylesType){
    var selStyles = [];
    for (var i = 0; i < cBox.length; i++){
        if (cBox[i].value){
            var nm = cBox[i].text.split(") ");
            if (nm.length == 1){
                var s = "selStyles.push(app.activeDocument." + stylesType + "Styles.itemByName(nm[0]));";
                }
            else{
                nm[0] = nm[0].substring(1);
                var s = "selStyles.push(app.activeDocument." + stylesType + "StyleGroups.itemByName(nm[0])." + stylesType + "Styles.itemByName(nm[1]));";
                }
            app.doScript(s);
            }
        }
    return selStyles;
    }

Работа с выбранными стилями в основном функционале

После того, как мы получили массив объектов — выбранных стилей, мы можем отправить этот массив в основной функционал программы. В первом скрипте в конце надо добавить строку:

main(myStyles, stylesType);

Давайте, для примера, просто выведем отчёт о том, какие стили из списка были пользователем выбраны. Функцию создадим также в первом скрипте:

function main(myStyles, stylesType){
    var report = "Выбраны стили:\n";
    for (var i = 0; i < myStyles.length; i++){
        report += myStyles[i].name;
        if (myStyles[i].parent.constructor.name.match("StyleGroup")){
            report += " (" + myStyles[i].parent.name + ")\n";
            }
        else{
            report += "\n";
            }
        }
    alert(report);
    }

Заключение

В заключительном видео, помимо прочего, приводится пример того, каким образом можно предоставить пользователю возможность выбирать не только стили предложенного типа (абзацные, символьные и т. д.), но и, предварительно, — сам тип стилей, с которыми он хочет работать.

Ссылка на видео:

34. Пользовательский интерфейс. Часть 5(4). Финал: наводим порядок, красоту и... ещё одно окно

Комфортной Вам работы с Вашими пользовательскими окнами.


Если предложенный материал оказался
для Вас полезен, Вы можете сказать
автору «спасибо» по этой ссылке.


Комментариев нет.

Оставить комментарий:

Имя*:
E-mail*:
Текст комментария*:
Код безопасности*: