Как стать автором
Обновить

Мой первый опыт программирования для Photoshop

Время на прочтение2 мин
Количество просмотров7.3K
Доброго! Как и обещал здесь — напишу о своём опыте создания скрипта для программы 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 передавая её в параметры:

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, на основе его кода делался мой(:
Теги:
Хабы:
Всего голосов 29: ↑20 и ↓9+11
Комментарии28

Публикации

Истории

Ближайшие события

15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань