Q1: Скрытие элементов иерархического пользовательского интерфейса. Оптимизация GPM во избежание скрытия элементов, которые уже скрыты через родительский элемент, по моему мнению, не приведет к значительному увеличению производительности. Мои причины:
- Вы загружаете разрешения один раз, когда пользователь входит в систему, а не все время.
- В зависимости от того, как он закодирован, в любом случае потребуется дополнительная обработка для определения иерархии.
- При надлежащем планировании вы можете избежать регистрации десятков и десятков компонентов и придерживаться всеобъемлющих контейнеров.
Если вы действительно хотите отслеживать иерархическую информацию, вы всегда можете использовать метод «содержащий», который предоставляют все компоненты контейнера для проверки, содержится ли DisplayObject где-либо в его дочернем списке (в том числе в цепочке). Это может быть вызвано каждый раз, когда компонент зарегистрирован, чтобы проверить, есть ли у него уже зарегистрированный родительский элемент.
Затем в словаре можно установить флаг, чтобы игнорировать скрытие этого компонента. Этот флаг можно сначала проверить при переборе списка зарегистрированных компонентов, чтобы определить, что следует скрыть. В словаре могут использоваться ключи, соответствующие UID зарегистрированного компонента. Кроме того, этот флаг можно использовать для игнорирования компонента, когда приходит время игнорировать другие функции GPM, например, отключение формы (так как форма никогда не будет видна в любом случае).
Q2. Вдобавок ко всему, вы можете отключить / включить компоненты, внести изменения в состояние или перехватить события и все оповещения. Это действительно слишком широкий вопрос, так как все можно сделать - действительно, до дизайнера.
Q3. Вы могли бы:
- Укажите параметры при регистрации ваших компонентов, например, укажите, к какому типу они относятся (контейнер для скрытия, форма для настройки только для чтения и т. Д.)
- Проверьте каждый компонент в том виде, как он зарегистрирован, чтобы определить, что будет с ним сделано.
По сути, вы заключаете контракт с различными компонентами, когда GPM знает об их интерфейсах и взаимодействует с ними соответствующим образом.
Q4. Вы всегда можете установить форму для отключения (enabled = false). Это предотвращает любое взаимодействие с пользователем. Некоторые скины изменятся, чтобы указать, что компоненты отключены, поэтому вы можете изменить их скины, чтобы предотвратить некоторые из этих действий отображения. В этой строке вы также можете изменить их обложки, чтобы скрыть определенные элементы, такие как граница поля TextInput, чтобы он выглядел больше как «представление», чем как отключенный ввод.
Можно было бы создать «преобразователь», который изменяет TextInputs с компонентами RichText и тому подобное. Это заняло бы приличный объем работы и, вероятно, должно быть встроено в расширенный класс Form вместо GPM. Я думаю, что различные состояния скинов для каждого типа компонентов могут быть лучшим решением, чтобы избежать создания и уничтожения компонентов просто для изменения внешнего вида формы.