Этот тип провайдера я специально вынес в отдельную статью, чтобы остановиться на его возможностях более подробно. Итак, речь пойдет о скриптах.
Прошлые статьи по теме:
- AIMP4: Skin Engine
- AIMP4: Skin Engine — элементы управления. Часть 1
- AIMP4: Skin Engine — элементы управления. Часть 2
- AIMP4: Skin Engine — пользовательские локализации
- AIMP4: Skin Engine — графика
- AIMP4: Skin Engine — оптимизации
- AIMP4: Skin Engine — пользовательские провайдеры. Часть 1
- AIMP4: Skin Engine — пользовательские провайдеры. Часть 2
Основной задачей скриптов является возможность динамического изменения структуры и свойств элементов скина. Все свойства, что мы видим в окне «Свойства элемента» можно менять из скрипта, включая изменение предка:
На текущий момент скриптовые возможности представлены в виде одного единственного провайдера — ScriptableOperatorCounter. Это наследник от обычного счетчика, у которого вы можете переписать функцию-обработчик изменения его значения. Для описания инструкций скрипта используется паскале-подобный синтаксис:
Как вы видите на картинке выше, скрипт имеет одну процедуру с входным параметром (значение счетчика). Все выполняемые скриптом действия должны быть привязаны к значению счетчика, поскольку оно загружается / сохраняется из пользовательского файла с настройками.
Пример
Рассмотрим простенький пример — положение кнопки будет меняться в зависимости от состояния «флажка».
Разместим в редакторе кнопку и флажок:
Теперь создадим ScriptableOperatorCounter в диалоге пользовательских провайдеров:
Вызовем диалог настройки связей для нашего «флажка» и свяжем его с ScriptableOperatorCounter:
Что у нас получилось? Клик по флажку увеличивает значение счетчика на 1, флажок, в свою очередь, использует текущее значение счетчика в качестве индикатора своего состояния, т.е. «флажок» будет стоять, когда значение счетчика > 0, и отсутствовать, если значение счетчика = 0.
Теперь настроим наш скриптовой провайдер: в первую очередь нам нужно задать модуль счетчика равный 2 (у нас 2 значения — 0 и 1). Делается это весьма просто — кнопка вызова диалога настроек счетчика находится внизу окна редактора скрипта:
Сосредоточимся на скрипте:
Я не буду переписывать здесь комментарии из скрипта, а сфокусируюсь на нюансах:
- Обратите внимание, что для ситуации, когда значение счетчика = 0 (значение по умолчанию), положение кнопки у нас указано ровно то, что мы указали в редакторе скинов. Проще говоря, значение по умолчанию в скрипте и в редакторе у вас должно быть одно и то же, иначе интерфейс будет вести себя неадекватно при изменении значения счетчика
- Если вы попытаетесь обратиться к свойству, которого нет у элемента, или зададите ему неверное значение — движок выдаст ошибку и скрипт будет «выключен»
- Связка BeginUpdate / EndUpdate позволяет отключить рассылку уведомлений об изменениях в элементе на время его редактирования. Рекомендуется к использованию при изменении более одного свойства за раз.
Кнопка «Собрать» позволяет проверить скрипт на наличие ошибок, если ошибок нет — скрипт соберется без проблем. Сохраняем, собираем скин и запускаем плеер:
Вместо заключения
Полный список функций, методов и свойств объектов вы сможете найти в справке к новой версии редактора скинов.
На этой ноте я хочу закончить цикл статей о новой версии скин-движка. Если у вас есть какие-то вопросы или предложения, быть может вам не хватает каких-либо возможностей — самое время написать об этом, т.к. после выпуска 4-ки изменения в структуру скинов вносить будет уже нельзя.
Следующий цикл статей будет посвящен другому глобальному изменению в AIMP4 — фонотеке.
Мне, как непрограммисту, пока что на это страшно смотреть. Надеюсь, что не всё так сложно, как выглядит на первый взгляд =)
О даа, я ждал эту статью =) Одним словом — это круто!
Парочка моментов:
1) В редакторе в режиме теста скрипты будут работать?
2) Можно ли получить доступ к пользовательским провайдерам? Да и не только к пользовательским (например, из скрипта вызвать action провайдера или получить данные)?
1. Да.
2. Да, достучаться можно, но только к публичным свойствам (например, модуль счетчика и текущее его положение). Достучаться до точек доступа нельзя, во всяком случае на сейчас. Я уверен, в ходе альфа-тестирования список возможностей будет расширяться (не только для скриптов) по ходу появления идей и сценариев использования.
Даа, очень круто, наконец-то долгожданные скрипты =)
1. Будет ли автодополнение (autocomplete) в редакторе скриптов?
2. В примере меняется заголовок кнопки. Можно ли будет использовать макросы пользовательских локализаций в скриптах?
1. Пока нет
2. В виде макросов — конечно, в виде финального текста — нет (на мой взгляд, это и не нужно)
Круто — не то слово, фантастика! Да ещё на родном паскале/делфи.
И уж совсем наглый вопрос: не будет ли, как в делфях, после постановки точки, в виде хинта выводится перечень доступных функций?
Пока нет.
Артём, можно ли будет с помощью скриптов заменить курсоры мыши для всех действий?
Можно ли будет навесить шлейф (или болтающуюся цепь) на мышь?
Нет, менять курсоры нельзя, в движке такое не предусмотрено в принципе. Что касается скриптов, то изменять можно лишь свойства элементов скина, изменить, например, текстуру не получится
Ясно, жаль
Артём, a. можно ли будет с помощью скриптов достучатся до параметров настройки? к примеру вывести чекбокс «Авто подстройки под жанр»?
b. И ещё мечта сделать комбинированную кнопку Повтор с 3-мя (или 4-мя) действиями по кругу:
1. Повтор плейлиста — откл.
2. Повтор плейлиста — вкл.
3. Повтор трека — вкл.
Возможно ли такое?
Сейчас поле действия скриптов ограничивается только элементами скина.
Спасибо, понятно.