Доброго! Как и обещал здесь — напишу о своём опыте создания скрипта для программы Adobe Photoshop. Опыт этот не претендует на 100% верное руководство к действиям — просто я так сделал, и всё работает.
Тут будет не показательное программирование, а скорее некоторые шишки, из-за которых он создавался день, а не 10 минут:)
Во-первых, ссылки.
http://www.adobe.com/devnet/photoshop/scripting/ — эдоби о своём детище, мануалы
http://blogs.adobe.com/crawlspace/2006/04/cs_ui_builder_2.html — построитель ui для вашего скрипта(весьма и весьма недоделанный, но лучше чем ручками)
http://bigmag.net/copyright/ — мой скрипт
Ну что ж, можно открыть copyrightPlacerRU.jsx в любом редакторе кода и следить за повествованием.
Разбирать каждую строку думаю не стоит(я и сам кое-что делал просто по наитию, об этом ниже)
Первое с чем я столкнулся — это построение интерфейса. Перерыв гайды с сайта эдоби я не нашел ничего внятного, начал искать дальше — и вот замечательная программа CSUIB_2. Она создаёт строку, благодаря которой мы создаём экземпляр класса Window передавая её в параметры:
На построение интерфейса ушла львина доля времени, так как скрипт писал на ноутбуке, не умеющем запускать exe файлы, и приходилось бегать от компьютера к компьютеру, плюс CSUIB, грубо говоря, не совсем стабильна:) Но это лирика, идём дальше.
Думаю вы уже обратили внимание на ужасную структуру кода — так вот перестаньте обращать на это внимание:)
После построения интерфейса случился ещё один останов — почему то не вызывались обработчики кнопок. Видимо из-за времени и усталости я не сразу понял, что если поставить обработчик события позже появления окна — то его вызова не будет, вплоть до закрытия окна.
Кстати, до сих пор не знаю по какому принципу на форме выбирается кнопка «submit» — видимо по тексту(«OK», «Cancel»). Разобраться не успел — если в подскажете решение, буду благодарен.
Другая львиная часть времени ушла на… проверку незаполненности формы. Просто после нажатия на кнопку OK окно больше появляться не собиралось, и пришлось переопределять его экземпляр. Но при этом стирались значения, которые пользователь всё же успел ввести. Быстро сохранив во временные переменные значения TextEditов я столкнулся с непониманием как сохранить значение DropDownList. Опять же в гайдах эдоби тишина, решение которое сработало заставляет меня плакать каждый раз при виде его.
Опять же переопределение окна скидывало все обработчики событий(что вполне естественно) и я для удобства включил их определение в функцию, хотя, конечно, стоило бы вынести и потом просто передавать их указатель.
Вообще сейчас, утром, я вижу как и что сделать красиво и правильно, надеюсь выкрою время и всё переделаю.
В комментариях хотелось бы услышать вопросы и свои шишки, а не предложения по коду:)
Спасибо за внимание.
PS: плюсы dzhuff, на основе его кода делался мой(:
Тут будет не показательное программирование, а скорее некоторые шишки, из-за которых он создавался день, а не 10 минут:)
Во-первых, ссылки.
http://www.adobe.com/devnet/photoshop/scripting/ — эдоби о своём детище, мануалы
http://blogs.adobe.com/crawlspace/2006/04/cs_ui_builder_2.html — построитель ui для вашего скрипта(весьма и весьма недоделанный, но лучше чем ручками)
http://bigmag.net/copyright/ — мой скрипт
Ну что ж, можно открыть copyrightPlacerRU.jsx в любом редакторе кода и следить за повествованием.
Разбирать каждую строку думаю не стоит(я и сам кое-что делал просто по наитию, об этом ниже)
Первое с чем я столкнулся — это построение интерфейса. Перерыв гайды с сайта эдоби я не нашел ничего внятного, начал искать дальше — и вот замечательная программа CSUIB_2. Она создаёт строку, благодаря которой мы создаём экземпляр класса Window передавая её в параметры:
win = new Window (ui);
На построение интерфейса ушла львина доля времени, так как скрипт писал на ноутбуке, не умеющем запускать exe файлы, и приходилось бегать от компьютера к компьютеру, плюс CSUIB, грубо говоря, не совсем стабильна:) Но это лирика, идём дальше.
Думаю вы уже обратили внимание на ужасную структуру кода — так вот перестаньте обращать на это внимание:)
После построения интерфейса случился ещё один останов — почему то не вызывались обработчики кнопок. Видимо из-за времени и усталости я не сразу понял, что если поставить обработчик события позже появления окна — то его вызова не будет, вплоть до закрытия окна.
Кстати, до сих пор не знаю по какому принципу на форме выбирается кнопка «submit» — видимо по тексту(«OK», «Cancel»). Разобраться не успел — если в подскажете решение, буду благодарен.
Другая львиная часть времени ушла на… проверку незаполненности формы. Просто после нажатия на кнопку OK окно больше появляться не собиралось, и пришлось переопределять его экземпляр. Но при этом стирались значения, которые пользователь всё же успел ввести. Быстро сохранив во временные переменные значения TextEditов я столкнулся с непониманием как сохранить значение DropDownList. Опять же в гайдах эдоби тишина, решение которое сработало заставляет меня плакать каждый раз при виде его.
for (var i=0,len=stringList.length-1;i<len;i++)
{
if (String(win.pnl.alignDDL.items[i])==tmpDDL)
{
win.pnl.alignDDL.selection=win.pnl.alignDDL.items[i];
}
}
Опять же переопределение окна скидывало все обработчики событий(что вполне естественно) и я для удобства включил их определение в функцию, хотя, конечно, стоило бы вынести и потом просто передавать их указатель.
Вообще сейчас, утром, я вижу как и что сделать красиво и правильно, надеюсь выкрою время и всё переделаю.
В комментариях хотелось бы услышать вопросы и свои шишки, а не предложения по коду:)
Спасибо за внимание.
PS: плюсы dzhuff, на основе его кода делался мой(: