как назначит hotkey на кнопку скрипта

Представьте ситуацию, когда вы написали скрипт (или у вас уже есть чей-то скачанный скрипт) как на рисунке выше и вам нужно очень часто нажимать кнопку Do something cool with objects list или Export objects list. Я бы захотел назначить горячую клавишу на эти кнопки.

Внимание! Делаю акцент: hotkey должен нажимать кнопку именно в этом плавающем окошке, а не вызывать это окошко заново и жать кнопку автоматически.

Решение

Логика решения такова: создать ещё один скрипт, на который мы повесим горячую клавишу и этот второй скрипт будет нажимать на нашу кнопку. Осталось только сделать так, чтобы второй скрипт смог найти нужную нам кнопку запущенного окошка Awesome script.

Первым делом, нужно сделать так, чтобы у нас всегда была запущена только одна копия Awesome script. Иначе вы не будете знать для какой копии сработает shortcut:

try(closeRolloutFloater awesomeScriptFloater) catch() 
global awesomeScriptFloater = newRolloutFloater "Awesome script" 300 230

Поскольку мы будем обращаться к кнопке, расположенной на Awesome rollout 2, то нужно сделать этот rollout видимым для другого скрипта (т.е. глобальным):

global awesomeRollout2

Далее делаем так, чтобы после закрытия плавающего окошка, эта глобальная переменная удалялась (чтобы мы не могли больше обращаться горячей клавишей к кнопке на уже закрытом окне). Да и вообще насильно запускаем garbage collection (gc), чтобы освободить занятые скриптом ресурсы:

on awesomeRollout2 close do
(
     globalvars.remove "awesomeRollout2"
     gc light:true
)

На всякий случай добавлю сюда код кнопки (обычный, стандартный код кнопки), которую мы будем нажимать из другого скрипта:

button exportObjectsList "Export objects list"

На стороне Awesome script мы сделали всё.

Теперь приступим ко второму скрипту (на котором будет горячая клавиша, и который будет нажимать кнопку в плавающем окошке).

Первым делом, мы проверим, запущен ли Awesome rollout 2. Для этого просто сравним значение глобальной переменной awesomeRollout2 со значением undefined. Если скрипт не запущен (переменная не определена), то выведем сообщение: "Сначала нужно запустить скрипт". Если переменная определена (не равняется undefined), то это значит, что плавающее окошко запущено и мы можем нажимать нашу кнопку:

if awesomeRollout2 == undefined then
(
    messageBox "Launch Awesome script first"
)
else
(
    awesomeRollout2.exportObjectsList.pressed()
)

Последняя строчка расшифровывается так: найти глобальную переменную awesomeRollout2 (которая хранит наш свиток с кнопкой), обратиться к кнопке exportObjectsList и вызвать метод кнопки с именем pressed() (который отвечает за то, чтобы нажать эту кнопку).

Точки в этом случае указывают на то, что awesomeRollout2 является родителем для exportObjectsList. А exportObjectsList, в свою очередь, является родителем для функции pressed().

Вот и всё. О том как назначать shortcuts на скрипт читайте тут.




Подпишитесь на обновление блога (вот 3 причины для этого).
Введите ваш e-mail:





Вам понравилась статья? Хотите отблагодарить автора? Расскажите о ней друзьям.
Или подпишитесь на обновление блога по E-Mail.

Введите ваш e-mail (используется только для отправления обновлений блога):

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

(обязательно)

не публикуется (обязательно)

Все комментарии проходят ручную проверку. При малейшем намёке на спам или негатив - удаляю.

Подписаться по e-mail на новые комментарии

© 2008 - 2018 3dyuriki.com
Для связи со мной 3dyuriki@gmail.com