ScriptUI

  • Автор темы Автор темы Gluk-v48
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Gluk-v48

Участник
Топикстартер
Сообщения
12
Реакции
1
Всем привет. Подскажите пожалуйста как сделать подобный интерфейс.

4k0V4rY5his.jpg
 
Т.е., чтобы диалоговое окно скролировалось правым ползунком?
IMHO адобовским скриптингом никак
 
Последнее редактирование:
  • Спасибо
Реакции: _MBK_
@_MBK_, и на старуху бывает проруха =)
 
До этого неделю гуглил и пытался разобраться, не чего толкового не вышло.
scriptui читал, правда более строй версии.
Я пытаюсь сделать панель с динамическим количеством групп, должна быть возможность добавлять, удалять и менять местами группы.
Я не могу понять как получить доступ из .onClick к данным текущей группы, а так же соседним группам.
 
загнать все элементы в массив, а кнопке присвоить свойство с порядковым номером, например name, или даже свое новое, order там или number

в onClick() обращаться

var currControlsGroup = allControlGroups[this.name];

Сейчас внимательно глянул - все таки можно

scrollbar есть, дальше дело техники. можно настоящий скролл делать, можно фейковый - группы прятать и показывать.

если cs6 не нужен, а cc и выше - рекомендую extension делать, возни с UI поменьше будет
 
  • Спасибо
Реакции: Gluk-v48
За невозможностью писать в профильную тему, пишу сюда, тем более, задача топиковая.
Была когда то на форуме такая тема, к консенсусу, так толком и не пришли, но закрыли.
Попробую продолжить здесь.
Создаю окно типа "palette" вызываю из него обработчик кнопки, в котором создаю новый документ:
Код:
#target illustrator
#targetengine another

function startB_onClick()
{
  var newcoll,newjpg,temp_doc;

  sett = new DocumentPreset();
  sett.colorMode = DocumentColorSpace.RGB;
  sett.rasterResolution = DocumentRasterResolution.ScreenResolution;
  try{
    newcoll=app.documents.addDocument("",sett);
  }catch (err){alert(err)};
}

z = new Window("palette","Проба");
z.frameLocation = [270,138];
z.size = [320,131];
z.startB = z.add("button",[221,103,320,126],"Старт");
z.startB.onClick = startB_onClick;
z.show();
Документ-то создается, однако, генерируется ошибка Error: there is no document, соответственно, newcoll undefined
Что за новая адобовская засада или я где то туплю? Если тип окна не palette а dialog то все замечательно.
 
в иллюстраторе да, нельзя нормально.
 
Кому интересно, вот что у меня получилось:

Код:
Array.prototype.exchange = function (a, b) {
    if (this[a] && this[b]) {
        var c = this[a];
        this[a] = this[b];
        this[b] = c
    }
    return this;
}
Array.prototype.toString = function () {
    var x =" = ";
    var y ="\n";
    var str = this[0].join(x);
    for(var i = 1; i < this.length; i++){
        str += y + this[i].join(x);
    }
    return (str);
}

var arr0 = [
    ["01", "01_Item"],
    ["02", "02_Item"],
    ["03", "03_Item"],
    ["04", "04_Item"],
    ["05", "05_Item"],
    ["06", "06_Item"],
    ["07", "07_Item"],
    ["08", "08_Item"],
    ["09", "09_Item"],
    ["10", "10_Item"],
    ["11", "11_Item"],
    ["12", "12_Item"],
    ["13", "13_Item"],
    ["14", "14_Item"],
    ["15", "15_Item"],
    ["16", "16_Item"],
    ["17", "17_Item"],
    ["18", "18_Item"],
    ["19", "19_Item"],
    ["20", "20_Item"],
    ];

var number = 10
var myTempElement;
var myTempPanel;

var www = new Window ("palette", "TEST");
    www.orientation = "row";

var myPanel = www.add("panel");
    myPanel.orientation = "row";
   
var myGroup = myPanel.add("group");
    myGroup.orientation = "column";

for(var i = 0; i<number; i++){
    myTempPanel = myGroup.add("group");
    myTempPanel.orientation = "row";

    myTempElement = myTempPanel.add ("edittext");
        myTempElement.text = arr0[i][1];
        myTempElement.size = [145, 20];
        myTempElement.onChanging = function () {arr0[this.myIndex][1] = this.text};
        myTempElement.myIndex = i;

    myTempElement = myTempPanel.add("button");
        myTempElement.text = "↑";
        myTempElement.size = [20,20];
        myTempElement.onClick = function(){myClick(this, -1)};
        myTempElement.myIndex = i;   
        disable_if_zero(myTempElement);

    myTempElement = myTempPanel.add("button");
        myTempElement.text = "↓";
        myTempElement.size = [20,20];
        myTempElement.onClick = function(){myClick(this, 1)};
        myTempElement.myIndex = i;
        disable_if_last(myTempElement);

    myTempElement = myTempPanel.add("button");
        myTempElement.text = "X";
        myTempElement.size = [20,20];
        myTempElement.onClick = function(){myRemove(this)};
        myTempElement.myIndex = i;
}

var myScrollbar = myPanel.add("scrollbar");
    myScrollbar.value = 0;
    myScrollbar.minvalue = 0;
    myScrollbar.maxvalue = arr0.length-number;
    myScrollbar.size = [20,300]
    myScrollbar.helpTip = "Привет";
    myScrollbar.onChanging = function(){myScroll(this)};

var myButtonGroup = www.add("group");
    myButtonGroup.orientation = "column";

var myButtonOK = myButtonGroup.add ("button");
    myButtonOK.text = "OK";
    myButtonOK.helpTip = "Привет";
    myButtonOK.onClick = function(){alert(arr0)};

var myButtonAdd = myButtonGroup.add ("button");
    myButtonAdd.text = "Add";
    myButtonAdd.helpTip = "Привет";
    myButtonAdd.onClick = function(){myAdd(this)};

www.show();

function myScroll(current){
    if (current.maxvalue <= 0){
        current.visible = 0;
    }
    var BaseAddress = myGroup.children;
    var temp;
    for (var i = 0; i<BaseAddress.length; i++){
        var BaseChildren = BaseAddress[i].children;
        for (var b = 0; b<BaseChildren.length; b++){
            temp = ~~(current.value);
            if(temp < 0){temp = 0}
            BaseChildren[b].myIndex = temp+i;
        }
        try {
            BaseChildren[0].text = arr0[BaseChildren[0].myIndex][1];
            BaseChildren[0].parent.visible = 1;
        }catch (e){
            BaseChildren[0].parent.visible = 0;
        }
        BaseChildren[0].active = 0;
       
        disable_if_zero(BaseChildren[1]);
        disable_if_last(BaseChildren[2]);
    }
}

function disable_if_zero(ar){if (ar.myIndex == 0){ar.enabled = 0}else{ar.enabled = 1}};
function disable_if_last(ar){if (ar.myIndex == arr0.length-1){ar.enabled = 0}else{ar.enabled = 1}};

function myAdd(ar){
    arr0.push(["New", "New Item"]);
    var myLength = arr0.length;
    //Управление скролом
    if (myLength > number){
        myScrollbar.visible = 1;
        myScrollbar.maxvalue = (myScrollbar.maxvalue + 1);
    }
    myScrollbar.value = myLength;
    myScrollbar.onChanging();
}

function myClick(current, ar){
    arr0.exchange(current.myIndex, current.myIndex + ar);
    myScrollbar.onChanging();
}

function myRemove(current){
    if (current.myIndex < 0){
        return
    }
    arr0.splice(current.myIndex,1);
    //Управление скролом
    if (arr0.length > number-1){
        myScrollbar.maxvalue = myScrollbar.maxvalue-1;
    }
    myScrollbar.onChanging();
}
 
  • Спасибо
Реакции: dumbm1
Любопытно, а в чем сакральный смысл ~~(current.value)? Извращенное округление до целого? И, кстати, разве оно вообще отрицательным может быть?
 
  • Спасибо
Реакции: Gluk-v48
Любопытно, а в чем сакральный смысл ~~(current.value)? Извращенное округление до целого?

Код:
~~(current.value)
тоже самое, что и
Код:
Math.round(current.value)
, только читается и пишется проще(для меня), а так же мои тесты говорят, что ~~ работает в три раза быстрее в ESTK.

И, кстати, разве оно вообще отрицательным может быть?
На данный момент вроде не может, но в ходе написания принимало отрицательные значения...
 
Вообще, говоря, это не одно и то же, что Math.round
Скорее, Math.trunc, но для этого есть хорошая функция parseInt
Конструкция `` (как и |0) лично мне кажется череcчур спорной. 'hmmm'
 
  • Спасибо
Реакции: Gluk-v48
Статус
Закрыто для дальнейших ответов.